Nginx 常用命令和配置

Nginx 介绍

Nginx(发音同engine x)是一款免费的开源软件,由俄罗斯人伊戈尔·赛索耶夫2004年首次公开发布。

Nginx是一款面向性能设计、异步框架的Web服务器,支持反向代理,负载均衡和HTTP缓存。

Nginx使用异步事件驱动的方法来处理请求。Nginx的模块化事件驱动架构可以在高负载下提供更可预测的性能。

在Linux操作系统下,Nginx使用epoll事件模型,得益于此,Nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。

Nginx在官方测试的结果中,能够支持五万个并行连接,而在实际的运作中,可以支持二万至四万个并行链接。

Nginx 常用命令

启动服务

$ [sudo] /usr/sbin/nginx -c /etc/nginx/nginx.conf

管理运行实例

$ [sudo] nginx -s signal
​ stop – 快速关闭
​ quit – 优雅关闭 (等待 worker 线程完成处理)
​ reload – 重载配置文件
​ reopen – 重新打开日志文件

重启服务

$ [sudo] service nginx restart

停止服务

$ [sudo] service nginx restart

停止nginx服务其实就是给nginx主进程发送信号,所以需要先找到nginx主进程pid。

有两种方法可以找到nginx pid:

  • 通过ps命令

    $ ps -ef | grep -w nginx | grep master | awk '{print $2}'

  • 通过nginx.pid文件

    nginx.pid文件路径配置在nginx.conf里面的pid项里面(笔者Ubuntu环境为/run/nginx.pid)。

强制停止

$ [sudo] pkill -9 nginx

$ cat /run/nginx.pid | xargs [sudo] kill -9

快速停止

$ cat /run/nginx.pid | xargs [sudo] kill -TERM

$ cat /run/nginx.pid | xargs [sudo] kill -INT

从容停止

$ cat /run/nginx.pid | xargs [sudo] kill -QUIT

重新加载配置

$ [sudo] /usr/sbin/nginx -s reload
或者
$ cat /run/nginx.pid | xargs [sudo] kill -HUP

检查配置

$ [sudo] /usr/sbin/nginx -t -c /etc/nginx/nginx.conf

Ubuntu 升级nginx

1
2
3
4
$ sudo apt-add-repository ppa:nginx/stable
$ sudo apt-get update
$ sudo apt-get install nginx
$ sudo apt-get install nginx-extras #支持mp4播放扩展需要重新安装

Nginx 配置

if语句

Nginx配置文件语法不支持if语句嵌套,也不支持and、or、&&、|| 这类语法。
if语句感兴趣的可查看location下if是如何工作的这篇文章。

location 匹配

location匹配规则及优先级(由高到低)如下:

  1. = 严格匹配这个查询。如果找到,停止搜索。
  2. ^~ 匹配路径的前缀,如果找到,停止搜索。
  3. ~ 为区分大小写的正则匹配。
  4. ~* 为不区分大小写匹配 。

rewrite模块

rewrite的指令可以实现url的转向,rewrtie有四种不同的flag,分别是redirect、permanent、break和last。其中前两种是跳转型的flag,后两种是代理型。跳转型是指有客户端浏览器重新对新地址进行请求,代理型是在WEB服务器内部实现跳转的。

  • redirect
    302跳转到rewrtie后面的地址。
  • permanent
    301永久调整到rewrtie后面的地址,即当前地址已经永久迁移到新地址,一般是为了对搜索引擎友好。
  • last
    将rewrite后的地址重新在server标签执行。
  • break
    将rewrite后的地址重新在当前的location标签执行。

参考资料:
Nginx安装
Nginx 教程 (1):基本概念
Nginx 教程(2):性能
nginx 配置 Rewrite, 并使URL不跳转
If Is Evil