1.1 发展
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
1.2 平台支持
Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布。
Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库.
1.3 负载均衡
Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
在连接高并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
2. 安装使用
2.1 本机环境
Ubuntu 16.4 64位 ,虚拟机,内存4G
2.2 Ubuntu自带方式安装(快速,方便,需要联网)
2.2.1 安装命令
打开终端,执行命令 sudo apt-get install nginx
2.2.2 配置文件位置
/etc/nginx/sites-available/default
2.2.3 启动停止方式
service nginx (start|stop|status|restart)
2.3 编译安装(跨Linux平台,需先安装依赖库)
Nginx依赖PCRE,zlib,SSL,所以安装前需要先安装这三个库.
2.3.1 PCRE安装
新建目录,执行命令 mkdir nginx_work ,进入该目录 ,执行 cd nginx_work
a ) 下载安装包:(项目发布时会直接提供压缩包),执行命令
wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
注:如果执行命令,提示找不到文件或目录,在终端下将wget和网址之间的空格删除,再重新打上就可以了,应该是word将空格转成中文了
b) 解压文件 ,执行命令 tar -zxvf pcre-8.37.tar.gz ,并进入该目录 cd pcre-8.37/
c) 依次执行命令 ,sudo ./configure | sudo make | sudo make install
2.3.2 Zlib库安装
回到nginx_work目录下,
a) 下载安装包:(项目发布时会直接提供压缩包),执行命令
wget http://ncu.dl.sourceforge.net/project/libpng/zlib/1.2.8/zlib-1.2.8.tar.gz
注:如果执行命令,提示找不到文件或目录,在终端下将wget和网址之间的空格删除,再重新打上就可以了,应该是word将空格转成中文了
b) 解压文件 ,执行命令 tar -zxvf zlib-1.2.8.tar.gz ,并进入该目录 cd zlib-1.2.8/
c) 依次执行命令 ,sudo ./configure | sudo make | sudo make install
2.3.3 SSL 安装
回到nginx_work目录下,
a) 下载安装包:(项目发布时会直接提供压缩包),执行命令
wget http://www.openssl.org/source/openssl-1.0.1p.tar.gz
注:如果执行命令,提示找不到文件或目录,在终端下将wget和网址之间的空格删除,再重新打上就可以了,应该是word将空格转成中文了
b) 解压文件 ,执行命令 tar -zxvf openssl-1.0.1p.tar.gz ,并进入该目录
c) 依次执行命令 ,sudo ./config | sudo make | sudo make install
(注:这里是 config)
2.3.4 Nginx安装
回到nginx_work目录下,
a) 下载安装包:(项目发布时会直接提供压缩包),执行命令
wget http://nginx.org/download/nginx-1.2.8.tar.gz
注:如果执行命令,提示找不到文件或目录,在终端下将wget和网址之间的空格删除,再重新打上就可以了,应该是word将空格转成中文了
b) 解压文件 ,执行命令 tar -zxvf nginx-1.2.8.tar.gz ,并进入该目录
c) 依次执行命令, sudo ./configure --prefix=/home/ykserver1/nginx_work/nginx
| sudo make | sudo make install
2.3.5 编译安装的Nginx 配置文件位置
/home/ykserver1/nginx_work/nginx/conf/nginx.conf
(注:前面部分已自己的安装位置为准)
2.3.6 编译安装的Nginx启动停止方式
回到nginx_work目录下,
启动 sudo ./nginx/sbin/nginx
停止 sudo ./nginx/sbin/nginx -s stop
重新加载配置文件 sudo ./nginx/sbin/nginx -s reload
启动后访问本机IP就可以看到Nginx的欢迎界面,默认监听(80端口)
3. 负载均衡配置
此处已编译安装为例,Ubuntu方式安装请自行参考
3.1 规划
Nginx代理 192.168.0.135:9999
Server1 192.168.0.107:8080
Server2 192.168.0.135
请求Nginx代理,会将请求均匀的分发到 Server1和Server2上面.
3.2 修改配置文件
回到nginx_work目录下,
执行命令 sudo vim nginx/conf/nginx.conf,修改结果如下
从第80行开始增加如下配置(大括号后面)
upstream ykserver {
# server1
server 192.168.0.107:8080;
# server2
server 192.168.0.135;
}
server {
listen 9999;
location / {
proxy_pass http://ykserver;
#auth_basic "Restricted";
#auth_basic_user_file pwd;
}
}
3.3 启动Nginx,查看效果
启动Nginx(如果已经启动,可以使用reload的方式,或者停止再启动),使配置生效.
在浏览器中输入 : http://192.168.0.135:9999/
可能看到的是Tomcat的欢迎界面(此时确保107机器上的Tomcat运行中),也有可能是Nginx的欢迎界面.
刷新,就会发现两者会不停的切换!
(注:有时刷新可能会没效果,这是缓存的原因,如果是chrome浏览器,鼠标按住刷新按钮不放,就会弹出硬性刷新菜单,点击选择,就会发现页面切换了)
现在135机器上已经部署成功,可以直接访问.
3.4 Nginx的负载均衡机制
nginx支持下面几种负载均衡机制:
§ round-robin:轮询。以轮询方式将请求分配到不同服务器上(默认)
§ least-connected:最少连接数。将下一个请求分配到连接数最少的那台服务器上
§ ip-hash :基于客户端的IP地址。散列函数被用于确定下一个请求分配到哪台服务器上
3.4.1 最少连接负载均衡
在一些要求需要更长的时间才能完成的应用情况下, 最少连接可以更公平地控制应用程序实例的负载。使用最少连接负载均衡,nginx不会向负载繁忙的服务器上分发请求,而是将请求分发到负载低的服务器上。
配置文件
upstream ykserver {
#最少连接数
least_conn;
# server1
server 192.168.0.107:8080;
# server2
server 192.168.0.135;
}
3.4.2 会话持久性
以轮询或最少连接的负载均衡算法,每个后续的客户端的请求,可以潜在地分配给不同的服务器上,并不能保证相同的客户端请求将总是指向同一服务器上。
这对于有会话信息的应用场景下,会有问题的。一般的做法是需要将session信息共享,如使用memcache来存放session。
如果将客户端的会话“粘性”或总是试图选择一个特定的服务器,也是可以的。负载均衡的ip-hash机制就可以实现。
配置文件
upstream ykserver {
#回话持久性
ip_hash;
# server1
server 192.168.0.107:8080;
# server2
server 192.168.0.135;
}
(注:这种配置怎么刷新页面都不会切换了)
3.4.3 . 加权负载均衡
可以使用权重来进一步控制影响nginx负载均衡算法,该方式和上面三种分配方式并存,共同起作用.
配置文件
upstream ykserver {
#最少连接数
least_conn;
# server1
server 192.168.0.107:8080 weight=2 ;
# server2
server 192.168.0.135 weight=2;
}
3.4.4 后端健康检查
max_fails=number # 设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。
配置文件
upstream ykserver {
# server1
server 192.168.0.107:8080 weight=2 max_fails=1 fail_timeout=6s ;
# server2
server 192.168.0.135 weight=2;
}