1Nginx ("engine x")
1.1简介
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发。
Nginx因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
中国大陆使用nginx网站用户有:京东、新浪、网易、腾讯、淘宝等。
1.2Nginx安装
1.从Nginx官网下载Nginx,Nginx下载地址:http://nginx.org/en/download.html。目前最新的稳定版为:1.10.1.
2.将下载下来的Nginx上传到/opt/nginx目录下。运行“tar-zxvf nginx-1.6.2.tar.gz”进行解压。
3.切换到/opt/nginx/nginx-1.6.2目录下,运行./configure进行初始化配置。如出现下面的提示,说明该机器没有安装PCRE,而Nginx需要依赖PCRE,需要手动安装PCRE,见http://www.linuxidc.com/Linux/2015-03/114986.htm。
4.安装完PCRE后,再次运行./configure进行初始化即可。注意这里生成的配置文件,尤其箭头所指的方向,是启动nginx时的路径。
5.运行 makeinstall 进行编译。
6.切换到步骤4生成的nginx运行目录下,运行./nginx,启动Nginx。
如出现下面所述的错误,在已安装PCRE库的情况下,需要配置PCRE共享库。具体操作看这里http://www.linuxidc.com/Linux/2015-03/114985.htm。
./nginx:error while loading shared libraries: libpcre.so.1: cannot openshared object file: No such file or directory
7.在浏览器中输入IP:端口号,出现如下图所示,说明安装成功。
如出现nginx:[emerg] bind() to 0.0.0.0:80 failed (98: Address already inuse)。可能是端口号被占用,切换到/usr/local/nginx/conf/目录下,更改nginx.conf下的端口号。也有可能是不小心nginx重启了多次,关闭nginx进程,重启即可。
8.关闭Nginx
使用 ps-ef|grep nginx 查看nginx的进程,可以看到nginx有两个进程:
[root@linuxidcsbin]# ps -ef|grep nginx
root 7276 1 0 14:21 ? 00:00:00 nginx: master process./nginx
www 7277 7276 0 14:21 ? 00:00:00 nginx: worker process
root 7279 5197 0 14:21 pts/1 00:00:00 grep nginx
从容停止nginx:kill- QUIT nginx主进程号
停止nginx所有进程:pkill-9 nginx
1.3通过信号对 Nginx进行控制
Nginx支持下表中的信号:
信号名 作用描述
TERM,INT 快速关闭程序,中止当前正在处理的请求
QUIT处理完当前请求后,关闭程序
HUP重新加载配置,并开启新的工作进程,关闭旧的进程,此操作不会中断请求
USR1重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件
USR2平滑升级可执行程序
WINCH从容关闭工作进程
有两种方式来通过这些信号去控制Nginx,第一是通过logs目录下的 nginx.pid查看当前运行的 Nginx的进程 ID,通过kill– XXX <pid> 来控制 Nginx,其中XXX就是上表中列出的信号名。如果您的系统中只有一个Nginx进程,那您也可以通过 killall命令来完成,例如运行 killall– s HUP nginx 来让 Nginx重新加载配置。
1.4Nginx集群配置
Nginx通过 upstream指令来定义一个服务器的集群,下面的例子中我们定义了一个名为tomcats的集群,这个集群中包括了三台服务器共6个 Tomcat服务:
upstreamtomcats {
server192.168.0.11:8080 weight=10;
server192.168.0.11:8081 weight=10;
server192.168.0.12:8080 weight=10;
server192.168.0.12:8081 weight=10;
server192.168.0.13:8080 weight=10;
server192.168.0.13:8081 weight=10;
}
而 proxy_pass指令的写法变成了:
location/ {
proxy_pass http://tomcats;
proxy_set_header X-Real-IP $remote_addr;
}
1.5完整的Nginx配置文件实例
user nobody;# 工作进程的属主
worker_processes 4;# 工作进程数,一般与 CPU核数等同
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events{
useepoll;#Linux 下性能最好的 event模式
worker_connections 2048;# 每个工作进程允许最大的同时连接数
}
http{
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] $request '
# '"$status" $body_bytes_sent"$http_referer" '
# '"$http_user_agent""$http_x_forwarded_for"';
#access_log off;
access_log logs/access.log;# 日志文件名
sendfile on;
#tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
include gzip.conf;
#集群中的所有后台服务器的配置信息
upstreamtomcats {
server192.168.0.11:8080 weight=10;
server192.168.0.11:8081 weight=10;
server192.168.0.12:8080 weight=10;
server192.168.0.12:8081 weight=10;
server192.168.0.13:8080 weight=10;
server192.168.0.13:8081 weight=10;
}
server{
listen 80;#HTTP 的端口
server_name localhost;
charsetutf-8;
#access_log logs/host.access.log main;
location~ ^/NginxStatus/ {
stub_statuson; #Nginx 状态监控配置
access_logoff;
}
location~ ^/(WEB-INF)/ {
denyall;
}
location~ \.(htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js|
zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)${
root/opt/webapp;
expires24h;
}
location/ {
proxy_passhttp://tomcats;# 反向代理
includeproxy.conf;
}
error_page404 /html/404.html;
#redirect server error pages to the static page /50x.html
#
error_page502 503 /html/502.html;
error_page500 504 /50x.html;
location= /50x.html {
root html;
}
}
}