需求
访问me.xxxx.net:8080/itrms/user/login.do?lang=msg_en_US 跳到新域名 https://me.rms.com/rms/user/login.do?lang=msg_en_US
访问me.rms.com域名不管http还是https没有路径时跳转https://me.rms.com/rms/user/login.do?lang=msg_en_US
因为tomcat只有127.0.0.1:8079/rms/user/login.do?lang=msg_en_US能访问,其他404
这样打到目的输入me.rms.com就能直接访问服务,无需客户记忆具体网址
nginx.conf配置
server {
listen 8080;
server_name me.xxx.net;
location / {
# 将所有请求重定向到 https://me.rms.com
return 301 https://me.rms.com$request_uri;
}
}
server {
listen 443 ssl;
server_name me.rms.com;
# SSL 配置
ssl_certificate /etc/nginx/ssl/rms.com.crt;
ssl_certificate_key /etc/nginx/ssl/rms.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
# 如果请求根路径,则重定向到登录页面
location = / {
return 301 https://me.rms.com/rms/user/login.do?lang=msg_en_US;
}
# 转发 HTTPS 请求到本地 Tomcat
location / {
proxy_pass http://127.0.0.1:8079; # 转发到本地 Tomcat
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;
# 支持 WebSocket(如果你的应用需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# 重定向所有 HTTP 到 HTTPS
server {
listen 80;
server_name me.rms.com;
return 301 https://$host$request_uri/rms/user/login.do?lang=msg_en_US;
}
1. 使用 proxy_set_header
强制返回 HTTPS 链接
确保所有从 Nginx 到 Tomcat 的代理请求都使用 https://
。可以通过 X-Forwarded-Proto
来告知应用当前的请求协议,让它生成相应的 HTTPS 链接。你已经在配置中设置了这一点:
proxy_set_header X-Forwarded-Proto $scheme;
然而,Tomcat 可能没有正确识别或使用这个头。为了解决这个问题,通常需要在 Tomcat 配置中进行调整。
2. 修改 Tomcat 配置来识别 X-Forwarded-Proto
Tomcat 的默认设置可能不会自动识别来自反向代理的 X-Forwarded-Proto
。你可以通过在 server.xml
文件中配置一个 RemoteIpValve
来解决这个问题。
修改 Tomcat server.xml
文件:
-
打开 Tomcat 的
server.xml
文件,通常位于/path/to/tomcat/conf/server.xml
。 -
找到
<Engine>
或<Host>
元素,并在其中添加RemoteIpValve
,如下所示:这段配置告诉 Tomcat 识别
X-Forwarded-Proto
头,并根据它确定客户端请求是通过 HTTP 还是 HTTPS 进行的,从而生成正确的链接。 -
保存配置并重启 Tomcat:
sudo systemctl restart tomcat
近期评论