nginx反向代理tomcat
在同一台机器布署同一个应用不同的实例,使用两个tomcat,然后用nginx反向代理这两个tomcat应用
修改tomcat
tomcat默认的端口是8080,因为在同一台机器上,所以需要修改其中一个tomcat中的端口。进入tomcat解压的目录,这里是/opt/softinstall/tomcat-wpb/conf
,找到文件server.xml
,修改:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里的端口也要修改!! -->
<Server port="8015" shutdown="SHUTDOWN">
<!-- 省略... -->
<Service name="Catalina">
<!-- 这里的端口也要修改!! -->
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!-- 这里的端口也要修改!! -->
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
</Service>
</Server>
Nginx配置
修改nginx.conf
文件:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# 负载机器
upstream admin.com {
# ip_hash;
# 负载两台应用
server 127.0.0.1:8080 weight=10;
server 127.0.0.1:8081 weight=10;
}
server {
listen 80;
server_name localhost 127.0.0.1;
location /admin {
port_in_redirect on;
# 负载配置
proxy_pass http://admin.com$request_uri;
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;
add_header backendIP $upstream_addr;
add_header backendCode $upstream_status;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /opt/soft/h5/;
}
}
结果
当访问http://127.0.0.1/admin/login.jsp
时,就行负载到其他8080
和8081
这两个应用的其中一个了。
但是,这样有一个弊端,就是tomcat session不一致的问题。当登陆页面是来自8080
,登陆成功后,一般会跳转到8080
应用中的成功页面,但是nginx又反向代理登陆成功主页来自8081
页面,在这个应用中,用户是没有登陆的,所以用户又要重新登陆了