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/)

Nginx pid不断变化 nginx.pid_nginx 访问图片404

Nginx pid不断变化 nginx.pid_nginx 访问图片404_02


 找到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 }