将nginx设置为反向代理与gunicorn应用程序服务器(后端应用程序服务器和nginx之间的典型1对1映射)时,我configuration了以下内容:
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; }
这是有关该主题的许多文献规定的。 虽然这有效,但我还是有一些问题。
首先(和平凡),为什么需要包括http://在proxy_pass http://my_server; ?
其次(更重要的是),我是否需要为这种设置设置resolver指令? 我没有使用AWS的弹性负载平衡器, resolver指令周围的很多处方恰好围绕着AWS ELB。 有人可以用通俗的话来解释我为什么需要设置它吗? 意外的服务器pipe理员在这里,所以需要一个专家意见。
请注意,我也使用OSCP装订。
在使用DNS名称定义上游服务器的情况下,应使用resolver指令。
当nginx启动时,评估上游服务器的IP地址。
这里需要注意的是,如果一个DNS名称的IP地址被更改了,那么nginx在重新启动之前不会意识到这一点。
resolver指令负责处理这个问题,当caching定义( valid=time )过期时,通过“透明地”更新上游服务器的IP地址。
在你的情况下,你使用的是Unix Socket而不是DNS名字,这个指令是没用的。
为什么指定一个Unix套接字的http ? 我承认我不是100%确定原因是什么。
当然,主要是因为proxy_pass指令要求为代理服务器定义协议和地址,并且nginx只允许http和https协议。
proxy_pass URL ;
设置代理服务器的协议和地址以及位置应映射到的可选URI。 作为协议,可以指定“http”或“https”。
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass