nginx的启停控制
1、Nginx信号控制:
nginx中可以通过发送信号的方式来控制服务器的启停等,但要达成这些操作首先要知道nginx的PID。
获取pid的方式有两种:
- 利用linux的ps命令查看:ps -ef | grep nginx 或者是 ps aux | grep nginx
- 直接查看nginx的PID存储文件:vim nginx存储目录/logs/(如,我本地为vi /usr/local/nginx/logs/)
找到PID后便可以通过PID来发送信号了,目前nginx提供了如下几种信号。
信号 | 用法 |
TERM/INT | 快速停止nginx服务 |
QUIT | 平缓的停止nginx服务 |
HUP | 平滑重启,即使用新的配置文件启动后平缓停止原有进程 |
USR1 | 重新打开日志,常用于日志的切割· |
USR2 | 使用新的nginx版本启动服务,之后平缓停止原有的进程,也就是所谓的“平滑升级”, |
WINCH | 平缓停止worker prcess ,用于nginx服务平滑升级 |
同样的向Nginx服务进程发送信号也有两种方式:一种是使用Nginx二进制文件,另外一种是使用kill命令发送信号。
当然我们也可以动态的指定pid,kill 信号 filepath(filepath=nginx pid路径)。
1 kill QUIT /usr/local/nginx/logs/
2、Nginx服务启动:
linux下在nginx安装目录下的sbin命令中执行nginx二进制文件即可.
1 cd /usr/local/nginx/sbin
2 ./nginx
关于其它的命令可通过-h或?查看:
1 ./nginx -h
2 ./nginx -?
3、Nginx服务停止:
1、快速停止:立马丢弃手上的工作,停掉但取nginx正在处理的所有网络请求。
2、平缓停止:完成当前工作后再停止nginx。
1 ./nginx -s stop # 快速停止(习惯的方式) 2 ./nginx -g INT # 快速停止 3 ./nginx -g TERM # 快速停止 4 ./nginx -g QUIT # 平缓停止
5 6 # 使用PID方式 7kill INT PID
8kill TERM PID
9kill QUIT PID
1011 # kill -912 kill -9 信号 PID
13 kill -9 PID # 不推荐,容易导致部分用户丢失连接
4、Nginx服务重启:
1 # 可以指定新的配置文件2 ./nginx -g 信号 [新的配置文件]
34 # 可以使用PID,或者是pid文件所在的文件5kill HUB PID
67 # 在工作中常用的重启方式:平滑重启我们的nginx服务器,生产环境中经常使用8 ./nginx -s reload
5、Nginx服务升级:
如果我们需要对当前的Nginx服务进行升级 ,应用新的模块,最简单的方式是停下来,然后开启新的Nginx服务,那么给我们的用户体验是非常差的,会导致用户在一段时间内无法访问我们的服务器为了解决这个问题,Nginx提供了平滑升级的方案:
注意:为了实现nginx服务器的平滑升级,新安装的服务器路径应该和旧的一致。因此建议用新安装的服务器之前先备份一下我们的旧nginx服务器,如果由于种种原因不能保持新旧客户端路径一致则可以做一下操作,将旧的服务器路径更改为新的路径,新的服务器放入旧的路径中。
1# newinstallpath新文件的路径
2 ./nginx -p new_install_path
3 4# 备份旧的服务器
5 6# 安装新的服务器
7 8# 使新旧服务器实现平滑升级
9 ./nginx -g USR2
1011# 或者使用
12kill USR2 路径
1314# 查看新服务器的启动情况
15 ps -ef |grpe nginx
1617# 发送平滑停止旧的服务器信号
18 ./nginx -g WINCH
执行过程:
- Nginx服务接受到USR2的信号后,首先将旧的文件后面添加一个.oldbin。
- 变成了,.oldbin 然后执行新版本的Nginx服务器的二进制文件启动服务,如果启动成功那么我们将会有两个Nginx服务在提供服务。
- 之后需要向旧的发送WINCH信号,使旧的nginx服务平缓的停止并删除.oldbin文件 在发送WINCH信号前我们可以随时停止新的服务。
nginx的配置文件解读
1#user nobody; # 设定访问的用户或组,若不设置默认所有人都可以访问
2 worker_processes 1; # 设定工作组的数量,理论上越大越好,但是很多原因限制了性能,一般的跟我们服务器核心数一样就可以了
3 4# 日志文件存储的地方,默认是nginx下的logs 注释为释放的话没有日志生成
5 #error_log logs/error.log;
6 #error_log logs/error.log notice;
7# 日志的级别设置
8 #error_log logs/error.log info;
9 10# 进程的pid存放以及生成,如果你不释放开那么就不会在logs下生成文件
11 #pid logs/;
12 13# events块
14# 这里设置的属性一般和网络连接有关的,所以没事别瞎折腾他,网络会出现很多莫名其妙的异常
15# 常用到的有worker_processes的设置,比如是否序列化,是否允许,同时接受多个网络请求
16# 选取什么样的时间模型等等
17events {
18 # 设置最大的连接数为,一般默认512,但是常用的时候,一般是1024-2048
19 # 一般不要超过你的操作系统的最大文件句柄数
20 worker_connections 1024;
21}
22 23# 后续章节再述
24http {
25 include mime.types;
26 default_type application/octet-stream;
27 28 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
29 # '$status $body_bytes_sent "$http_referer" '
30 # '"$http_user_agent" "$http_x_forwarded_for"';
31 32 #access_log logs/access.log main;
33 34 sendfile on;
35 #tcp_nopush on;
36 37 #keepalive_timeout 0;
38 keepalive_timeout 65;
39 40 #gzip on;
41 42 server {
43 listen 80;
44 server_name localhost;
45 46 #charset koi8-r;
47 48 #access_log logs/host.access.log main;
49 50 location / {
51 root html;
52 index index.html index.htm;
53 }
54 55 #error_page 404 /404.html;
56 57 # redirect server error pages to the static page /50x.html
58 #
59 error_page 500 502 503 504 /50x.html;
60 location = /50x.html {
61 root html;
62 }
63 64 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
65 #
66 #location ~ \.php$ {
67 # proxy_pass http://127.0.0.1; 68 #}
69 70 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
71 #
72 #location ~ \.php$ {
73 # root html;
74 # fastcgi_pass 127.0.0.1:9000;
75 # fastcgi_index index.php;
76 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
77 # include fastcgi_params;
78 #}
79 80 # deny access to .htaccess files, if Apache's document root
81 # concurs with nginx's one
82 #
83 #location ~ /\.ht {
84 # deny all;
85 #}
86 }
87 88 89 # another virtual host using mix of IP-, name-, and port-based configuration
90 #
91 #server {
92 # listen 8000;
93 # listen somename:8080;
94 # server_name somename alias another.alias;
95 96 # location / {
97 # root html;
98 # index index.html index.htm;
99 # }
100 #}
101102103 # HTTPS server
104 #
105 #server {
106 # listen 443 ssl;
107 # server_name localhost;
108109 # ssl_certificate cert.pem;
110 # ssl_certificate_key cert.key;
111112 # ssl_session_cache shared:SSL:1m;
113 # ssl_session_timeout 5m;
114115 # ssl_ciphers HIGH:!aNULL:!MD5;
116 # ssl_prefer_server_ciphers on;
117118 # location / {
119 # root html;
120 # index index.html index.htm;
121 # }
122 #}
123124 }