Nginx学习笔记(二、Nginx基本命令及配置)

目录:

  • 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配置:

原文地址:https://www.cnblogs.com/bzfsdr/p/13873469.html