前言和介绍
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,来观察是否实现了负载均衡。
文章评论