首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用socks5代理的nginx proxy_pass?

使用socks5代理的nginx proxy_pass?
EN

Stack Overflow用户
提问于 2021-08-22 19:03:03
回答 1查看 405关注 0票数 0

我正在尝试在使用socks5代理的同时设置proxy_pass。我可以使用以下命令使用curl访问我的后备服务:

代码语言:javascript
复制
curl -x socks5h://localhost:8001 -svo /dev/null -I http://[abcd:1234::]:8000

因此,我目前在nginx配置中得到的不起作用的是:

代码语言:javascript
复制
location / {
  proxy_pass http://[abcd:1234::]:8000
  proxy_redirect http://localhost:8001 /;
}

nginx似乎也没有其他应用程序可以使用的ALL_PROXY|HTTP(S)_PROXY环境变量的概念。

你知道我怎么才能让它工作吗?

我确实发现了一个相关的问题- socks5 proxy/tunnel for nginx upstream?,但它已经有6年的历史了,我不确定它还能不能用。

EN

回答 1

Stack Overflow用户

发布于 2021-08-26 11:37:14

为什么不工作?

据我所知,ngx_http_proxy_module中的proxy_passproxy_redirect和其他功能只是作为一个HTTP/HTTPS代理。这似乎得到了“作为协议,可以指定”http“或”https“的确认。”proxy_pass documentation中的注释(没有提到SOCKS)。

proxy_pass指令允许您告诉NGINX接受它在特定位置接收的任何请求,并盲目地将它们发送到另一个HTTP服务器,等待来自该服务器的响应,并将响应返回给客户端。模块中的其他指令(例如proxy_redirect)允许对请求/响应进行细微的修改。重要的是,整个过程非常简单,并且没有隧道(除了位置为https时的TLS )或包装在额外的协议中。

相反,SOCKS代理需要实现SOCKS proxy protocol并使用它包装所有连接。这项额外的工作不能使用ngx_http_proxy_module执行。

如何让它工作?

不幸的是,在NGINX中使用SOCKS代理似乎不被任何核心模块支持(在“模块参考”下面列出了here )。它似乎也不是一个流行的用例,所以我预计NGINX核心不会很快支持它。在another question中,你链接的一个答案引用了一个同样是listed on the nginx.com websitethird party nginx module (列表中没有锚点,所以按CTRL键+F表示"SOCKS“,你会找到它)。最后一次提交是在2016年,但它可能仍然有效。

如果你不能改变你访问后端服务的方式,我会说你最好的选择是使用上面提到的模块,如果它不起作用,试着修复它,或者编写你自己的模块。或者,您可以通过SOCKS代理建立到后端服务的端口转发,然后只使用proxy_pass到您的本地端口。如果您的后端服务主机上运行着一台ssh服务器,则可以设置一个简单的概念验证,如下所示:

代码语言:javascript
复制
ssh <YOUR-SSH-LOGIN>@<BACKEND-HOST> \
    -L 8081:localhost:80 \
    -o "ProxyCommand=nc -X 5 -x <YOUR-SOCKS-PROXY-IP>:<YOUR-SOCKS-PROXY-PORT> %h %p"

-L参数在您的本地8081端口和后端主机上的端口80 (http)之间创建端口转发。-o参数添加了一个ProxyCommand选项,该选项使用netcat通过SOCKS代理转发流量(并不是所有的netcat版本都支持-X和-x参数,我使用的是Arch Linux上的openbsd-netcat )。使用该命令后,您应该能够在NGINX中将proxy_pass连接到localhost:8081。此设置的性能不是很好,仅用作概念验证,如果您决定这样做,您应该找到另一种通过代理转发端口的方法。

最后,在我个人看来,如果可以的话,你应该改变你访问后端服务的方式。如果您是设置连接的人,那么当您所要做的只是连接到几台主机时,SOCKS代理就有点过分了。如果它是由您的公司或您上面的人设置的代理,那么我会与网络管理员讨论它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68884353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档