Nginx作为TCP转发代理

时间:2018-05-29 07:29:04

标签: nginx proxy

我知道我可以使用这样的东西:

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 不接受网址参数。 nginx可以用作动态代理还是仅用于静态隧道?

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

mysqli_connect($hostname, ...)

现在我不能仅为整个机器指定php脚本的代理。

1 个答案:

答案 0 :(得分:1)

可能使用小脚本和fcgiwrap

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

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

您还可以更改nginx的配置并重新加载服务。通过这种方式你可以动态地"开放/转发端口。如果你把它公之于众,那就太不安全了。