利用Nginx部署webscocket服务
Nginx软件包下载
cd /root
wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
软件包编译之前需要安装的环境
apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl make build-essential
编译Nginx软件包
解压软件包:tar xzvf nginx-1.9.2.tar.gz
开始编译
cd nginx-1.9.2
./configure
make && make install
请记住自己一些配置文件的保存路径
make install时会出现如下错误
解决方法是修改objs路径下的Makefile文件,删除Werror,即可编译成功。
编译成功如下图所示
配置Nginx
修改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
Nginx配置语法
Nginx的主配置文件是/etc/nginx/nginx.conf,nginx.conf结构如下所示
main #全局配置,对全局生效
------------events #配置影响Nginx服务器或与用户的网络连接
------------http #配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
-------upstream #配置后端服务器具体地址,负载均衡配置不可或缺的部分
------- server #配置虚拟主机的相关参数,一个http块中可以有多个server块
------- server
-------------------location # server块可以包含多个location块,location指令用于匹配:url
--------------------location
....
...
......