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

Nginx redirecting too many times with reverse proxy

我有一台带MySQL和美力搜索的debian服务器,我想使用Nginx作为反向代理来实现未来的负载平衡,同时也有TLS安全性。

我正在跟随 Meilisearch's Documentation 使用 Meil​​isearch 设置 Nginx 并成功加密,但他们强制 Nginx 将所有内容代理到端口 7700,我想为 MySQL 代理到 3306, 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

正如 ippi 指出的那样,在这种特殊情况下没有必要反向代理 MySQL。

我按照 Meil​​isearch 文档的建议使用 proxy_pass http://127.0.0.1:7700

对于未来的数据库负载平衡,我会使用 MySQL 集群,并在另一个代理一切的 Nginx 实现上向他们指出(即 HTTPS 到 Web 服务器,数据库访问集群列表等) .).

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

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