当前位置: 首页 > 知识库问答 >
问题:

Nginx:何时使用proxy_set_header主机$host vs$proxy_host

冯野
2023-03-14

我一直在阅读反向代理,我想知道什么时候proxy_set_headerHost$hostproxy_set_headerHost$proxy_host更合适。我做了一些研究,在这篇文章中,它说在大多数情况下我们将Host设置为$host。那么为什么nginx默认为$proxy_host?为了帮助我更具体地理解,如果我们使用$proxy_host,这里(文章底部)的反向代理配置是否仍然有效?

谢谢

共有2个答案

卫宏硕
2023-03-14

$proxy_host是一个关于上游服务器的标签,所以nginx默认这样做。但是如果你想添加其他关于主机的标签(头),使用$host。

郎睿
2023-03-14

一般来说,没有必要显式执行proxy_set_headerHost$proxy_host,因为它是默认值。如果您需要通过proxy_pass指令中的内容以外的内容调用服务器,那么您需要通过proxy_set_header内容覆盖。

如果要代理与 server_name 指令中相同的主机,则有机会使用 proxy_set_header $host。如果实际应用程序托管在另一个端口或某些内部服务器上,则通常会出现这种情况。

server {
    listen 80;
    server_name site.example.com;
    
    location / {
       proxy_set_header Host $host;
       proxy_pass http://localhost:8080;
    }
}

如果您向上游调用的名称不是其实际的DNS名称,那么您可能会看到如下内容:

# 192.168.2.1 responds to site.example.com, but
# site.example.com doesn't actually resolve to 192.168.2.1
proxy_pass http://192.168.2.1;
proxy_set_header Host site.example.com;

另一种情况可能是“基于名称”的虚拟主机,其中上游有一个有用的DNS名称,但您想用另一个名称来称呼它。

proxy_pass http://origin.example.com;
proxy_set_header Host site.example.com
 类似资料:
  • 我已经检查了关于同一问题的大多数主题,但我找不到解决方案。 我的应用程序使用连接到一个服务,当我使用托管该服务的机器的IP地址时,它工作正常。但是,当我用主机名替换它时,它无法连接。我使用的连接方法非常标准: 例外情况是: JAVA网。UnknownHostException:无法解析主机“myHostname”:没有与主机名关联的地址 myHostname是我的实际主机名。 当我在我的电脑上使用

  • Nginx 是一个快速的、轻量级的 Web 服务器软件, 在许多情况下它已取代了 Apache,尤其是运行 Web 应用程序的情况。 然而,其配置语言与 Apache 相比并没有做什么重大改进,仍然不够简单清晰。 此外,大多数的配置文档只有俄语版,这也就解释了为什么你看到这么多份关于 "Understanding Russian for Nginx Administrators" 的拷贝。 准备工

  • 我已经在kubernetes中部署了airflow,如以下链接所述:https://github.com/apache/airflow/tree/master/chart 要访问airflow UI,我可以执行以下操作:

  • 问题内容: 在Windows主机下安装Docker卷对我来说是一个巨大的痛苦,而且我无法使其正常工作。 目前,我得到了以下简单的Dockerfile: 当我从中构建图像并启动容器时 容器正常启动。 但是当我尝试装载一个卷时, 将显示以下消息: 该目录肯定存在于容器中,尝试其他目录不会更改结果。在主机端目录前添加斜杠也无济于事。() 例如,如何安装到? 事实证明,容器端目录必须为空,因为它有一个子目

  • nginx安装好之后一般会在/etc/nginx/目录下有nginx.conf文件和conf.d目录,这其实已经帮我们预留了虚拟主机要准备的内容。 看下nginx.conf文件,里面有这样一行: include /etc/nginx/conf.d/*.conf; 那么也就是说ngixn启动都会自动加载conf.d目录下以.conf结尾的所有配置文件 ok,我们直接干掉nginx.conf里面se

  • 这是我的身份验证服务和部署。 那是我的入口文件。 当我运行Commnand:时,我收到的消息是: StartHost失败,但将重试:设置:获取ssh主机端口:获取“minikube”的端口22:docker container inspect-f“'{(index(index.NetworkSettings.Ports“22/tcp”)0).HostPort}}'”minikube:退出状态1 <