我正在参与一个在 SSL 和 Cloudflare 上存在一些套接字问题的项目……我知道……我已经阅读了大约 50 篇不同的堆栈溢出文章和 200 篇博客文章,试图弄清楚这一点。该项目可以在我的本地开发服务器/计算机上正常运行...
我认为我走在正确的轨道上 - 但如果可以的话,可以使用一些帮助/指针。
首先,我觉得 /socket-io/proxy_pass 位于端口 6379 与 redis 相同,这很奇怪......也许应该是?当此设置为 6379 时,套接字连接将无法连接 - 无论是否启用 Cloudflare(我暂停了 cloudflare 以进行测试)。
我通读了快速服务器,发现套接字服务器似乎链接到端口 4000 的快速服务器......所以我将 /socket-io/ 的 proxy_pass 更改为端口 4000 并重新连接。这适用于 Cloudflare 暂停/运行......所以也许它毕竟不是 cloudflare。尽管如此,即使它说套接字已在浏览器中重新连接,也没有任何工作。
我将首先分享我的 NGINX 配置 - 请让我知道您还需要查看什么。感谢您花时间帮助我/为我指明正确的方向!我真的很感激学习这些东西。
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name dev-app.myapp.com;
location / {
root /var/www/myapp_frontend/build/;
try_files $uri $uri/ /index.html;
#proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
location /api/ {
proxy_pass http://localhost:4000/;
include /etc/nginx/proxy_params;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /socket.io/ {
proxy_pass http://localhost:6379;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_read_timeout 86400;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
ssl_certificate /etc/letsencrypt/live/dev-app.myapp.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dev-app.myapp.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = dev-app.myapp.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name dev-app.myapp.com;
listen 80 default_server;
listen [::]:80 default_server;
return 404; # managed by Certbot
}
Edit-1 我确实看到 cloudflare 需要某些端口......我是否错误地认为这些端口仅指初始侦听端口,例如上面的 443,因为 proxy_pass 端口都使用本地主机?