目录:
- 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配置: