目录:
- nginx的启停控制
- nginx的配置文件解读
nginx的启停控制
1、Nginx信号控制:
nginx中可以通过发送信号的方式来控制服务器的启停等,但要达成这些操作首先要知道nginx的PID。
获取pid的方式有两种:
- 利用linux的ps命令查看:ps -ef | grep nginx 或者是 ps aux | grep nginx
- 直接查看nginx的PID存储文件:vim nginx存储目录/logs/nginx.pid(如,我本地为vi /usr/local/nginx/logs/nginx.pid)
找到PID后便可以通过PID来发送信号了,目前nginx提供了如下几种信号。
信号 |
用法 |
TERM/INT |
快速停止nginx服务 |
QUIT |
平缓的停止nginx服务 |
HUP |
平滑重启,即使用新的配置文件启动后平缓停止原有进程 |
USR1 |
重新打开日志,常用于日志的切割· |
USR2 |
使用新的nginx版本启动服务,之后平缓停止原有的进程,也就是所谓的“平滑升级”, |
WINCH |
平缓停止worker prcess ,用于nginx服务平滑升级 |
同样的向Nginx服务进程发送信号也有两种方式:一种是使用Nginx二进制文件,另外一种是使用kill命令发送信号。
1 kill QUIT 1478
当然我们也可以动态的指定pid,kill 信号 filepath(filepath=nginx pid路径)。
1 kill QUIT /usr/local/nginx/logs/nginx.pid
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方式 7 kill INT PID 8 kill TERM PID 9 kill QUIT PID 10 11 # kill -9 12 kill -9 信号 PID 13 kill -9 PID # 不推荐,容易导致部分用户丢失连接
4、Nginx服务重启:
1 # 可以指定新的配置文件 2 ./nginx -g 信号 [新的配置文件] 3 4 # 可以使用PID,或者是pid文件所在的文件 5 kill HUB PID 6 7 # 在工作中常用的重启方式:平滑重启我们的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 10 11 # 或者使用 12 kill USR2 nginx.pid路径 13 14 # 查看新服务器的启动情况 15 ps -ef |grpe nginx 16 17 # 发送平滑停止旧的服务器信号 18 ./nginx -g WINCH
执行过程:
- Nginx服务接受到USR2的信号后,首先将旧的Nginx.pid文件后面添加一个.oldbin。
- 变成了,nginx.pid.oldbin 然后执行新版本的Nginx服务器的二进制文件启动服务,如果启动成功那么我们将会有两个Nginx服务在提供服务。
- 之后需要向旧的发送WINCH信号,使旧的nginx服务平缓的停止并删除nginx.pid.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下生成nginx.pid文件 11 #pid logs/nginx.pid; 12 13 # events块 14 # 这里设置的属性一般和网络连接有关的,所以没事别瞎折腾他,网络会出现很多莫名其妙的异常 15 # 常用到的有worker_processes的设置,比如是否序列化,是否允许,同时接受多个网络请求 16 # 选取什么样的时间模型等等 17 events { 18 # 设置最大的连接数为,一般默认512,但是常用的时候,一般是1024-2048 19 # 一般不要超过你的操作系统的最大文件句柄数 20 worker_connections 1024; 21 } 22 23 # 定义程序如何处理http或https连接所必需的全部之类及其它上下文 24 # 它可以嵌套多个server,配置值代理、缓存、日志定义等绝大多数功能和第三方模块 25 http { 26 include mime.types; 27 default_type application/octet-stream; 28 29 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 30 # '$status $body_bytes_sent "$http_referer" ' 31 # '"$http_user_agent" "$http_x_forwarded_for"'; 32 33 #access_log logs/access.log main; 34 35 sendfile on; 36 #tcp_nopush on; 37 38 #keepalive_timeout 0; 39 keepalive_timeout 65; 40 41 #gzip on; 42 43 server { 44 listen 80; 45 server_name localhost; 46 47 #charset koi8-r; 48 49 #access_log logs/host.access.log main; 50 51 location / { 52 root html; 53 index index.html index.htm; 54 } 55 56 #error_page 404 /404.html; 57 58 # redirect server error pages to the static page /50x.html 59 # 60 error_page 500 502 503 504 /50x.html; 61 location = /50x.html { 62 root html; 63 } 64 65 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 66 # 67 #location ~ .php$ { 68 # proxy_pass http://127.0.0.1; 69 #} 70 71 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 72 # 73 #location ~ .php$ { 74 # root html; 75 # fastcgi_pass 127.0.0.1:9000; 76 # fastcgi_index index.php; 77 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 78 # include fastcgi_params; 79 #} 80 81 # deny access to .htaccess files, if Apache's document root 82 # concurs with nginx's one 83 # 84 #location ~ /.ht { 85 # deny all; 86 #} 87 } 88 89 90 # another virtual host using mix of IP-, name-, and port-based configuration 91 # 92 #server { 93 # listen 8000; 94 # listen somename:8080; 95 # server_name somename alias another.alias; 96 97 # location / { 98 # root html; 99 # index index.html index.htm; 100 # } 101 #} 102 103 104 # HTTPS server 105 # 106 #server { 107 # listen 443 ssl; 108 # server_name localhost; 109 110 # ssl_certificate cert.pem; 111 # ssl_certificate_key cert.key; 112 113 # ssl_session_cache shared:SSL:1m; 114 # ssl_session_timeout 5m; 115 116 # ssl_ciphers HIGH:!aNULL:!MD5; 117 # ssl_prefer_server_ciphers on; 118 119 # location / { 120 # root html; 121 # index index.html index.htm; 122 # } 123 #} 124 125 }
nginx-http配置: