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

2021-02-13 27点热度 0人点赞 0条评论

前言和介绍

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,来观察是否实现了负载均衡。

 

 

Terry

记录开发运维过程中遇到的坑以及解决方案,干货分享

文章评论

*

code