Node, ws, ssl, nginx дают ошибку 426, требуется обновление - PullRequest
0 голосов
/ 23 мая 2018

Я обслуживаю приложение, используя Node.js и NGINX.Я защищаю NGINX с помощью LetsEncrypt и запускаю приложение на узле на сервере с pm2 (используя NGINX в качестве обратного прокси-сервера).

Мой сайт ничего не загрузит (ошибка 426 - требуется обновление), но я могу подключиться с помощью следующей блокнота:

var port = 443;
var ws = new WebSocket("wss://mywebsite.com:" + port);

ws.onopen = function() {
  console.log("Connected");
}

ws.onmessage = function(comment) {
  console.log(JSON.parse(comment.data));
}

Вот настройка NGINX:

server {

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name mywebsite.com www.mywebsite.com;

        location / {
                proxy_pass http://127.0.0.1:8080/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /path/to/cert; # managed by Certbot
    ssl_certificate_key /path/to/key; # 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 = www.mywebsite.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = mywebsite.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80 default_server;
        listen [::]:80 default_server;

        server_name mywebsite.com www.mywebsite.com;
    return 404; # managed by Certbot
}

Мой код клиента в основном идентичен блокноту.Это соответствующий код на стороне сервера:

var WebSocket = require('ws');
var serverPort = 8080;
var wss = new WebSocket.Server({port:serverPort});
console.log("Server running on port " + serverPort + " started at: " + new Date());

wss.on('connection', function(ws) {

        console.log("Connected to websocket: " + ws);
        var introComment = JSON.stringify({
                user: "Welcome!",
                data: {
                        body: "Welcome to the realtime feed!",
                        name: "realtime-intro-connection-message",
                },

        });
        ws.send(introComment);
});

Это заголовки ответа, которые получает браузер:

HTTP/1.1 426 Upgrade Required
Server: nginx/1.10.3 (Ubuntu)
Date: Wed, 23 May 2018 19:20:36 GMT
Content-Type: text/plain
Content-Length: 16
Connection: keep-alive

Я прочитал, что должен быть заголовок "Upgrade", есличасть проблемы?

1 Ответ

0 голосов
/ 01 июня 2018

Я так и не нашел ответа на этот вопрос, поэтому я изменил свою тактику:

Я перешел с ws (веб-сокеты npm) на socket.io.Это, кажется, более широко поддерживается.Для примера приложения, использующего socket.io, посмотрите здесь на эти отличные видео!Теперь все отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...