用于设置 nginx 反向代理的解析器指令

Has*_*aig 1 nginx

当使用 gunicorn 应用服务器(后端应用服务器和 nginx 之间典型的一对一映射)将 nginx 设置为反向代理时,我配置了以下内容:

upstream my_server {

  server unix:/home/user/folder/app/app.sock  fail_timeout=0;
}

location @https_proxy_to_app {
    proxy_set_header X-Forwarded-Proto https;
    include proxy_params;
    proxy_redirect off;
    proxy_pass http://my_server;
}
Run Code Online (Sandbox Code Playgroud)

许多关于该主题的文献都规定了这一点。虽然这有效,但我有几个问题。

首先(也是微不足道的),为什么需要包含http://proxy_pass http://my_server;

其次(更重要的是),我是否需要resolver为这种设置设置指令?我没有使用 AWS 的 Elastic Load Balancer,而且很多围绕该指令的处方 恰好都围绕着 AWS ELB。有人可以用外行的话解释为什么以及如何设置它吗?意外的服务器管理员在这里,所以需要专家的意见。resolver

请注意,我也在使用 OSCP 装订。

kri*_*sFR 6

resolver在使用 DNS 名称定义上游服务器的情况下,应使用该指令。

nginx 启动时会评估上游服务器的 IP 地址。

这里需要注意的是,如果更改了 DNS 名称的 IP 地址,则 nginx 在重新启动之前不会意识到这一点。

resolver指令通过在定义的缓存 ( valid=time) 过期时“透明地”更新上游服务器的 IP 地址来处理此问题。

在您使用 Unix 套接字而不是 DNS 名称的情况下,此指令将无用。


为什么要指定httpUnix Socket ?我承认我不是 100% 确定原因是什么。

当然主要是因为该proxy_pass指令要求为代理服务器定义协议和地址,并且 nginx 只允许httphttps协议。

proxy_pass网址

设置代理服务器的协议和地址以及位置应映射到的可选 URI。作为协议,可以指定“http”或“https”。

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass