⼀:基介绍
官⽹地址www.nginx.org,nginx是由1994年毕业于俄罗斯国⽴莫斯科鲍曼科技⼤学的同学为俄罗斯rambler.ru公司开发的,开发⼯作最早从2002年开始,第⼀次公开发布时间是2004年10⽉4⽇,版本号是0.1.0
Nginx是单进程单线程模型,即启动的⼯作进程只有⼀个进程响应客户端请求,不像apache可以在⼀个进程内启动多个线程响应可请求,因此在内存占⽤上⽐apache⼩的很多。Nginx维持⼀万个⾮活动会话只要2.5M内存。Nginx和Mysql是CPU密集型的,就是对CPU的占⽤⽐较⼤,默认session在本地⽂件保存,⽀持将session保存在memcache,但是memcache默认⽀持最⼤1M的课hash对象。
nginx的版本分为开发版、稳定版和过期版,nginx以功能丰富著称,它即可以作为http服务器,也可以作为反向代理服务器或者邮件服务器,能够快速的响应静态⽹页的请求,⽀持FastCGI/SSL/Virtual Host/URL Rwrite/Gzip/HTTP Basic Auth等功能,并且⽀持第三⽅的功能扩展。
nginx安装可以使⽤yum或源码安装,推荐使⽤源码,⼀是yum的版本⽐较旧,⼆是使⽤源码可以⾃定义功能,⽅便业务的上的使⽤,源码安装需要提前准备标准的编译
器,GCC的全称是(GNU Compiler collection),其有GNU开发,并以GPL即LGPL许可,是⾃由的类UNIX即苹果电脑Mac OS X操作系统的标准编译器,因为GCC原本只能处理C语⾔,所以原名为GNU C语⾔编译器,后来得到快速发展,可以处理C++,Fortran,pascal,objective-C,java以及Ada等其他语⾔,此外还需要Automake⼯具,以完成⾃动创建Makefile的⼯作,Nginx的⼀些模块需要依赖第三⽅库,⽐如pcre(⽀持rewrite),zlib(⽀持gzip模块)和openssl(⽀持ssl模块)⼆:安装
1、环境准备:先安装准备环境
yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel
gcc为GNU Compiler Collection的缩写,可以编译C和C++源代码等,它是GNU开发的C和C++以及其他很多种语⾔ 的编译器(最早的时候只能编译C,后来很快进化成⼀个编译多种语⾔的集合,如Fortran、Pascal、Objective-C、Java、Ada、 gcc 在编译C++源代码的阶段,只能编译 C++ 源⽂件,⽽不能⾃动和 C++ 程序使⽤的库链接(编译过程分为编译、链接两个阶段,注意不要和可执⾏⽂件这个概念搞混,相对可执⾏⽂件来说有三个重要的概念:编译(compile)、链接(link) gcc-c++也能编译C源代码,只不过把会把它当成C++源代码,后缀为.c的,gcc把它当作是C程序,⽽g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。 automake是⼀个从Makefile.am⽂件⾃动⽣成Makefile.in的⼯具。为了⽣成Makefile.in,automake还需⽤到perl,由于automake创建的发布完全遵循GNU标准,所以在创建中不需要perl。libtool是⼀款⽅便⽣成各种程序库的⼯具。 pcre pcre-devel:在Nginx编译需要 PCRE(Perl Compatible Regular Expression),因为Nginx 的Rewrite模块和HTTP 核⼼模块会使⽤到PCRE正则表达式语法。 zlip zlib-devel:nginx启⽤压缩功能的时候,需要此模块的⽀持。 openssl openssl-devel:开启SSL的时候需要此模块的⽀持。
截⽌得到当前,最新的版本为1.8.1,在linux使⽤wget下载:
[root@Server1 ~]# wget http://nginx.org/download/nginx-1.8.1.tar.gz --2016-04-23 10:22:55-- http://nginx.org/download/nginx-1.8.1.tar.gz
Resolving nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ...Connecting to nginx.org (nginx.org)|206.251.255.63|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 833473 (814K) [application/octet-stream]Saving to: ‘nginx-1.8.1.tar.gz.1’
100%[==============================================================================================================>] 833,473 251KB/s in 3.2s 2016-04-23 10:23:00 (251 KB/s) - ‘nginx-1.8.1.tar.gz.1’ saved [833473/833473]
3、解压安装包:
[root@Server1 ~]# tar xvf nginx-1.8.1.tar.gz[root@Server1 ~]# cd nginx-1.8.1[root@Server1 nginx-1.8.1]$ ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
4、编译nginx:make
编译是为了检查系统环境是否符合编译安装的要求,⽐如是否有gcc编译⼯具,是否⽀持编译参数当中的模块,并根据开启的参数等⽣成Makefile⽂件为下⼀步做准备:
[root@Server1 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/
结果如下:
5、⽣成脚本及配置⽂件:make
编译步骤,根据Makefile⽂件⽣成相应的模块6、安装:make install
创建⽬录,并将⽣成的模块和⽂件复制到相应的⽬录: 备注:nginx完成安装以后,有四个主要的⽬录:
conf:保存nginx所有的配置⽂件,其中nginx.conf是nginx服务器的最核⼼最主要的配置⽂件,其他的.conf则是⽤来配置nginx相关的功能的,例如fastcgi功能使⽤的是fastcgi.conf和fastcgi_params两个⽂件,配置⽂件⼀般都有个样板配置⽂件,是⽂html⽬录中保存了nginx服务器的web⽂件,但是可以更改为其他⽬录保存web⽂件,另外还有⼀个50x的web⽂件是默认的错误页⾯提⽰页⾯。logs:⽤来保存nginx服务器的访问⽇志错误⽇志等⽇志,logs⽬录可以放在其他路径,⽐如/var/logs/nginx⾥⾯。sbin:保存nginx⼆进制启动脚本,可以接受不同的参数以实现不同的功能。
7、启动:
将监听端⼝改为8090,避免80端⼝冲突:
listen 8090;
8、通过命令启动和关闭nginx:
[root@Server1 sbin]# /usr/local/nginx/sbin/nginx/nginxnginx: [emerg] getpwnam(\"nginx\") failed #没有nginx⽤户
[root@Server1 sbin]# /usr/local/nginx/sbin/nginx/nginx
nginx: [emerg] mkdir() \"/var/tmp/nginx/client/\" failed (2: No such file or directory) #⽬录不存在[root@Server1 sbin]# /usr/local/nginx/sbin/nginx/nginx #直到没有报错,才算启动完成
9、重读配置⽂件和关闭服务:
[root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx #启动 服务
[root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx -s reload #不停⽌服务重读配置⽂件[root@Server1 local]# /usr/local/nginx/sbin/nginx/nginx -s stop #停⽌服务 #停⽌服务
10.验证端⼝是否开启:
[root@Server1 sbin]# ps -ef | grep nginx
root 13228 1 0 Apr23 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx/nginx #nginx的主进程,只有⼀个主进程
nginx 13229 13228 0 Apr23 ? 00:00:00 nginx: worker process #nginx⼯作进程,默认只有⼀个,可以通过修改nginx.conf中的worker_processes 1; 参数启动多个⼯作进程root 13295 1400 0 00:01 pts/0 00:00:00 grep --color=auto nginx[root@Server1 local]# lsof -i:8090 #显⽰占⽤8090的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnginx 13337 root 6u IPv4 5932680 0t0 TCP *:8090 (LISTEN)nginx 13338 nginx 6u IPv4 5932680 0t0 TCP *:8090 (LISTEN)
11、通过给nginx的主进程ID号发送信号启动或停⽌nginx:
获取nginx主进程号的办法:
[root@Server1 nginx]# cat /var/run/nginx/nginx.pid #查看nginx的pid⽂件,此⽂件保存的就是nginx的主进程id13337 #次ID是随机的,每次启动都不⼀样的
[root@Server1 nginx]# ps -ef | grep nginx #过滤nginx的进程号
root 13337 1 0 00:05 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx/nginxnginx 21568 13337 0 10:58 ? 00:00:00 nginx: worker process
⽀持的信号:
[root@Server1 nginx]# kill -QUIT 13337 #平缓关闭Nginx,即不再接受新的请求,但是等当前请求处理完毕后再关闭Nginx。[root@Server1 nginx]# kill -TERM 21665 #快速停⽌Nginx服务
[root@Server1 nginx]# kill -HUP 21703 #使⽤新的配置⽂件启动进程然后平缓停⽌原有的nginx进程,即平滑重启。 [root@Server1 nginx]# kill -USR1 21703 #重新打开配置⽂件,⽤于nginx ⽇志切割⽇期切割的脚本:#!/bin/bash
PID=`cat /var/run/nginx/nginx.pid`
mv /var/log/nginx/access.log /var/log/nginx/`date +%Y_%m_%d:%H:%M:%S`.access.logkill -USR1 $PID
[root@Server1 nginx]# kill -USR2 21703 #使⽤新版本的nginx⽂件启动服务,然后在平缓停⽌原有的nginx服务,即平滑升级。[root@Server1 nginx]# kill -WINCH 21703 #平滑停⽌nginx的⼯作进程,⽤于nginx平滑升级。
三:nginx 主配置⽂件:nginx.conf
3.1:默认配置:配置⽂件默认保存在path/conf当中,默认的配置⽂件为nginx.conf,以下是编译安装后的默认配置:
[root@Server1 conf]# grep -v \"#\" nginx.conf | grep -v \"^$\"
#全局⽣效,主要设置nginx的启动⽤户/组,启动的⼯作进程数量,Nginx的PID路径,⽇志路径等。worker_processes 1; #默认启动⼀个⼯作进程
events { #events设置快,主要影响nginx服务器与⽤户的⽹络连接,⽐如是否允许同时接受多个⽹络连接,使⽤哪种事件驱动模型处理请求,每个⼯作进程可以同时⽀持的最⼤连接数,是否开启对多⼯作进程下的⽹络连接进⾏序列化等。 worker_connections 1024; #设置nginx可以接受的最⼤并发,多个进程只和}
http { #http块是Nginx服务器配置中的重要部分,缓存、代理和⽇志格式定义等绝⼤多数功能和第三⽅模块都可以在这设置,http块可以包含多个server块,⽽⼀个server块中⼜可以包含多个location块,server块可以配置⽂件引⼊、MIME
include mime.types; #⽂件扩展名与⽂件类型映射表 default_type application/octet-stream; #默认⽂件类型
sendfile on; #是否调⽤ sendfile 函数(zero copy -->零copy⽅式)来输出⽂件,普通应⽤打开,可以⼤幅提升nginx的读⽂件性能,如果服务器是下载的就需要关闭, keepalive_timeout 65; #长连接超时时间,单位是秒
server { #设置⼀个虚拟机主机,可以包含⾃⼰的全局快,同时也可以包含多个locating模块。⽐如本虚拟机监听的端⼝、本虚拟机的名称和IP配置,多个server 可以使⽤⼀个端⼝,⽐如都使⽤8090端⼝提供web服务、 listen 8090; #server的全局配置,配置监听的端⼝
server_name localhost; #本server的名称,当访问此名称的时候nginx会调⽤当前serevr内部的配置进程匹配。
location / { #location其实是server的⼀个指令,为nginx服务器提供⽐较多⽽且灵活的指令,都是在location中提现的,主要是基于nginx接受到的请求字符串,对⽤户请求的UIL进⾏匹配,并对特定的指令进⾏处理,包括地址重定向、数据缓存和 root html; #相当于默认页⾯的⽬录名称,默认是相对路径,可以使⽤绝对路径配置。 index index.html index.htm; }
error_page 500 502 503 504 /50x.html; #错误页⾯的⽂件名称
location = /50x.html { #location处理对应的不同错误码的页⾯定义到/50x.html,这个跟对应其server中定义的⽬录下。 root html; #定义默认页⾯所在的⽬录 } }}
3.2:配置nginx 主进程的启动⽤户和⼯作进程数:
user xxxx; #每⼀条指令都要以分号结尾
worker_processes 1; #可以指定启动的固定nginx进程数,或使⽤auto,auto是启动与当前CPU 线程相同的进程数,如CPU是四核⼋线程的就启动⼋个进程的Nginx⼯作进程。
3.3:绑定Nginx ⼯作进程到不同的CPU上:
默认Nginx是不进⾏保定的,绑定并不能是当前nginx进程独占以⼀核⼼CPU,但是可以保证此进程不会运⾏在其他核⼼上,这就极⼤减少了nginx ⼯作进程在不同cpu上的跳转,减少了CPU对进程的资源分配与回收,因此可以有效的提升nginx服务器的性能,配置如下:
[root@Server1 nginx]# grep process /proc/cpuinfo | wc -l #确认CPU的核⼼数量4
四个线程CPU的配置:worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
⼋个线程CPU的配置:worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
3.4:PID和错误⽇志⽂件路径:
#pid logs/nginx.pid; #可以指定绝对路径#error_log logs/error.log; #指定错误⽇志路径
#error_log logs/error.log notice; #指定⼀个⽇志记录级别#error_log logs/error.log info;
⽀持的⽇志级别:语法:
error_log file [ debug | info | notice | warn | error | crit ] | [{ debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_mail | debug_mysql } ]⽇志级别 = 错误⽇志级别 | 调试⽇志级别; 或者⽇志级别 = 错误⽇志级别;
错误⽇志的级别: emerg, alert, crit, error, warn, notic, info, debug,
调试⽇志的级别: debug_core, debug_alloc, debug_mutex, debug_event, debug_http, debug_mail, debug_mysql
error_log 指令的⽇志级别配置分为错误⽇志级别和调试⽇志级别,错误⽇志只能设置⼀个级别,⽽且错误⽇志必须书写在调试⽇志级别的前⾯,另外调试⽇志可以设置多个级别,其他配置⽅法可能⽆法满⾜需求。
3.5:配置⽂件的引⼊:include
include file; #file是要导⼊的⽂件,⽀持相对路径,⼀般在html⽬录⾥⾯导⼊⼀个conf⽂件,并配置不同主机名的页⾯,编辑nginx.conf主配置⽂件:
include /usr/local/nginx/conf.d/samsung.conf; #在最后⼀个⼤括号⾥⾯加⼊⼀项,*是导⼊任何以conf结尾的配置⽂件在/usr/local/nginx/conf.d/创建⼀个samsung.conf,内容如下:
[root@Server1 nginx]# grep -v \"#\" conf.d/samsung.conf | grep -v \"^$\" server {
listen 8090;
server_name samsung.chinacloudapp.cn; location / { root html;
index index1.html index.htm; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }}
因篇幅问题不能全部显示,请点此查看更多更全内容