nginx配置wss

如果websocket服务需要通过wss协议传输,一种方式是在websocket服务器进行开发,内置证书。还有一种比较简单的方式是配置在负载均衡服务器上,例如nginx。

1. 生成证书

商业证书可以购买,如果做测试,可以自己生成证书。

------------------------CA证书-------------------------------

1. 创建根证书密钥文件(自己做CA)ca.key:
    openssl genrsa -des3 -out ca.key 2048
    #去除密码
    openssl rsa -in ca.key -out ca.key

2. 创建根证书的申请文件ca.csr:
    openssl req -new -key ca.key -out ca.csr

3. 创建一个自当前日期起为期十年的根证书ca.crt【用来签名其它证书,并配置在客户端信任列表,如果开启双向验证,也需要配置在服务端】:
    openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey ca.key -in ca.csr -out ca.crt

------------------------Server端要下发的证书---------------------------------
4. 创建服务器证书密钥server.key:
    openssl genrsa -des3 -out server.key 2048
    #去除密码
    openssl rsa -in server.key -out server.key

5. 创建服务器证书的申请文件server.csr:
    openssl req -new -key server.key -out server.csr

6. 创建自当前日期起有效期为期两年的服务器证书server.crt【配置在服务端,将会在客户端请求时下发给客户端】:
   openssl x509 -req -days 730 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in server.csr -out server.crt

 

2. 配置nginx

如果要使用https协议,安装nginx的时候需要加载ssl模块,带上以下参数:

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

修改nginx配置文件,添加如下代理

server {

listen 443;
server_name 192.168.2.233;

ssl on;
ssl_certificate     /etc/server.cer;  # 这里是服务端的证书路径
ssl_certificate_key /etc/server.key; # 这里是秘钥路径
ssl_session_timeout 5m;
ssl_verify_client off;

location /websocket {
proxy_pass http://192.168.2.48:9031/websocket/list;  #实际ws服务器地址
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}

}

之后重启nginx,通过代理路径wss://192.168.2.233/websocket就可以访问到后台的ws服务器,服务器本身不用改动。

 

你可能感兴趣的:(nginx配置wss)