nginx将http协议代理为https 附带ws升级为wss

一、自验证用ssl证书生成

 1、首先要生成服务器端的私钥(key文件)

    openssl genrsa -des3 -out server.key 1024

    会有两次要求输入密码,输入同一个即可

    输入密码 后你就获得了一个server.key文件

2、去除key文件密码(为了方便使用,不然每次使用都需要输入密码验证)

     openssl rsa -in server.key -out server.key

3、创建服务端证书申请文件server.csr(会有一些输入,根据提示就好)

     openssl req -new -key server.key -out server.csr

4、创建10年有效期的CA证书 ca.crt(会有一些输入,根据提示就好)

     openssl req -new -x509 -key server.key -out ca.crt -days 3650

5、创建10年有效期的服务器证书server.crt

     openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

如此一共生成以下文件:server.key  server.csr  ca.crt  server.crt  ca.srl 

其中nginx需要使用 server.key  与server.crt 

二、nginx配置

其中websocket处为ws升级为wss的代理

	# 此处用于nginx支持websocket的配置
        map $http_upgrade $connection_upgrade {
		default upgrade;
		'' close;
	}
	upstream websocket {
		server xxx.xx.xx.xx:xxxx;
	}
	
	upstream test2{
		server xxx.xx.xx.xx:xxxx;
	}
	

server {
        listen       443 ssl;
        ssl on;

        server_name xxx.xx.xx.xx;

        ssl_certificate /usr/local/nginx/ca/server.crt;
        ssl_certificate_key /usr/local/nginx/ca/server.key;

		ssl_session_timeout 30m;
		ssl_session_cache shared:SSL:10m;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
		ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
		ssl_prefer_server_ciphers on;
		ssl_verify_client off;

		location  /test {
				root   html;
				index  index.html index.htm;
			}	
			
		location /websocket {		
			proxy_redirect off;
			proxy_pass http://websocket;     # 转发
			proxy_set_header Host $host;
			proxy_set_header X-Real_IP $remote_addr;
			proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;   # 升级协议头
			proxy_set_header Connection upgrade;
		}

		location /test2{		
			proxy_redirect off;
			proxy_pass http://test2;     # 转发
			proxy_set_header Host $host;
			proxy_set_header X-Real_IP $remote_addr;
			proxy_set_header X-Forwarded-For $remote_addr:$remote_port;

		}
		
	}

 

你可能感兴趣的:(服务器)