简介
Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
安装
服务器系统环境:centos7 64位
1、安装pcre相关插件
PCRE 作用是让 Nginx 支持 Rewrite 功能。
#进入自己的软件目录
[root@cqs conf]# cd /home/cqs/source/
#下载对应的pcre软件安装包
[root@cqs source]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
#解压
[root@cqs source]# tar zxvf pcre-8.35.tar.gz
#进入对应目录
[root@cqs source]# cd pcre-8.35
#配置对应安装目录
[root@cqs source]# ./configure --prefix=/usr/local/pcre-8.35/
#编译
[root@cqs source]#make
#安装
[root@cqs source]#make install
#进入到对应的安装目录,检查是否安装成功
[root@cqs source]#cd /usr/local/pcre-8.35/bin/
[root@cqs bin]# ls
pcre-config pcregrep pcretest
[root@cqs bin]# ./pcre-config --version
8.35
2、安装nginx
#下载对应的软件包到软件目录
[root@cqs pcre]# cd /home/cqs/source/
[root@cqs source]# wget http://nginx.org/download/nginx-1.6.2.tar.gz
#解压
[root@cqs source]#tar zxvf nginx-1.6.2.tar.gz
#进入目录,配置
[root@cqs source]#cd nginx-1.6.2
[root@cqsnginx-1.6.2]#./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.35/
#编译
[root@cqsnginx-1.6.2]#make
make -f objs/Makefile
make[1]: Entering directory `/home/cqs/source/nginx-1.6.2'
cd /usr/local/pcre-8.35/ \
&& if [ -f Makefile ]; then make distclean; fi \
&& CC="cc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
./configure --disable-shared
/bin/sh: line 2: ./configure: 没有那个文件或目录
make[1]: *** [/usr/local/pcre-8.35//Makefile] 错误 127
make[1]: Leaving directory `/home/cqs/source/nginx-1.6.2'
make: *** [build] 错误 2
#发现了错误,查看相关资料,发现是配置pcre的参数错了,--with-pcre=DIR这个表示pcre的源目录,而不是安装目录
[root@cqs nginx-1.6.2]# ./configure --help | grep '\--with-pcre'
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
#重新配置,编译
[root@cqs nginx-1.6.2]#./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/home/cqs/source/pcre-8.35/
[root@cqs nginx-1.6.2]#make
#安装
[root@cqs nginx-1.6.2]#make install
#进入到对应安装目录,查看安装情况和版本号
[root@cqs nginx-1.6.2]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.6.2
#安装成功,查看配置,启动服务
[root@cqs nginx-1.6.2]# cd /usr/local/nginx/
[root@cqs nginx]# ls
conf html logs sbin
[root@cqs nginx]# cd conf/
#查看配置档是否正常
[root@cqs conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
#发现监听的80端口被占用了(由于服务器上安装apache服务器缘故),所以需要修改对应的监听接口
[root@cqs conf]# vim nginx.conf
listen 8080; #把原配置的80端口修改为8080
server_name localhost;
#保存退出,再次检查配置档
[root@cqs conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#启动服务
[root@cqs conf]# /usr/local/nginx/sbin/nginx
#监听对应的进程
[root@cqs conf]# ps -ef | grep nginx
root 19427 1 0 06:41 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 19428 19427 0 06:41 ? 00:00:00 nginx: worker process
root 19437 1692 0 06:41 pts/0 00:00:00 grep nginx
#浏览器打开对应的地址,出现以下效果图,192.168.2.204是对应的机器ip,8080是端口号。
使用nginx实现反向代理负载均衡
nginx四大特性
反向代理、负载均衡、动静分离、正向代理。
nginx相关服务操作命令
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf :测试nginx配置文件是否正确
nginx -s stop :快速停止
nginx quit :完整有序的停止nginx
ps -ef | grep nginx :查找对应的进程号
kill -QUIT 主进程号 :从容停止Nginx
kill -TERM 主进程号 :快速停止Nginx
pkill -9 nginx :强制停止Nginx
nginx -c /path/to/nginx.conf :启动nginx
kill -HUP 主进程号:平滑重启nginx
集群服务器环境:
192.168.2.204:8080 nginx服务器
192.168.2.204:80 apache服务器
192.168.2.201:80 apache服务器
实现效果:
A、访问nginx服务器根据不同的文件请求链接类型发送到不同的服务器上处理
B、访问nginx服务器同一文件地址,根据权重或随机请求发到不同服务器处理
步骤:
A.根据不同文件请求链接类型发送到不同服务器处理这个相对简单,步骤如下:
#进入目录,修改nginx的配置档
[root@cqs conf]# cd /usr/local/nginx/conf/
[root@cqs conf]# ls
[root@cqs conf]#vim nginx.conf
#修改对应的server模块部分,将对应部分修改为
location ^~ /mybook/ {
proxy_pass 192.168.2.201:80;
}
location ~ \.php$ {
proxy_pass 192.168.2.204:80;
}
#保存,退出。以上语句内容表示当访问链接为"根目录+/mybook/",会自动将请求发送到192.168.2.201这台机子上,而当遇到访问链接为“根目录+xx.php”时,会自动将请求发送到192.168.2.204这台机子上。这种场景适合把不同文件类型链接请求根据规则分发不同机子上,相对简单。
B.访问同一请求时根据权重或随机请求发到不同服务器处理,步骤如下:
#进入目录,修改nginx的配置档
[root@cqs conf]# cd /usr/local/nginx/conf/
[root@cqs conf]# ls
[root@cqs conf]#vim nginx.conf
#为http模块添加upstream my-web-server模块,里面内容分别为两台apache访问地址
upstream my-web-server {
server 192.168.2.201:80;
server 192.168.2.204:80;
}
#修改对应的访问正则表达式,下列模块意思为当访问到php文件链接时,反向代理到my-web-server,这个模块名字为上面自己定义。
location ~ \.php$ {
proxy_pass http://my-web-server;
}
#保存,退出。
#检查配置档是否出错
[root@cqs conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#重新加载配置档
[root@cqs conf]# /usr/local/nginx/sbin/nginx -s reload
#尝试访问对应的192.168.2.204:8080/info.php链接,info文件在nginx服务器目录下是不存在的,但是能够正常访问,对应的info.php文件代码如下
<?php
echo phpinfo();
?>
#info.php放在对应两台apache服务器下的根目录,为了区分,分别在两台机子安装了不同版本的php。
#效果如下,虽为同个地址,但是会随机跳转访问到不同的apache上。
#实际运用中,最好两台apache服务器都安装相同配置的东西,避免出现运行中的错误。
#另外,实际运用中可以配置不同的权重使得机子被访问几率不同。只需修改对应的upstream参数即可。
upstream my-web-server {
server 192.168.2.201:80 weight=5 max_fails=2 fail_timeout=30s;
server 192.168.2.204:80 weight=1 max_fails=2 fail_timeout=30s;
}
这样表示5/6的几率访问第一个server,1/6访问第二个。同时还可以定义max_fails和fail_timeout等参数。
总结:主要通过以下手段实现负载均衡:
location:定义需要匹配的请求(文件或目录,可以使用正则或不使用正则直接匹配)
proxy_pass:定义需要将请求proxy到地方(某台主机或者某个upstream cluser集群)