Nginx反向代理MySQL

19

我正在尝试为 MySQL 使用反向代理。由于某种原因,这不起作用(其中 mysql-1.example.com 指向具有 MySQL 的虚拟机)。

upstream db {
    server mysql-1.example.com:3306;
}

server {
    listen 3306;
    server_name mysql.example.com;

    location / {
        proxy_pass http://db;
    }
}

有正确的方法可以做到这一点吗?我尝试通过mysql连接,但没有成功。


1
MySQL客户端/服务器协议不使用HTTP。虽然可以(反向)代理该协议,但这不是NGINX可以做到的事情(没有一些第三方模块)-请参见MySQL Proxy以获取替代方案。如果您愿意,NGINX可以为您提供平衡TCP流的功能,但这并不是严格意义上的“代理”:有关更多信息,请参见NGINX管理指南中的TCP负载平衡章节。 - eggyal
话虽如此,如果您只有一个MySQL服务器,则负载均衡将无法实现任何效果。您究竟想要实现什么? - eggyal
4个回答

38

确保您的配置文件不位于nginx.conf文件的http { }部分中。该配置应该位于http {}之外。

stream {
  upstream db {
    server mysql-1.example.com:3306;
  }

  server {
    listen 3306;
    proxy_pass db;
  }
}

如果在 nginx.confhttp{} 中包含其他“站点”,这仍然可以接受吗? - Erutan409

14

3

-2
Nginx Plus(收费版)有适当的选项来做到这一点。另一种方法是直接让docker容器访问主机数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接