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。
# HTTPS server
#websocket服务https配置
server {
listen 443;
server_name im.wonyen.com;
ssl on;
root html;
index index.html index.htm;
ssl_certificate cert/xxxxxxx684.pem;
ssl_certificate_key cert/xxxxxxx850684.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://ws.com;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_read_timeout 7200s;
}
}
upstream ws.com{
server xxx.xxx.xxx.xxx:8888;#websocket服务
}
如果懂nginx的配置,相信应该很容易看清楚。主要是看第20行和21行代码,就是这两行代码表明了这是一个websocket请求而不是简单的http请求。
同时,由于使用了nginx进行转发,所以必须设置proxy_read_timeout为更长的时间,否则websocket会在proxy_read_timeout时间内断线。我们在这个特定的location中配置proxy_read_timeout,将不会影响其他的请求在该项目上的配置。
4.如果是普通的ws的配置,将更为简单。
server {
listen 80;
server_name im.wonyen.com ;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://ws.com;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_read_timeout 150000s;
}
}
nginx配置websocket的更多相关文章
- Nginx 配置Websocket
Nginx反向代理配置websocket nginx.org 官网推荐如下的配置,也可以直接看官网:http://nginx.org/en/docs/http/websocket.html http ...
- Nginx配置websocket的安全协议wss
//nginx配置wss访问方式 map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream webso ...
- Nginx配置WebSocket反向代理(Tomcat+Nginx)
@toc WebSocket 和HTTP协议不同,但是WebSocket中的握手和HTTP中的握手兼容,它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket.这使得WebSo ...
- centos下使用nginx 配置websocket,https升级wss协议
服务端代码/***/ // 服务端代码 var express = require('express'); var app = express(); var path = require('path' ...
- 关于 Nginx 配置 WebSocket 400 问题
今天把项目升级了 asp.net core 到 2.1 的版本,使用了 signalr 的功能,由于阿里云不支持 websocket 协议,所以使用了 nginx 代理方式来解决,后续就报了一个登陆 ...
- 从配置websocket理解nginx
原文地址:http://www.niu12.com/article/2 今天由于写了一个简单的基于h5 websoceket的聊天室,再本地都是好好了. 但是上到服务器后就发现无法行的通, 查 ...
- 【Nginx】面试官问我Nginx能不能配置WebSocket?我给他现场演示了一番!!
写在前面 当今互联网领域,不管是APP还是H5,不管是微信端还是小程序,只要是一款像样点的产品,为了增加用户的交互感和用户粘度,多多少少都会涉及到聊天功能.而对于Web端与H5来说,实现聊天最简单的就 ...
- 在vue中如何使用WebSocket 以及nginx代理如何配置WebSocket
WebSocket WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信.浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输. 浏览器支持情况 现 ...
- nginx 支持websocket
nginx 反向代理websocket nginx配置 请求地址及路径:ws://x.x.x.x/web/springws/websocket.ws 解析 map 指令 上面 nginx.conf 配 ...
随机推荐
- BBS-基于forms组件和ajax实现注册功能
http://www.cnblogs.com/yuanchenqi/articles/7638956.html 1.设计注册页面 views.py from django import forms c ...
- python字符串的基本用法
var1 = "hello word"var2 = "runootab"print var2.capitalize()#首字母大写print (var2.cou ...
- echarts-颜色渐变
图形的颜色. 默认从全局调色盘 option.color 获取颜色 颜色可以使用 RGB 表示,比如 'rgb(128, 128, 128)',如果想要加上 alpha 通道表示不透明度,可以使用 R ...
- 命名空间与use
以下是自己读PHP手册命名空间这一节的一些笔记,还有自己上机做命名空间测试的一些整理,原创博客,有错欢迎指正: 1.命名空间声明必须是第一条语句,若没有声明命名空间的脚本,则被认为是全局空间的脚本.若 ...
- 删除oracle数据库用户
手工删除ORACLE数据库用户时常会出现会话进程仍在使用导致删除失败的情况.需要查询会话并将会话删除才能成功将数据库用户删除,比较不方便. 适用场景 自动删除oracle数据库用户 基本知识 orac ...
- Delphi 不使用自带模板创建服务
program Project1; uses Windows, WinSvc; const ServiceName: pchar = 'SnowWings Service'; DisplayName: ...
- 18.struts-执行流程.md
目录 1.流程 2.bean节点 3.package节点 result-type 拦截器 概念 拦截器和过滤器的异同: 问题:拦截器什么时候执行,action类和拦截器的执行顺序 4.常见问题 1.流 ...
- 远程批量获取Linux和Windos操作系统版本(内核)
在不登录远程主机的情况下,可以查看远程主机的服务器操作系统版本(内核). 脚本执行前提: 1.拷贝check_snmp到脚本执行的主机中或在此主机中安装nagios; 2.保持list.txt中只有一 ...
- effective C++学习三(仅供个人学习记录,本文摘录effective C++)
条款 3:尽量用 new 和 delete 而不用 malloc 和 free 把 new和 delete 与malloc 和 free 混在一起用也是个坏想法.对一个用 new 获取来的指针调用 ...
- Android辅助开发工具说明
1.aapt(Android Asset Packaging Tool):用于建立zip包(zip.jar.apk),也可用于将资源编译到二进制的assets:2.adb(Android Debug ...