Nginx websockets&x2B;SSL不工作(网络::错误证书公用名称无效)
我在Nginx上运行websocket服务器时遇到问题。这是我的Nginx default.conf:Nginx websockets&x2B;SSL不工作(网络::错误证书公用名称无效),nginx,websocket,Nginx,Websocket,我在Nginx上运行websocket服务器时遇到问题。这是我的Nginx default.conf: upstream websocket { server xx.xx.xx.xx:8080; } server { listen 80; listen [::]:80; server_name domain.com *.domain.com; return 301 https://$server_name$request_uri; } server {
upstream websocket {
server xx.xx.xx.xx:8080;
}
server {
listen 80;
listen [::]:80;
server_name domain.com *.domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl on;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name domain.com *.domain.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
location /ws {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
我在chrome中遇到以下错误:
(索引):2个WebSocket连接到'wss://xx.xx.xx.xx/ws:8080'失败:建立连接时出错:net::ERR\u CERT\u COMMON\u NAME\u无效
我认为这与证书(SSL)有关,但我真的不知道如何解决这个问题
提前谢谢
编辑:
我的index.php文件是
<script>
var conn = new WebSocket('wss://xx.xx.xx.xx/ws');
conn.onopen = function(e) {
console.log("Connection established!");
};
</script>
var conn=新的WebSocket('wss://xx.xx.xx.xx/ws');
conn.onopen=功能(e){
log(“已建立连接!”);
};
当我将xx.xx.xx.xx更改为domain.com时,我得到一个握手错误代码504
顺便说一句,我正在通过php(php server.php)和ratchet运行一个websocket服务器,如下示例:为上游配置SSL-Nginx 先决条件
--with stream
和with-stream\u ssl\u模块
配置参数编译stream {
upstream websocket {
server backend1.example.com:8080;
}
server {
listen 8080 ssl;
proxy_pass websocket;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/certs/server.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 4h;
ssl_handshake_timeout 30s;
…
}
}
有关更多详细信息,请遵循此链接在您提供的代码中未提及端口,但您正试图建立从浏览器直接到您的websocket服务器的安全websocket连接,该服务器在端口8080上运行。因此,这一信息: (索引):2个WebSocket连接到'wss://xx.xx.xx.xx/ws:8080'失败: 建立连接时出错:net::ERR\u CERT\u COMMON\u NAME\u无效 您应该做的是连接到Nginx,它正在侦听端口443,然后让Nginx代理请求。你的页面上一定有指定8080端口的代码
扔掉它。谢谢,我试试这个!错误:nginx:[emerg]“stream”指令在/etc/nginx/sites enabled/default:37NGINX Plus R6及更高版本或使用--with stream和with-stream\u ssl\u模块配置参数编译的最新nginx开源代码中不被允许。我希望您使用的是开源版本,在这个流中,默认情况下不是启用的。我使用的是开源版本。我现在正在阅读如何启用此模块。步骤1:从git中签出与您正在使用的nginx版本对应的代码。