Я обслуживаю приложение, используя 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", есличасть проблемы?