C++支持wss

昨天公司刚刚提出微信小程序过审必须支持wss,当时蒙圈开始以为C++要加入OpenSSL,来支持wss。后来上网查找发现nginx进行代理中转(不需要更改任何C++代码)就可以实现协议支持,不禁感慨nginx强大与自己知识薄弱。 言归正传。

1、C++支持WS请求(略)

 

2、C++进一步支持WSS请求

不用修改任何C++代码,方法流程

upstream websocket_7003{
        server 192.168.199.152:7003; #C++服务器ip port ws://192.168.199.152:7003能够访问
        }
server {
    	listen 80;
	    listen 443 ssl http2; #SSL 监听443端口
        server_name 192.168.199.152  test.game.net; #ip port对应域名

	ssl on;
        ssl_certificate /data/ssl/test.game.net.pem; #证书
        ssl_certificate_key /data/ssl/test.game.net.key;
        ssl_session_timeout 5m;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3; #支持协议
        ssl_prefer_server_ciphers on;
        access_log /data/nginx_log/test.game.net_access.log;
        error_log /data/nginx_log/test.game.net_error.log;

     location /wss7003 {
	access_log /data/nginx_log/come-websocket.log;
        proxy_pass http://websocket_7003; #向上中转地址
        proxy_read_timeout 500s; #500s没有数据传输,中断连接
        proxy_set_header Host $host;
        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-for $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'Upgrade';
    }

    location ~ /\.ht {
        deny all;
    }
}

1、test.game.net 域名与证书是绑定的

2、C:\Windows\System32\drivers\etc\hosts  添加 192.168.199.152 test.game.net 看下本地能不能ping

3、client->send msg->nginx(wss://test.game.net/wss7003)->向上传输->C++服务器(192.168.199.152:7003),此过程从wss->nginx->ws->C++server对于用户来说是透明的,非常方便简洁。

4、如果做分布式,upstream websocket配置多个ip port,ip_hash来保证玩家能够随机分配服务器登录,同时nginx能够做到负载均衡,非常强大。但是这样做有个缺点,就是如果要求制定登录ip和port就没有办法做到了。

upstream websocket{
ip_hash;
server 192.168.199.152:7001; 
server 192.168.199.152:7002; 
server 192.168.199.152:7003; 
.
.
.
server 192.168.199.152:7010; 
}

5、指定ip port登录,多个ip port就要对应多个二级域名,这样登录wss://test.game.net/wss7001就是登录C++服务器(192.168.199.152:7001)。

upstream websocket_7001{
        server 192.168.199.152:7001;
        }
upstream websocket_7002{
        server 192.168.199.152:7002;
        }
upstream websocket_7003{
        server 192.168.199.152:7003;
        }

server {
    	...
location /wss7001 {
	...
    }
location /wss7002 {
	...
    }
location /wss7003 {
	...
    }
        ...
}

6、nginx相当于网关服务器,能够保持服务器安全。

你可能感兴趣的:(linux)