当使用 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 装订。
resolver
在使用 DNS 名称定义上游服务器的情况下,应使用该指令。
nginx 启动时会评估上游服务器的 IP 地址。
这里需要注意的是,如果更改了 DNS 名称的 IP 地址,则 nginx 在重新启动之前不会意识到这一点。
该resolver
指令通过在定义的缓存 ( valid=time
) 过期时“透明地”更新上游服务器的 IP 地址来处理此问题。
在您使用 Unix 套接字而不是 DNS 名称的情况下,此指令将无用。
为什么要指定http
Unix Socket ?我承认我不是 100% 确定原因是什么。
当然主要是因为该proxy_pass
指令要求为代理服务器定义协议和地址,并且 nginx 只允许http
和https
协议。
proxy_pass网址;
设置代理服务器的协议和地址以及位置应映射到的可选 URI。作为协议,可以指定“http”或“https”。
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
归档时间: |
|
查看次数: |
8369 次 |
最近记录: |