0

我正在尝试将 nginx 与以下设置放在一起:

我有两个 http 服务器在我的本地主机上运行。一个监听 8080 端口,另一个监听 8081 端口。

两者都应该通过 https 和

  1. www.awesomesite.io 应该可以访问监听 8080 的生产服务器。

  2. 监听 8081 端口的测试服务器应该可以通过 test.awesomesite.io 访问。

不知何故,当导航到 test.awesomesite.io 时,nginx 服务器将我定向到我的生产服务器。

我使用以下配置将 www-requests 定向到 localhost:8080 并将 test-request 定向到 8081。

server {
    listen       80;
    server_name  www.awesomesite.io;
    rewrite ^ https://$host$request_uri? permanent;    # force redirect http to https
    server_tokens off;
}

# SSL port production server
server {
        listen [::]:443 ssl ipv6only=on; 
        listen 443 ssl; 
        ssl_certificate /etc/letsencrypt/live/www.awesomesite.io/fullchain.pem; 
        ssl_certificate_key /etc/letsencrypt/live/www.awesomesite.io/privkey.pem; 
        include /etc/letsencrypt/options-ssl-nginx.conf; 
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
    ssl on;

    server_name www.awesomesite.io;
    server_tokens off;
    # ......
    location / {
      proxy_pass         http://127.0.0.1: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-Host $server_name;
      proxy_set_header   X-Forwarded-Proto https;

      proxy_read_timeout  1200s;
    }

}

# SSL test server

server {
    listen       80;
    server_name  test.awesomesite.io;
    rewrite ^ https://$host:8443$request_uri? permanent;    # force redirect http to https
    server_tokens off;
}


server {
        listen [::]:8443 ssl ipv6only=on;
        listen 8443 ssl; 
        ssl_certificate /etc/letsencrypt/live/test.awesomesite.io/fullchain.pem; 
        ssl_certificate_key /etc/letsencrypt/live/test.awesomesite.io/privkey.pem; 
        include /etc/letsencrypt/options-ssl-nginx.conf; 
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
    ssl on;


    server_name test.awesomesite.io;
    server_tokens off;
    # ......
    location / {
      proxy_pass         http://127.0.0.1:8081;
      proxy_set_header   Host $host:8443;
      proxy_set_header   X-Real-IP $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Host $server_name;
      proxy_set_header   X-Forwarded-Proto https;

      proxy_read_timeout  1200s;
    }

}
4

1 回答 1

0

如果有人遇到同样的问题,请回答我自己的问题:

我使用https://serverfault.com/questions/538803/nginx-reverse-ssl-proxy-with-multiple-subdomains的答案来更改我的配置。

我用 www.awesomesite.io 和 test.awesomesite.io 名称为端口 443 定义了多个服务器块,而不是重写测试子域以使用端口 8443。

在这些更改之后,测试请求标头中的主机确实与特定的服务器块匹配,并被路由到 localhost 8081。

我仍然没有弄清楚为什么原始配置不起作用。所有请求都与生产服务器块匹配(或至少由第一个服务器块处理)。

于 2018-09-17T09:07:39.200 回答