使用 socat 将端口转发到本地域

问题描述

我正在尝试使用 socat 设置从本地主机到本地服务器的端口转发。服务器可通过 http://my-local-domain 访问。

这是我尝试过的:

socat -d -d tcp-listen:8081,reuseaddr,fork tcp:my-local-domain:80

当我打开浏览器并转到 http://localhost:8081 时,我看到的是原始本地主机页面,而不是导航到我的本地域时的页面

如何使用 socat 创建到本地域的端口转发?

解决方法

我发现我无法使用端口 80,因为主机在 NGINX 中显示为 localhost,因此 localhost 为请求提供服务 [这将解释原始问题]。

您可以通过以下方式验证:

  1. 开幕nginx.conf
  2. ..."Host=$host"... 添加到 log_format
  3. Tailing 访问日志 [tail -f /usr/local/nginx/logs/access.log]

您会注意到 Host 始终为 localhost,因此 localhost 为请求提供服务。

解决这个问题的方法是将主机信息从 localhost 更改为 my-local-server

Localhost:8081 --> [change Host info] --> my-local-server:80

我发现这样做的方法是通过 Node.JS [作为中间人] 创建一个代理,如下所示:

  • 创建proxy.js
  • the code复制this gist的内容并粘贴到proxy.js
  • 在终端中运行以下命令以创建 Web 服务器的代理:
PORT_LISTEN=8091 PORT_TARGET=80 HOST_TARGET="my-local-server" HOST_ORIGIN="my-local-server" node proxy.js
  • 运行 socat 来代理
socat -d -d tcp-listen:8081,reuseaddr,fork tcp:localhost:8091

所以现在我们有以下内容:

Localhost:8081 --> Localhost:8091 --> my-local-server:80

这是有效的。