【NGINX】同时支持ws请求和http请求

在网上找了好多资料,上去都不行,最后多方拼凑,实现ws请求和http请求同时支持,全部代码如下:


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  1000;
    server_names_hash_bucket_size 64;
    client_max_body_size       100m;

    #gzip  on;
    gzip on;                     #开启gzip压缩功能
    gzip_min_length 1k;          #设置允许压缩的页面最小字节数; 这里表示如果文件小于10个字节,就不用压缩,因为没有意义,本来就很小.
    gzip_buffers 4 16k;          #设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存
    gzip_http_version 1.1;       #压缩版本
    gzip_comp_level 1;           #设置压缩比率,最小为1,处理速度快,传输速度慢;9为最大压缩比,处理速度慢,传输速度快; 这里表示压缩级别,可以是0到9中的任一个,级别越高,压缩就越小,节省了带宽资源,但同时也消耗CPU资源,所以一般折中为6
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;
    gzip_disable "MSIE [1-6]\.";       #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip_vary on;    #选择支持vary header;改选项可以让前端的缓存服务器缓存经过gzip压缩的页面; 这个可以不写,表示在传送数据时,给客户端说明我使用了gzip压缩

	#自定义变量 $connection_upgrade
    map $http_upgrade $connection_upgrade { 
        default          keep-alive;  #默认为keep-alive 可以支持 一般http请求
        'websocket'      upgrade;     #如果为websocket 则为 upgrade 可升级的。
    }
	
    server {
        listen       80;
        server_name  myserverUrl;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		# security headers
		add_header X-Frame-Options "SAMEORIGIN" always;
		add_header X-XSS-Protection "1; mode=block" always;
		add_header X-Content-Type-Options "nosniff" always;
		add_header Referrer-Policy "no-referrer-when-downgrade" always;
		add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

	#后台服务配置,配置了这个location便可以通过http://域名/jeecg-boot/xxxx 访问
	location ^~ /anhuan-safe { 
		proxy_pass  http://127.0.0.1:8082/anhuan-safe/;
        proxy_set_header   Host    $host;
        proxy_set_header   X-Real-IP   $remote_addr;
	    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
	}

	#解决Router(mode:history )模式下,刷新路由地址不能找到页面的问题
	location / {
            root anhuan;
	    index index.html index.htm;
		    if (!-e $request_filename) {
			rewrite ^(.*)s /index.html?s=s1 last;
			break;
		    }
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

关键代码:http代码块中,增加map

	#自定义变量 $connection_upgrade
    map $http_upgrade $connection_upgrade { 
        default          keep-alive;  #默认为keep-alive 可以支持 一般http请求
        'websocket'      upgrade;     #如果为websocket 则为 upgrade 可升级的。
    }

在sever代码块中,你定义好的路由下面,增加以下两句话

		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";

你可能感兴趣的:(web开发,nginx,http,运维)