NGINX配置中的proxy_pass选项是什么作用?

3

NGINX的proxy_pass配置是用来做什么的?例如,我有一个托管在亚马逊EC2服务上的Django应用程序。

在EC2上,假设我有1个负载均衡器位于2个nginx服务器前面。nginx服务器指向4个使用Gunicorn作为WSGI服务器的Django应用程序服务器:

upstream my-upstream {
 server 12.34.45.65:8000;
 server 13.43.54.56:8000;
 server 13.46.56.52:8000;
 server 14.46.58.51:8000;
}

location / {
proxy_pass http://my-upstream;
}

代理_pass是什么?在这种情况下,它是否是负载均衡器的URL?
2个回答

10
请查看nginx 的 HttpProxyModule,这是 proxy_pass 来源的地方。proxy_pass 文档说:
此指令设置代理服务器的地址和将映射到的 URI。
因此,当您告诉 Nginx 使用 proxy_pass 时,您正在说“将此请求传递到此代理 URL”。
还有关于 upstream 的文档可用:
此指令描述一组服务器,可以将其作为单个实体在指令 proxy_pass 和 fastcgi_pass 中使用。
因此,您在 proxy_pass 中使用 upstream 的原因是因为 proxy_pass 需要一个 URL,但您要传递多个 URL(因此您使用了 upstream)。
如果您的负载均衡器位于 Nginx 前面,则不会在此配置中使用负载均衡器 URL。

0

应该是:

proxy_pass http://my-upstream;

nginx将负载均衡所有请求到您的4个django+gunicorn实例(即my-upstream)。负载均衡器将指向nginx服务器。


谢谢,这正是我在寻找的,我会尝试一下并告诉你结果。 - deadlock
1
这是错误的。除非您添加 http/https 协议,否则将会出现错误 - nginx: [emerg] invalid URL prefix in /.../conf/nginx.conf:xx - Nilesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接