Nginx使用反向代理重定向次数过多

Nginx使用反向代理重定向次数过多,nginx,reverse-proxy,nginx-reverse-proxy,Nginx,Reverse Proxy,Nginx Reverse Proxy,我有一个带有MySQL和Meilisearch的debian服务器,我想使用Nginx作为未来负载平衡的反向代理,并具有TLS安全性 我正在使用Meilisearch设置Nginx,并让Encrypt成功,但他们强制Nginx将所有内容代理到端口7700,我想代理到3306(MySQL)、7700(Meilisearch)和80(错误页面或回退web服务器)。但是在修改/etc/nginx/nginx.conf之后,网站重新加载的次数太多 这是我在/etc/nginx/nginx.conf中尝试

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

我正在使用Meilisearch设置Nginx,并让Encrypt成功,但他们强制Nginx将所有内容代理到端口7700,我想代理到3306(MySQL)、7700(Meilisearch)和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被my domain替换,my domain已经被设置为重定向到服务器ip。

如前所述,在这种特殊情况下,没有必要反转代理MySQL

我用了
proxy\u通行证http://127.0.0.1:7700
如Meilisearch文档所示

对于未来的数据库负载平衡,我将使用MySQL集群,并在另一个代理一切的Nginx实现中向它们指出(例如,HTTPS到web服务器,DB访问集群列表等)

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

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

正如所指出的,在这种特殊情况下,没有必要反转代理MySQL

我用了
proxy\u通行证http://127.0.0.1:7700
如Meilisearch文档所示

对于未来的数据库负载平衡,我将使用MySQL集群,并在另一个代理一切的Nginx实现中向它们指出(例如,HTTPS到web服务器,DB访问集群列表等)

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

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

您很可能想要
代理\u passhttp://127.0.0.1:7700;如文档中所示,否则它会将您传送到
listen 80服务器
,该服务器将重定向到您的
listen 443服务器
,一轮又一轮地导致错误。如果希望在80处出现错误,请使用
return400
而不是301,或者使用
位置/{try_files$uri error.html}
更具样式化的东西。MySql与所有这些无关,因为它不使用443http://127.0.0.1:7700;如文档中所示,否则它会将您传送到
listen 80服务器
,该服务器将重定向到您的
listen 443服务器
,一轮又一轮地导致错误。如果希望在80处出现错误,请使用
return400
而不是301,或者使用
位置/{try_files$uri error.html}
更具样式化的东西。MySql与所有这些无关,因为它不使用443。