zoukankan      html  css  js  c++  java
  • nginx配置websocket

    有时候我们需要给websocket服务端做一下nginx的配置,比如需要给websocket服务端做负载均衡,或者,有些系统要求访问websocket的时候不能带端口,这时候我们就需要用nginx来进行配置了。

    起因是最近公司在开发小程序,而小程序要求访问的wss的websocket(即SSL装有数字证书的),需要用域名访问,且不能带有端口。而我本来的websocket服务的访问接口为IP+端口的类型。(比如ws://192.168.1.185:8888),现在要变成wss/im.wonyen.com这样的类型。这就要借助nginx来完成了。

    我们知道,本质上来说nginx是一个代理服务器,它的原理就是:当我们的客户端请求wss/im.wonyen.com的时候,它转发给192.168.1.185:8888这个端口的程序去执行。要实现这个简单的功能,我们需要这几个步骤。

    1.先去解析一个im.wonyen.com的二级域名,这个就不赘述了,到域名后台去设置就行了,将这个域名绑定到nginx所在的服务器的ip上。

    2.生成ssl证书,并且在nginx上配置证书。这一步可以参考这篇文章:http://www.cnblogs.com/roy-blog/p/8336299.html

    3.配置websocket。

     1   # HTTPS server
     2     #websocket服务https配置
     3    server {
     4     listen 443;
     5     server_name im.wonyen.com;
     6     ssl on;
     7     root html;
     8     index index.html index.htm;
     9     ssl_certificate   cert/xxxxxxx684.pem;
    10     ssl_certificate_key  cert/xxxxxxx850684.key;
    11     ssl_session_timeout 5m;
    12     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    13     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    14     ssl_prefer_server_ciphers on;
    15     location / {
    16             #root html;
    17             #index index.html index.htm;
    18             proxy_pass http://ws.com;
    19             proxy_http_version 1.1;
    20             proxy_set_header Upgrade $http_upgrade;
    21             proxy_set_header Connection "Upgrade";
    22             proxy_read_timeout 7200s;
    23         }
    24     }
    1 upstream ws.com{
    2        server xxx.xxx.xxx.xxx:8888;#websocket服务
    3     }

    如果懂nginx的配置,相信应该很容易看清楚。主要是看第20行和21行代码,就是这两行代码表明了这是一个websocket请求而不是简单的http请求。

    同时,由于使用了nginx进行转发,所以必须设置proxy_read_timeout为更长的时间,否则websocket会在proxy_read_timeout时间内断线。我们在这个特定的location中配置proxy_read_timeout,将不会影响其他的请求在该项目上的配置。

    4.如果是普通的ws的配置,将更为简单。

     1     server {
     2         listen       80;
     3         server_name  im.wonyen.com ;
     4 
     5         #charset koi8-r;
     6 
     7         #access_log  logs/host.access.log  main;
     8 
     9         location / {
    10             proxy_pass http://ws.com;
    11             proxy_http_version 1.1;
    12             proxy_set_header Upgrade $http_upgrade;
    13             proxy_set_header Connection "Upgrade";
    14             proxy_read_timeout 150000s;
    15         }  
    16     }
  • 相关阅读:
    【数学】【AOJ-614】座位安排
    【乱搞】【AOJ-611】消失的5,8,9
    redis 与session
    Nginx 与 tomcat 部署网站
    linux 进程在后台执行
    印象笔记
    consul 小結
    spring boot 使用拦截器,注解 实现 权限过滤
    Springcloud/Springboot项目绑定域名,使用Nginx配置Https
    spring boot 登录认证
  • 原文地址:https://www.cnblogs.com/roy-blog/p/8360430.html
Copyright © 2011-2022 走看看