logs目录下:
access.log - 访问日志
error.log - 错误日志
nginx.pid - nginx进程的pid
nginx服务器启停
1、nginx中master和worker进程
- nginx默认多进程的工作方式,其中一个为master进程,其他是worker进程
- 我们作为管理员,和master进程直接交互,只需要通过给master进程发送信号就可以控制nginx
- 获取master进程对应的pid :ps -ef | grep nginx 或者查看nginx.pid文件
信号: - TERM/INT 立即关闭整个服务
- QUIT 优雅地关闭整个服务,master会告诉所有worker不要再去接受新请求,把当前处理的请求处理后再去关闭
- HUP 重读配置文件并使用服务对新配置生效
- USR1 重新打开日志文件,可以用来进行日志切割
- USR2 平滑升级到最新版的nginx
- WINCH 所有子进程不再接受处理新连接,相当于给worker进程发送QUIT指令
- 调用命令:kill -signal masterPi
- kill -TERM PID
- kill -TERM ‘cat /usr/local/nginx/logs/nginx.pid’‘’
三大模块
HTTP块中自定义服务日志
1)access_log 用于设置用户访问日志的相关属性
- 语法:access_log path[format[buffer=size]]
- 默认为 access_log logs/access.log combined;
- 位置可以是http块、server块、location块,就近匹配log
2)log_format 用于指定日志的输出格式
- 语法:log_format name [escape=default|json|none] string…;
- 默认为 log_format combined “…”
- 位置 http块
其中1)中的format和2)中的name要保持一致,例如
sendfile
用于设置nginx服务器是否使用sendfile()传输文件,该属性可以大大提高nginx处理静态资源的性能
- 语法:sendfile on|off
- 默认值:sendfile off;
- 位置:http、server、location
keepalive相关
keepalive背景:
- http是无状态协议,客户端向服务端发一个tcp请求,服务端响应完毕后断开连接。如果客户端向服务端发多个请求,每个请求都要重新建立一次连接,效率较低。
- 使用keepalive模式,可以告诉服务端在处理完一个请求后保持这个tcp连接的打开状态,若收到来自这个客户端的其他请求,服务端就会复用这个未被关闭的连接,而不需要重新创建一个连接,以此提升效率。但这个连接也不能一直保持,因为连接过多时服务端的性能就会下降,此时就需要设置其长连接的超时时间
1)keepalive_timeout
- 用于设置长连接的超时时间
- 语法:keepalive_timeout time;
- 默认值:keepalive_timeout 75s;
- 位置:http、server、location
2)keepalive_requests
- 用于设置一个keepalive连接使用的次数
- 语法:keepalive_requests num;
- 默认值:keepalive_requests 100;
- 位置:http、server、location
Nginx静态资源部署
浏览器发送http请求从服务端获取所需要内容并把内容回显展示。这里的内容就包括静态资源和动态资源。
- 静态资源:在服务端真实存在并且可拿来直接展示的文件,如html页面、css文件、js文件、图片和视频等资源
- 动态资源:在服务端真实存在但要获取需要经过一定业务逻辑处理,根据不同条件展示在页面的内容,如报表数据展示、根据当前登录用户展示相关数据等资源
listen
listen指令用来配置监听端口
- 语法:
listen address[:port][default server]...;
- 默认值:
listen *:80 | *:8000
- 位置:server
- default_server属性是标识符,用来将此虚拟主机设置成默认主机(如果没匹配到对应的IP:port,则会用第一个默认的server)
常见用例
listen 127.0.0.1:8000;
listen 127.0.0.1; 监听指定ip的所有端口
listen 8000; 监听指定端口上的连接
server_name
server_name 用于设置虚拟主机服务名称,可以在/etc/hosts文件添加ip和域名之间的对应关系,如127.0.0.1 www.xxx.cn,在ping www.xxx.cn时,就会走host映射到127.0.0.1,否则则通过外网的DNS解析到对应的IP
- 语法:server_name name…;name可以提供多个,用空格分割
- 默认值:server_name “”;
- 位置:server
关于server_name的配置有三种,分别是:
- 精确匹配:server_name www.baidu.cn www.ali.cn;
- 通配符匹配:
server_name *.xxx.cn www.xxx.*;
- 正则匹配:需要用~作为正则表达式字符串的开始标记,如
server_name ~^www\.(\w+)\.com$;
,也可以server_name ~^www\.\w+\.com;
,这里的括号表达式可以用 $n 取值,代表第n个匹配,如www.xx.com即在location /中可以 return 200 $1; $1即xx
代码 | 说明 |
---|---|
^ | 匹配搜索字符串开始位置 |
$ | 匹配搜索字符串结束位置 |
. | 匹配除换行符之外的任何单个字符 |
\ | 转义字符,将下一个字符标记为特殊字符 |
[xyz] | 字符集,与任意一个指定字符匹配 |
[a-z] | 字符范围,匹配指定范围内的任何字符 |
\w | 与以下任意字符匹配A-Z a-z 0-9和下划线,等效于[A-Za-z0-9] |
\d | 数字字符匹配,等效于[0-9] |
{n} | 正好匹配n次 |
{n,} | 至少匹配n次 |
{n, m} | 匹配至少n次至多m次 |
* | 0次或多次,{0,} |
+ | 1次或多次,{1,} |
? | 0次或1次 {0, 1} |
location
location用来设置请求的uri,uri变量是待匹配的请求字符串,先使用不包含正则的匹配度最高的location,然后再用包含正则的location,如果找到正则就用正则。除非用^~停止搜索
- 语法:
location [ = | ~ | ~* | ^~ | @] uri {...}
- 默认值:-
- 位置:server,location
1)不带符号,要求必须以指定模式开始
以下访问均可匹配
- http://127.0.0.1:80/abc
- http://127.0.0.1:80/abc?t=1
- http://127.0.0.1:80/abc/
- http://127.0.0.1:80/abcdef
2)=:用于不包含正则表达式的uri前,必须与指定的模式精确匹配
以下访问可以匹配:
- http://127.0.0.1/abc
- http://127.0.0.1/abc?t=1
以下访问不可匹配:
- http://127.0.0.1/abc/
- http://127.0.0.1/abcdef
3)~:用于表示当前uri中包含了正则,并且区分大小写
4)~*:用于表示当前uri中包含了正则,不区分大小写
5)^~:用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是如果模式匹配,就停止搜索其他模式