如何使用NGINX作为任何请求位置的转发代理?

如何使用NGINX作为任何请求位置的转发代理?,nginx,proxy,reverse-proxy,fiddler,Nginx,Proxy,Reverse Proxy,Fiddler,我正在尝试将NGINX配置为转发代理,以替换我们正在使用的作为转发代理的Fiddler。我们使用的Fiddler特性允许我们将所有传入请求代理到8888端口。如何使用NGINX实现这一点 在NGINX作为反向代理的所有示例中,我看到proxy\u pass始终定义到特定的上游/代理服务器。我如何配置它,使其进入请求的服务器,而不考虑服务器,就像我使用Fiddler作为转发代理一样 例如: 在我的代码中: WebProxy proxyObject = new WebProxy("http://my

我正在尝试将NGINX配置为转发代理,以替换我们正在使用的作为转发代理的Fiddler。我们使用的Fiddler特性允许我们将所有传入请求代理到8888端口。如何使用NGINX实现这一点

在NGINX作为反向代理的所有示例中,我看到
proxy\u 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就是这样做的:

您的代码似乎使用了转发代理(通常只是“代理”),而不是反向代理,它们的操作方式截然不同。反向代理是用于服务器端的,客户端并没有真正看到或想到。它是从后端服务器检索内容并交给客户端。转发代理是客户端为了连接到internet的其余部分而设置的。反过来,服务器可能对转发代理一无所知

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;
    }
}
这只是重要的部分,您需要配置其余部分

其思想是,代理传递将传递给可变主机,而不是预定义的主机。因此,如果您请求
http://example.com/foo?bar
,您的http头将包括
example.com
的主机。这将使您的代理通过从
http://example.com/foo?bar

您链接的文档正在将其用作反向代理。这相当于

        proxy_pass http://localhost:80;

当使用Grumpy建议的
$uri
变量时,您可能会遇到url编码问题,因为它是由nginx自动解码的。我建议您将代理通行证行修改为

proxy\u pass https://$http\u host$request\u uri


变量
$request\u uri
将编码保留在tact中,并且还包含所有查询参数。

您能否给出一个请求示例以及您期望的结果?我不确定您是否需要动态主机、动态ip或其他东西。这是同一台机器的8888端口吗?我在问题中添加了一个示例,以及如何使用Fiddler完成的链接。我基本上想通过nginx和你对Fiddler做同样的事情。这确实有效!我确实需要:
resolver8.8.8.8不适用于HTTPS目标。返回关于连接到443失败的400错误。您是如何创建这些图表的?请查看此(旧)答案。似乎它仍然适用?当curl
http://forward-proxy-server-ip:8888
,nginx将停止工作。有人知道吗?