我有两台使用 nginx 配置的服务器 A 和 B,每台服务器都有域a.domain.com
和b.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.com
并https://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