Board logo

标题: WebSocket+Nginx实现动态日志监控-简单版 更新 [打印本页]

作者: look_w    时间: 2019-3-11 20:04     标题: WebSocket+Nginx实现动态日志监控-简单版 更新

这里还是比较容易出错的,一定要注意

    LogWebSocketController中的命令改成tail命令

        @OnOpen
        public void onOpen(Session session) {
            try {
                // 执行tail -f命令
                process = Runtime.getRuntime().exec("tail -f /opt/XXX/logs/catalina.out -n 500");
                inputStream = process.getInputStream();
     
                // 一定要启动新的线程,防止InputStream阻塞处理WebSocket的线程
                TailLogThread thread = new TailLogThread(inputStream, session);
                thread.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

这三个地方都改好后再放到Linux服务器上启动,就没问题了。

下面再说一下使用Nginx对Websocket进行反向代理的配置
公司的项目都是走的nginx反向代理,可以通过改nginx.conf来实现

修改Nginx主配置文件

    $ vim /usr/local/nginx/conf/nginx.conf
     
    # 在http上下文中增加如下配置,确保Nginx能处理正常http请求。
     
    http{
      map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
      }
     
      upstream websocket {
        #ip_hash;
        server localhost:8010;  
        server localhost:8011;
      }
     
    # 以下配置是在server上下文中添加,location指用于websocket连接的path。
     
      server {
        listen       80;
        server_name localhost;
        access_log /var/log/nginx/yourdomain.log;
     
        location / {
          proxy_pass http://websocket;
          proxy_read_timeout 300s;
     
          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_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection $connection_upgrade;
            }
        }
    }

最重要的就是在反向代理的配置中增加了如下两行,其它的部分和普通的HTTP反向代理没有任何差别。

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

这里面的关键部分在于HTTP的请求中多了如下头部:

    Upgrade: websocket
    Connection: Upgrade

这两个字段表示请求服务器升级协议为WebSocket。服务器处理完请求后,响应如下报文:
状态码为101配置改好后执行
nginx -s reload
就可以正常访问





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0