Docker 下 Nginx 端口转发至 Mysql 服务

由于我的 Nginx 和 Mysql 都是基于容器运行的,对于外网只暴露了 80 和 443 端口用于 web 服务,由于后续开发的网址导航功能使用 Serverless ,同时需要访问 Mysql 服务,因此打算暴露一个端口来远程调用。

Mysql 用户配置

添加一个 Mysql 新用户来授权远程访问,同时赋予该用户仅有的增删改查功能。

# 添加用户,并设置为远程可连接,同时设置密码
CREATE USER 'noxxxx'@'%' IDENTIFIED BY '12345';

含义:

  • 主机名称:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
  • 登录密码:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

赋予权限

GRANT SELECT, INSERT ,UPDATE, DELETE ON 数据库名.表名 TO 'noxxxx'@'%';
GRANT ALL ON *.* TO 'noxxxx'@'%';
GRANT ALL ON 数据库名.* TO 'noxxxx'@'%';

使用第三条命令即可对某个数据库下的所有表赋予全部权限。

生效权限配置

flush privileges

查看是否生效

phpmyadmin 里:

Sequel Pro 下,我们可以远程登录进入 mysql,并且只能看到被授权的数据库,增删改查功能可以使用。

Nginx 端口转发

stream {
    upstream mysqlport {
       hash $remote_addr consistent;
       server container_name:3306 weight=5 max_fails=3 fail_timeout=30s;
    }
    server {
       listen 4430;
       proxy_connect_timeout 10s;
       proxy_timeout 300s;
       proxy_pass mysqlport;
    }
}