我有一个使用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。
答案 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使用自签名证书。