Websocket Cloudflare с ошибкой Nginx 520

Я участвую в проекте с некоторыми проблемами сокетов через SSL и Cloudflare ... Я знаю ... Я прочитал около 50 различных сообщений о переполнении стека и 200 сообщений в блогах, чтобы попытаться понять это. Проект отлично работает на моем локальном dev-сервере / компьютере ...

Я думаю, что нахожусь на правильном пути - но могу использовать некоторую помощь / указатели, если сможете.

Сначала я подумал, что это странно, что / socket-io / proxy_pass находится на порту 6379, так же, как redis ... Может быть, так и должно быть? Когда это было установлено на 6379, соединение сокета не будет подключаться - с включенным Cloudflare или без него (я приостановил cloudflare, чтобы проверить это).

Я прочитал экспресс-сервер и увидел, что сервер сокетов кажется связанным с экспресс-сервером на порту 4000 ... поэтому я изменил proxy_pass для / socket-io / на порт 4000, и он снова подключается. Это работает с приостановленным / запущенным 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 ?


person Nick McLean    schedule 28.12.2020    source источник
comment
Возникают ли ошибки при изменении конфигурации / socket-io на использование порта 4000 или просто приложение не работает? Похоже, что приложение подключается напрямую к Redis, поэтому изменение порта прокси сделает невозможным правильное подключение.   -  person Adam Jeliński    schedule 31.12.2020
comment
Быстрый поиск показывает, что раскрытие Redis таким способом небезопасно, поэтому, возможно, вам стоит подумать о доступе к нему. через специально созданный API, вместо того, чтобы открывать его для ненадежных клиентов   -  person Adam Jeliński    schedule 31.12.2020
comment
Да!! Я читал то же самое ~ Думаю, ты прав !! Это одно из первых, что я сделал. Я изменил порт на 4000, прежде чем прочитал это - ошибки прекращаются, но он по-прежнему не подключается. Он «повторно подключается», но соединение сокета по-прежнему читается как ложное, если я регистрирую его ... и ни одно из уведомлений сокета не работает ... хм ... Я бы хотел показать вам как-нибудь, если у вас есть время !?   -  person Nick McLean    schedule 03.01.2021
comment
Думаю, это отличная идея. Возможно, у вас есть разлад?   -  person Adam Jeliński    schedule 03.01.2021
comment
Спасибо! Я отправил тебе приглашение в друзья   -  person Adam Jeliński    schedule 08.01.2021