nginx新旧域名切换ssl反向代理tomcat

内容目录

需求

访问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 文件:

  1. 打开 Tomcat 的 server.xml 文件,通常位于 /path/to/tomcat/conf/server.xml

  2. 找到 <Engine><Host> 元素,并在其中添加 RemoteIpValve,如下所示:

    这段配置告诉 Tomcat 识别 X-Forwarded-Proto 头,并根据它确定客户端请求是通过 HTTP 还是 HTTPS 进行的,从而生成正确的链接。

  3. 保存配置并重启 Tomcat:

    sudo systemctl restart tomcat

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注