带有 Nginx 520 错误的 Websocket Cloudflare

问题描述

我正在参与一个项目,该项目在 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 端口都使用 localhost?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)