Nginx使用反向代理重定向太多次

时间:2020-09-17 03:24:21

标签: nginx reverse-proxy nginx-reverse-proxy

我有一个使用MySQL和Meilisearch的debian服务器,我想将Nginx用作反向代理,以实现未来的负载平衡并具有TLS安全性。

我正在跟踪Meilisearch's Documentation,以通过Meilisearch设置Nginx并成功使Let Encrypt,但是他们强迫Nginx将所有内容代理到端口7700,对于MySQL,我想代理到3306,对于Meilisearch,我希望代理到7700,以及80错误页面或备用Web服务器。但是在修改/etc/nginx/nginx.conf之后,网站重新加载了太多次。

这是我正在尝试的配置/etc/nginx/nginx.conf

user www-data;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

stream {

    upstream mysql {
            server 127.0.0.1:3306;
    }

    upstream meilisearch {
            server 127.0.0.1:7700;
    }

    server {
            listen 6666;
            proxy_pass mysql;
    }

    server {
            listen 9999;
            proxy_pass meilisearch;
    }
}

http {

    server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name example.com;

        return 301 https://\$server_name$request_uri;
  }

  server {
      server_name example.com;

      location / {
          proxy_pass  http://127.0.0.1:80;
      }

      listen [::]:443 ssl ipv6only=on;
      listen 443 ssl;

      # ssl_certificate managed by Certbot
      # ssl_certificate_key managed by Certbot
   }

}

唯一的区别是example.com被我的域替换,该域已经设置为重定向到服务器ip。

1 个答案:

答案 0 :(得分:0)

ippi指出,在这种特殊情况下,无需反向代理MySQL。

我根据Meilisearch文档的建议使用了proxy_pass http://127.0.0.1:7700

为了将来实现数据库负载平衡,我将使用MySQL集群,并在另一个代理所有内容的Nginx实现中指出它们(例如,从HTTPS到Web服务器,对集群列表的数据库访问等)。

此外,在这种情况下,实际上我不需要加密的连接,但是如果需要,我会在MySQL中使用自签名证书,并在网站上使用CA证书,因为两端与“中央” Nginx代理进行通信,该代理可以对后端服务器和代理之间的通信进行加密。

如果我真的想对MySQL使用Let's Encrypt证书,那么我发现 recipe,但是我没有复制粘贴证书(这很痛苦),而是将Let's Encrypt certificate的目录挂载到MySQL的目录中,并使用chown将权限更改为600。但是话又说回来,这可能是不好的做法,并且如其自己的文档所建议的那样,最好对MySQL使用自签名证书。