将Tomcat与Nginx结合使用是一种常见的生产环境部署方式,可以充分利用Nginx的高性能静态资源处理能力和Tomcat的Java应用处理能力。以下是详细配置方案:
# Ubuntu/Debian
sudo apt-get install nginx
# CentOS/RHEL
sudo yum install nginx
编辑Nginx配置文件(通常位于/etc/nginx/nginx.conf
或/etc/nginx/conf.d/default.conf
):
server {
listen 80;
server_name yourdomain.com;
# 静态文件由Nginx直接处理
location ~* \.(html|css|js|gif|jpg|jpeg|png|ico|swf|pdf)$ {
root /path/to/your/static/files;
expires 30d;
}
# 动态请求转发到Tomcat
location / {
proxy_pass http://localhost: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
修改Tomcat的server.xml
文件(位于conf/server.xml
):
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyName="yourdomain.com"
proxyPort="80"/>
如果有多个Tomcat实例,可以配置Nginx负载均衡:
upstream tomcat_cluster {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
# 可以添加更多Tomcat实例
}
server {
# ...其他配置同上
location / {
proxy_pass http://tomcat_cluster;
# ...其他proxy设置
}
}
# 重启Nginx
sudo systemctl restart nginx
# 重启Tomcat
/path/to/tomcat/bin/shutdown.sh
/path/to/tomcat/bin/startup.sh
location /websocket {
proxy_pass http://tomcat_cluster;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# ...其他配置同上
}
502 Bad Gateway错误:
静态资源404错误:
Session丢失问题:
upstream tomcat_cluster {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
通过以上配置,您可以充分利用Nginx的高性能和Tomcat的Java处理能力,构建一个稳定高效的Web应用服务架构。