Nginx 使用反向代理重定向太多次
Nginx redirecting too many times with reverse proxy
我有一台带MySQL和美力搜索的debian服务器,我想使用Nginx作为反向代理来实现未来的负载平衡,同时也有TLS安全性。
我正在跟随 Meilisearch's Documentation 使用 Meilisearch 设置 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。
我按照 Meilisearch 文档的建议使用 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 的自签名证书,正如它自己的文档所建议的那样。
我有一台带MySQL和美力搜索的debian服务器,我想使用Nginx作为反向代理来实现未来的负载平衡,同时也有TLS安全性。
我正在跟随 Meilisearch's Documentation 使用 Meilisearch 设置 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。
我按照 Meilisearch 文档的建议使用 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 的自签名证书,正如它自己的文档所建议的那样。