欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[Linux]nginx与Tomcat整合配置(安装配置教程一条龙,可负载均衡)

程序员文章站 2022-05-27 13:33:18
...

前言和介绍

nginx是现在最流行的web服务器之一,tomcat是Java界最流行的应用服务器之一,本文将介绍两个如何结合配置一起使用,也可以实现高级的负载均衡。

安装nginx

如果是CentOS等环境,可以使用yum命令安装

#安装epel-release
yum install -y epel-release
#安装nginx
yum install -y nginx

#启动nginx
systemctl start nginx
#开机自动启动nginx
systemctl enable nginx

如果是Ubuntu等,可以使用apt命令安装

#这一步可能不需要
sudo apt-get install software-properties-common python-software-properties

sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx

#show nginx version
nginx -v

也可以到nginx官网下载编译安装

#准备
yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel

#下载
#地址: http://nginx.org/en/download.html 

wget http://nginx.org/download/nginx-1.19.6.tar.gz
tar zxvf nginx-1.19.6.tar.gz
cd nginx-1.19.6

./configure
--sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf
--with-http_ssl_module
make
make install

安装tomcat

Tomcat可以直接去 http://tomcat.apache.org/下载后解压,就可以到bin下运行startup.sh,如果想要把tomcat安装成服务,以及如何调整JVM内存参数等,请看我的另一篇博客:https://blog.terrynow.com/2020/12/27/centos-tomcat-as-service/

配置nginx

修改/etc/nginx/nginx.conf,或者新建一个子配置文件/etc/nginx/config.d/appname.conf (appname就是你的应用的名字,具体可以根据实际情况修改)

server {
    listen       80;
    #域名,根据你的实际情况修改
    server_name  appname.example.com;
    
    #安全设置
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

    #最大上传文件大小
    client_max_body_size 50m;
    
    charset utf-8;

    #日志文件
    access_log  /var/log/nginx/appname.access.log  main;
    
    location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
        #过期时间为30天,
        #图片文件不怎么更新,过期可以设大一点,
        #如果频繁更新,则可以设置得小一点。
        expires 30d;
    }
    
    location ~* \.(js|css)$ {
        expires 10d;
    }
    
    location ~ ^/(WEB-INF)/ {
        deny all;
    }
    
    location ~* favicon.ico {
        access_log off;
        alias /opt/tomcat/webapps/ROOT/favicon.ico;
    }
    
    #如果有静态资源,比如都放在assets***意root里的路径只要到上一层就可以
    location ^~ /assets/ {
        access_log off;
        root    /opt/apache-tomcat-8.0.30/webapps/ROOT;
    }
    
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #这个加上,才会让java里的代码获取schema的时候,https不会误以为是http
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    #error_page  404              /404.html;
    
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
    
    
}

这样配置好后,重启nginx后,就把80端口的流量都导到后端tomcat的8080端口了。

nginx配置tomcat负载均衡

我们假设nginx安装在192.168.1.1的服务器上,后面有两台tomcat服务器(192.168.1.2:8080和192.168.1.3:8080)

在配置文件中,http节点下,增加:

http {
    # ......
    upstream test.com {
        #服务器配置 weight是权重的意思,权重越大,分配的概率越大。
        #192.168.1.2:8080、192.168.1.3:8080对应tomcat服务器地址
        server 192.168.1.2:8080 weight=1;
        server 192.168.1.3:8080 weight=2;
    }

    server {
        listen 80;
        server_name appname.example.com;

        location / {
            #配置反向代理地址
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://tomcat;
            proxy_redirect default;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
 
}

至此,Nginx 与 Tomcat 整合实现负载均衡已经配置完了。可以修改tomcat的web页面,比如在不起眼的地方,多加一个当前服务器的IP来标记处理请求的tomcat来自哪一台机器,多次请求nginx,来观察是否实现了负载均衡。

 

更多开发和运维过程中遇到的坑已经解决问题的方案、干货分享请访问 https://blog.terrynow.com/