Nginx 反向代理:使用 1 台服务器代理 2 台不同的服务器

Nginx Reverse Proxy: Proxying 2 different servers with using 1 server

提问人:BroserBros 提问时间:4/16/2022 更新时间:4/16/2022 访问量:427

问:

我有 1 个 Nginx 代理服务器,但我有 2 个不同的普通服务器。我想仅使用 1 个 nginx 代理服务器代理这个普通服务器。它可能很简单,但我在任何地方都找不到它。

这是我在 /etc/nginx/sites-available/default 中的代码(使用此代码,我只能代理 1 台服务器):

server {
    listen       80;   
    #server_name 1ndwebsite.com;
    root         /usr/share/nginx/html;

       location / {
          proxy_redirect      off;
          proxy_set_header    X-Real-IP $remote_addr;
          proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header    Host $http_host;
          proxy_pass          https://122.122.122.123;
    }
}

我在第二台服务器上尝试了这个,但它不起作用。

server {
    listen       80;   
    #server_name 1ndwebsite.com;
    root         /usr/share/nginx/html;

       location / {
          proxy_redirect      off;
          proxy_set_header    X-Real-IP $remote_addr;
          proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header    Host $http_host;
          proxy_pass          https://122.122.122.123;
    }
}
server {
    listen       80;   
    #server_name 2ndwebsite.com;
    root         /usr/share/nginx/html;

       location / {
          proxy_redirect      off;
          proxy_set_header    X-Real-IP $remote_addr;
          proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header    Host $http_host;
          proxy_pass          https://211.211.211.213;
    }
}
nginx nginx-反向代理

评论

0赞 Ivan Shatsky 4/16/2022
您将如何区分应由服务器 1 提供的请求和应由服务器 2 提供的请求?为什么你的指令被注释掉了?server_name
0赞 BroserBros 4/16/2022
@IvanShatsky server_name指令没有对实际代码进行注释。我想我可以用server_name但不起作用。
0赞 Ivan Shatsky 4/16/2022
没错,nginx 选择服务器块来处理请求,将 HTTP 标头与该指令指定的服务器名称进行比较。如果没有匹配(或者根本没有标头),则将选择第一个服务器块(除非您显式地为指令指定了标志)。如果第二个服务器块不适合您,很可能是因为标头值和指定的服务器名称不匹配,HostHostdefault_serverlistenHost
0赞 BroserBros 4/16/2022
谢谢你@IvanShatsky这真的帮助了我。当我尝试输入时,是打开的。我现在明白了选择的第一个服务器块,但为什么呢?我正在更改第二个网站的端口,但问题仍然存在。例如,如果我在端口网站上输入网站,成功打开,但如果我尝试使用域名,则不起作用。我哪里做错了?2ndwebsite.com1ndwebsite.com:8080:8080
0赞 Ivan Shatsky 4/16/2022
我不知道,使用正确的服务器名称,一切都应该按预期工作。难道不会是某种缓存吗?出于调试目的,您可以临时定义一些自定义访问日志格式,并将变量添加到其中以进行日志记录以检查其实际值。$http_host

答:

0赞 BroserBros 4/16/2022 #1

很有趣,但我通过在标签后添加解决了这个问题。include /etc/nginx/proxy_params;location