Nginx 进程分为主进程(master process)和若干工作进程(work process),其中工作进程指明了nginx要开启的进程数,据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响。 一般为当前机器总cpu核心数的1到2倍。如,我的机器为双核,那么开4个足够了。新版本的Nginx中work_processes可配置为auto
关于Nginx的安装
由于我的环境是CentOS7,为了方便,使用yum安装
yum install nginx.x86_64
# 使用此方式安装的Nginx主要目录如下:
配置:/etc/nginx/nginx.conf #主配置文件
/etc/nginx/conf.d/ #子配置文件
log:/var/log/nginx/*.log
缓存:/var/lib/nginx/,# --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi
Nginx默认主页:/usr/share/nginx/html/
这种方式属于入门方式,其实Nginx的强大之处不只是Nginx本身,还有其众多的Module,使用yum安装的话就不方便安装它的Module,所以如果需要安装其Module的话,还是使用编译安装吧,可以参考官方文档-编译安装或者中文文档
下面提供编译安装例子
sudo ./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=dev \
--group=developers \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-http_v2_module \
--with-ipv6
sudo make && make install
如果想要安装某些模块,只需要重新编译即可(--with-xxxx)xxx表示某些Module,关于模块安装,可以参考:http://www.nginx.cn/doc/ 和
http://www.ttlsa.com/nginx/how-to-install-nginx-third-modules/
Nginx命令行参数
参数 | 作用 |
---|---|
-c </path/to/filename> | 指定Nginx启动的配置文件,默认:/etc/nginx/nginx.conf |
-s <signal> | 向主进程发送信号:stop, quit, reopen, reload |
-t | 仅测试配置文件是否正确,不运行Nginx |
Nginx控制信号
信号 | 功能 |
---|---|
TERM, INT | 快速关闭 |
QUIT | 从容关闭 |
HUP | 重载配置,用新的配置开始新的工作进程,从容关闭旧的工作进程 |
USR1 | 重新打开日志文件 |
USR2 | 平滑升级可执行程序 |
WINCH | 从容关闭工作进程 |
eg.
ps -ef |grep nginx
kill -QUIT nginx主进程号
eg. 使用信号量重新平滑加载配置(请注意,在重载前,要先测试一下配置文件)
ps -ef |grep nginx
kill -HUP nginx主进程号
当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),成功的话,就应用新的配置文件(例如:重新打开日志文件或监听的套接 字)。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。 如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。
eg. 平滑升级到新的二进制代码(当升级新版本或添加/删除服务器模块时)
可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的
- 首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。主进程将重命名它的 .pid 文件为 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的可执行程序,依次启动新的主进程和新的工作进程
- 在这时,两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭
- 一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了
- 这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以恢复旧的服务器:
- 发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
- 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
- 发送 TERM 信号给新的主进程,迫使其退出,如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号
- 新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切就都恢复到升级之前了。
- 如果尝试升级成功,而你仅希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行
Nginx 启动、停止、重启命令
方式一、使用以上所述的信号量机制
方式二、使用Nginx 的 -s命令行参数配置
1. stop SIGTERM 快速停止
2. quit SIGQUIT 从容关闭
3. reopen SIGUSR1 重新打开日志文件
4. reload SIGHUP 重新加载配置