笔记之 Nginx 服务器的安装与配置


安装Nginx服务器之前,首先要安装一个Linux/Unix操作系统发行版,例如 Redhat、CentOS、Debian、FedoraCore、Getoo、SUSE、Ubuntu、FreeBSD等。国内互联网公司以新浪、搜狐、网易、金山游戏官网等最常用的Linux发行版——CentOS(它是基于RedHat Enterprise Linux源代码重新编译、去除RedHat商标的产物,操作与使用完全相同,并且完全免费和修正了其很多BUG,但是它不提供技术支持)。



编译Nginx要求如下:



1.    Gcc编译器及相关工具:必须确保操作系统有安装GCC编译器,另外还要安装Autoconf和Automake工具,它们用于自动创建功能完善的Makfile,CentOS下yum命令安装:yum –y install gcc gcc-c++ autooconf automake



2.    模块依赖性:Nginx的一些模块需要第三方库的支持,例如gzip模块需要zlib库,rewrite模块需要pcre库,ssl功能需要openssl库等。CentOS下yum命令安装:



yum –y install zlib zlib-devel openssl openssl-devel \ pcre pcre-devel



Nginx的官网 http://www.nginx.net



最简单的安装命令如下:



tar zxvf nginx-x.x.xx.tar.gz 
  
 
  

    cd nginx-x.x.xx 
  
 
  

    ./configure 
  
 
  

    Make&&make install


这将Nginx默认安装到/usr/local/nginx 目录下。



可以通过 ./configure –help 命令查看Nginx可选择的编译选项。下面我写几个常用的编译选项:



--prefix=<path>——安装路径,没有指定默认为 /usr/local/nginx



 



--sbin-path=<path>——可执行文件安装路径,默认为<path>/sbin/nginx



 



--confi-path=<path>——nginx.conf配置文件的路径,默认为<path>/conf/nginx.conf



 



--pid-path=<path>——在nginx.conf没有指定pid的情况下nginx.pid的路径,默认为<path>/logs/nginx.pid



 



--lock-path=<path>——nginx.lock文件的路径



 



--error-log-path=<path>——在nginx.conf中没有指定error_log的情况下的路径,默认<prefilx>/logs/error.log



 



--http-log-path=<path>——在nginx.conf中没有指定access_log的情况下的访问日志路径,默认为<path>/logs/eccess.log



--user=<user>——在nginx.conf 中没有指定user的情况下的Nginx使用的用户,默认为nobody



 



--group=<group>——在nginx.conf中没有指定user的情况下的nginx使用组,默认为nobody



 



--with-http_ssl_module——开启http ssl 模块,使nginx可以支持https请求,这个模块需要已经安装openssl,在Debian上是libssl.



 



--with-http_flv_module——启用ngx_http_flv_module



 



--with-http_gzip_module(--without-http_gzip_module)——启用或禁用ngx_http_gzip_module,如果启用,需要zlib



 



--without-http_proxy_module



--without-http_rewrite_module 如果启用,需要PCRE



--without-http_fastcgi_module



Without-http_memcached_module



--without-http_limit_zone_module



--with-http_perl_module



等等。



示例编译代码如下:


./configure --prefix=/usr \ 
  
 
  

    --sbin-path=/usr/sbin/nginx \ 
  
 
  

    --conf-path=/etc/nginx/nginx.conf \ 
  
 
  

    --error-log-path=/var/log/nginx/error.log \ 
  
 
  

    --pid-path=/var/run/nginx/nginx.pid \ 
  
 
  

    --lock-path=/var/lock/nginx.lock \ 
  
 
  

    --user=nginx --group=nginx \ 
  
 
  

    --with-http_ssl_module \ 
  
 
  

    --with-http_gzip_static_module \ 
  
 
  

    --with-http_flv_module \ 
  
 
  

    --http-log-path=/var/log/nginx/access.log \ 
  
 
  

    --http-client-body-temp-path=/var/tmp/nginx/client/ \ 
  
 
  

    --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 
  
 
  

    --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/



Nginx的启动


<path>/sbin/nginx –c <path>/conf/nginx.conf


参数“-c”指定了配置文件的路径,如果不加“-c”参数,Nginx会默认加载其安装目录的conf子目录中的nginx.conf文件。



Nginx的停止



   停止方法有很多种,一般通过发送系统信号给nginx主进程的方式来停止nginx。通过命令ps –ef | grep nginx查看nginx的主进程“master process”和子进程“workerprocess”,每个进程都有一个进程号,如果在nginx.conf配置文件中指定了pid文件存放的路径(如: pid <path>/logs/nginx.pid ;)



该文件就是存放Nginx当前的主进程号,若没有指定pid文件的路径,则nginx.pid文件默认在<path>/logs/目录下面。所以我们可以通过一下命令来完成平滑启动,省去了找主进程号的步骤:



   Kill –信号类型 `<path>/logs/nginx.pid`



(1.)         从容停止Nginx



Kill -QUIT Nginx主进程号 



或 Kill  -QUIT  `<path>/logs/nginx.pid`



(2.) 快速停止 Nginx



      Kill -TERM   Nginx主进程号



      Kill -TERM   `<path>/logs/nginx.pid`



     或    kill -INT   Nginx主进程号 



       Kill   -INT   `<path>/logs/nginx.pid`



(3.) 强制停止所有Nginx进程



     Kill -9   nginx



判断配置文件是否正确:



<path>/sbin/nginx –t –c <path>/conf/nginx.conf



如果文件正确,就可以平滑启动Nginx了



Kill -HUP Nginx主进程号



Kill -HUP `<path>/logs/nginx.pid`



   Nginx收到HUP信号时,先解析配置文件,成功,就应用新的配置文件。之后nginx运行新的工作进程并从容关闭旧的工作进程。如果新的配置文件应用失败,Nginx继续使用旧的配置文件。



 



Nginx的信号控制:



TERM,INT 快速关闭;



QUIT 从容关闭;



HUP    平滑重启,重新加载配置文件;



USR1    重新打开日志文件,在切割日志文件时用途较大;



USR2    平滑升级可执行程序;



WINCH    从容关闭工作进程。



 



Nginx的平滑升级



当需要将正在运行中的Nginx升级、添加、删除服务器模块式,可以在不中断服务器的情况下,使用新版本、重编译的Nginx可执行程序替换旧的版本的可执行程序,步骤如下:



1.                     使用新的可执行程序替换旧的可执行程序,对于编译安装的Nginx可以将新版本编译安装到旧版本的Nginx安装路径中。替换之前组号备份。



2.                     发送以下指令: kill -USR2 旧版本的Nginx主进程号



3.                     旧版本的主进程将重命名。Pid文件为.oldbin(如:<path>/logs/nginx.pid.oldbin),r然后执行新版本的可执行程序,依次启动新的主进程和新的工作进程。



4.                     此时,新、旧版本的Nginx实例会同时运行,共同处理输入的请求。要逐步停止旧版本的Nginx实例,你必须发送WINCH信号给旧的主进程,它的工作进程才开始从容关闭:



kill -WINCH 旧版本的Nginx主进程号



5.                     这时我们可以决定使用新版本还是旧版本。



 



                                                2011.2.13


转载于:https://blog.51cto.com/weekyuan/780217