NGINX Proxy_pass:使用proxy_host作为请求头主机

时间:2018-05-21 03:45:40

标签: nginx reverse-proxy proxypass

我正在尝试将proxy_pass发送到网站,但我希望请求标头主机与我通过的网站相同。

我曾尝试使用“proxy_set_header Host $ proxy_host”(并尝试将值更改为$ host,甚至是我想要的确切主机名。但是当我使用google chrome检查请求主机时,它仍然是服务器IP,我曾经设置过proxy_pass。

以下是我的配置,请帮助

location / {
proxy_pass https://example.com;
proxy_set_header Host $proxy_host;
proxy_set_header X-Original-URI $request_uri;
}

谢谢

1 个答案:

答案 0 :(得分:1)

查看文档中的示例:

nginx首先决定哪个服务器应该处理请求。让我们从一个简单的配置开始,其中所有三个虚拟服务器都在端口*:80:

上侦听
server {
    listen      80;
    server_name example.org www.example.org;
    ...
}

server {
    listen      80;
    server_name example.net www.example.net;
    ...
}

server {
    listen      80;
    server_name example.com www.example.com;
    ...
}

在此配置中,nginx仅测试请求的标头字段Host,以确定请求应路由到哪个服务器。如果其值与任何服务器名称都不匹配,或者请求根本不包含此标头字段,则nginx会将请求路由到此端口的默认服务器。在上面的配置中,默认服务器是第一个 - 这是nginx的标准默认行为。它还可以使用listen指令中的default_server参数显式设置哪个服务器应该是默认的:

server {
    listen      80 default_server;
    server_name example.net www.example.net;
    ...
}

现在请记住,$host特别是当前服务器块中定义的第一个server_name。如果您有多个server_name,则只显示第一个,但如果您希望后端获得固定的host名称,请使用:

proxy_set_header Host "your.fixed.hostname";