Nginx websockets&x2B;SSL不工作(网络::错误证书公用名称无效)

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 {

我在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 {
    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

先决条件


  • NGINX Plus R6及更高版本或最新的NGINX开源软件,使用
    --with stream
    with-stream\u ssl\u模块
    配置参数编译
  • 代理TCP服务器或TCP服务器的上游组
  • SSL证书和私钥
  • 示例配置:

    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版本对应的代码。