nginx - 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 脚本指定代理,只能为整个机器指定代理。
解决方案
也许用一个小脚本和fcgiwrap
:
https://www.nginx.com/resources/wiki/start/topics/examples/fcgiwrap/
fcgiwrap 调用一个 bash 脚本,您可以在其中将 URI 转换为您要调用的程序 (mysql),并将输出作为 Web 内容返回给 nginx。
您还可以更改 nginx 的配置并重新加载服务。这样您就可以“动态”打开/转发端口。如果您将其公开,则非常不安全。
推荐阅读
- angular - 如何延迟启动 Angular 应用程序以显示动画
- build - 如何在 Visual Studio Tem Services 中构建多阶段部署?
- python - Python3如何以一定的精度向上(向下)舍入
- swift - 为什么swift不执行主队列?
- ros - 多个节点发布到一个主题时消息丢失
- javascript - React Native:构建登录屏幕
- css - Ionic 4:透明标题
- javascript - 检查用户登录或未登录 wordpress?
- datetime - ISO 8601 日期时间理解
- angular - 如何在现有的 Angular 项目中安装 ngMapHilight?