Nginx 在重定向到另一台服务器时似乎会丢弃 HTTPS

Nginx 在重定向到另一台服务器时似乎会丢弃 HTTPS

我有两台使用 nginx 配置的服务器 A 和 B,每台服务器都有域a.domain.comb.domain.com。B 的问题是它的端口 80 被阻止了,所以我想将所有请求(包括服务器 A 的端口 80 和端口 443 流量)重新路由到服务器 B,在此过程中将其重写为 HTTPS。这是我的尝试。

A

server {
  listen 80;
  server_name a.domain.com
  location / {
    return 301 https://b.domain.com$request_uri;
  }
}

server {
  listen 443;
  server_name a.domain.com
  ssl on;
  ssl_certificate       /* not shown */
  ssl_certificate_key   /* not shown */
  location / {
    return 301 https://b.domain.com$request_uri;
  }
}

server {
  listen 443;
  server_name b.domain.com
  ssl on;
  ssl_certificate       /* not shown */
  ssl_certificate_key   /* not shown */
  location / {
    proxy_redirect http://127.0.0.1:8080 https://b.domain.com;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass_request_headers      on;
    proxy_pass http://127.0.0.1:8080;        # this is to tomcat
    proxy_set_header X-Real-IP $remote_addr;
  }
}

问题是它不起作用。直接访问类似 的内容https://b.domain.com/folder有效,http://a.domain.comhttps://a.domain.com跳转到https://b.domain.com,但http://a.domain.com/folder或均未https://a.domain.com/folder按预期重定向(到https://b.domain.com/folder)。在此过程中,如我的浏览器所示,HTTPS 方案被丢弃;但由于服务器 B 没有端口 80 访问权限,因此请求超时。我认为值得注意的是a.domain.com配置为使用通配符证书,而b.domain.com配置为使用专用于子域的证书。

帮助?

答案1

您忘记了 SSL 卸载:

server {
   listen 443 ssl;
   server_name b.domain.com

相关内容