Arm*_*tov 11 proxy reverse-proxy nginx fiddler
我正在尝试将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;
Run Code Online (Sandbox Code Playgroud)
在mynginxproxyserver/nginx.conf中,我不想将代理委托给另一台服务器(例如,proxy_pass设置为http://someotherproxyserver).相反,我希望它只是一个代理服务器,并将请求从我的客户端(见上文)重定向到请求主机.当你将它作为代理启用时,这就是Fiddler所做的:http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy
Gru*_*mpy 27
您的代码似乎使用转发代理(通常只是"代理"),而不是反向代理,它们的运行方式完全不同.反向代理服务器端是客户端没有真正看到或想到的东西.它是从后端服务器检索内容并传递给客户端.转发代理是客户设置的,以便连接到互联网的其余部分.反过来,服务器可能对您的转发代理一无所知.
Nginx最初设计为反向代理,而不是转发代理.但它仍然可以用作前锋.这就是为什么你可能找不到它的配置.
这更像是一个理论答案,因为我自己从未这样做过,但是下面的配置应该可行.
server {
listen 8888;
location / {
resolver 8.8.8.8; # may or may not be necessary.
proxy_pass http://$http_host$uri$is_args$args;
}
}
Run Code Online (Sandbox Code Playgroud)
这只是重要的一点,你需要配置其余部分.
想法是proxy_pass将传递给变量主机而不是预定义的主机.因此,如果您要求http://example.com/foo?bar,您的http标头将包含主机example.com.这将使您的proxy_pass从中检索数据http://example.com/foo?bar.
您链接的文档将其用作反向代理.这相当于
proxy_pass http://localhost:80;
Run Code Online (Sandbox Code Playgroud)
Dav*_*her 11
$uri当使用Grumpy 建议的变量时,您可能会遇到 url 编码问题,因为它是由 nginx 自动解码的。我建议您将代理通行修改为
proxy_pass http://$http_host$request_uri;
该变量$request_uri保持编码不变,并且还包含所有查询参数。
| 归档时间: |
|
| 查看次数: |
34238 次 |
| 最近记录: |