我正在尝试将NGINX配置为一个前向代理来替换我们正在使用的Fiddler。我们使用的Fiddler的特性允许我们将所有传入请求代理到一个8888端口。我如何使用NGINX来实现这一点?
在NGINX作为反向代理的所有例子中,我看到proxy_pass
总是被定义到一个特定的上游/代理服务器。我如何配置它,使它转到请求的服务器,而不管服务器,就像我使用Fiddler作为前向代理一样。
示例:
在我的代码中:
WebProxy proxyObject = new WebProxy("http://mynginxproxyserver:8888/",true);
WebRequest req = WebRequest.Create("http://www.contoso.com");
req.Proxy = proxyObject;
在mynginxproxyserver/nginx.conf中,我不想将代理委托给另一个服务器(例如,proxy_pass设置为http://someotherproxyserver
),而是希望它只是一个代理服务器,并将来自我的客户端的请求重定向到请求主机(见上文),这就是Fiddler在启用它作为代理时所做的事情:http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy
3条答案
按热度按时间dffbzjpn1#
您的代码似乎正在使用转发代理(通常只是“代理”),而不是反向代理,它们的运作方式也完全不同。反向代理是服务器端的,客户端并不真正看到或考虑到的东西。它是从后端服务器检索内容并交给客户端。正向代理是客户端设置的,以便连接到互联网的其余部分。反过来,服务器可能潜在地不知道关于你的转发代理的任何事情。
Nginx最初被设计成反向代理,而不是前向代理,但它仍然可以用作前向代理,这就是为什么你可能找不到它的很多配置。
这更多的是一个理论上的答案,因为我从来没有这样做过自己,但像下面这样的配置应该工作。
这只是重要的部分,您需要配置其余部分。
其思想是proxy_pass将传递给一个变量host而不是一个预定义的host,所以如果你请求
http://example.com/foo?bar
,你的http头将包含example.com
的host,这将使你的proxy_pass从http://example.com/foo?bar
获取数据。您链接的文档正在将其用作反向代理。它等效于
ntjbwcob2#
当按照Grumpy的建议使用
$uri
变量时,可能会遇到url编码问题,因为它是由nginx自动解码的。proxy_pass http://$http_host$request_uri;
变量
$request_uri
保留了完整的编码,并且还包含所有查询参数。t1rydlwq3#
使用nginx作为https的转发代理需要安装proxy_connect
然后编辑nginx.conf