我正在尝试将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;
}
谢谢
答案 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";