首页 > 解决方案 > Nginx 作为 TCP 转发代理

问题描述

我知道我可以使用这样的一些:

stream {
    upstream ssh {
        server X.X.X.X:22;
    }

    server {
             listen 2222;
             proxy_pass    ssh;
    }
}

代理将传入流量传递到端口 2222 到另一个 IP 的端口 22。

直截了当。但是,有没有办法创建一个接受最终目的地的主机名和端口作为参数的动态代理?

可以这样使用的东西:

proxy_hostname:8080?destination_hostname=example.com&destination_port=1111

ngx_stream_core_module不接受 url 参数。nginx 可以用作动态代理还是仅用于静态隧道?

我问这个是因为我需要一种方法来隐藏触发 php mysql 请求的机器的 IP。

mysqli_connect($hostname, ...)

现在我不能单独为 php 脚本指定代理,只能为整个机器指定代理。

标签: nginxproxy

解决方案


也许用一个小脚本和fcgiwrap

https://www.nginx.com/resources/wiki/start/topics/examples/fcgiwrap/

fcgiwrap 调用一个 bash 脚本,您可以在其中将 URI 转换为您要调用的程序 (mysql),并将输出作为 Web 内容返回给 nginx。

您还可以更改 nginx 的配置并重新加载服务。这样您就可以“动态”打开/转发端口。如果您将其公开,则非常不安全。


推荐阅读