nginx基础篇
一、全局块
1.master_process:是否开启工作进程worker
master_process on|off; # 默认on;
注:修改后需重启nginx生效
2.worker_processes:生成工作进程的数量
worker_processes num|auto; # 默认1
注:受系统性能限制,建议与cpu内核数一致
3.daemon:守护进程
daemon on|off; # 默认on
注:on则nginx转后台运行,不占用终端,不受终端生命周期限制,修改后需重启nginx生效。
4.pid:指定nginx的master的id文件的路径
pid file; # 默认:/usr/local/nginx/logs/nginx.pid
5.error_log file [日志级别]:配置错误日志
error_log logs/error.log error;
注意:日志级别:debug|info|notice|warn|error|crit|alert|emerg
建议:不要设成info以下(越靠右等级越高),浪费io资源
6.include:加载其他配置文件
include file;
7.user:指定worker能调用哪个用户所属的文件
user root; # 默认 nobody
二、events块
1.accept_mutex:设置nginx网络连接序列化
accept_mutex on|off;
on:一个一个worker唤醒接收用户请求,适应同时请求少的情况 (默认)
off:多个worker同时竞争用户请求,适应同一时间多请求的情况
2.multi_accept:是否允许worker同时接受多个网络连接
multi_accept on|off;
on:一个worker可以同时接受多个网络连接 (推荐)
off:一个worker只能同时接受一个网络连接 (默认)
3.worker_connections:单个worker最大连接数
worker_connections 512; # 默认
注:不能大于操作系统支持打开的最大句柄数。
4.use:设置nginx用哪种事件驱动来处理网络消息
use select|poll|epoll|kqueue; # 推荐:epoll
三、http块
1.default_type:配置nginx响应前端请求默认的MINE类型
default_type text/plain; # 默认application/octet-stream
注:text/plain 文本,text/html 超文本
application/json json文本,application/octet-stream 下载附件(二进制流)
例:
default_type text/plain;
return 200 "this is a text" # 反馈状态码200正常,然后显示指定文本
2.自定义服务日志
2.1 access_log:用来设置用户访问日志的相关属性
# access_log path[format[buffer=size]] format格式名称 buffer日志大小
access_log logs/access.log combined;
2.2 log_format:用来指定日志的输出格式
# log_format name [escape=default|json|none] string...;
log_format combined "...";
注:只能在http块配置
- $http_user_agent:日志返回客户端信息
3.sendfile:是否用sendfile()传输文件,可以提升nginx处理静态资源的性能
sendfile on|off; # 默认off
注:
-
sendfile off:
需要有2次用户区和内核区的交互命令,4次文件拷贝传输
-
sendfile off:
只需要有1次用户区和内核区的交互命令,3次文件拷贝传输(且少了内核态和用户态的进程切换)
4.keepalive_timeout:设置长连接的超时时间
keepalive_timeout time; # 默认75,默认单位s
注:
- http是无状态协议,客户端向服务端发送tcp请求,服务端响应完就会断开连接
- 当客户端需要发送多个请求时,使用keepalive时,可以使服务端响应完请求时不断开连接,让下一个请求可以继续使用这个连接。
- 不宜开启时间过长,否则会导致存在连接过多,影响服务器性能。
5.keepalive_requests:设置一个keepalive连接使用的次数
keepalive_requests num; # 默认100
6.tcp_nopush:提升网络包的传输效率,与sendfile同时打开才生效
tcp_nopush on|off; # 默认off
注:
- tcp_nopush off 是一有数据就马上发送。
- tcp_nopush on 是设一个缓存区,等数据将之填满,才发送。
7.tcp_nodelay:提高网络包传输的实时性,与keepalive同时打开才生效
tcp_nodelay on|off; # 默认off
注:
- tcp_nodelay on 不等待缓存区装满,实时传输数据。
- tcp传输除了传输需求数据,还好加上其他校验数据一起传输,因此,当传输频率高,单次传输需求数据较少时,会造成极大的开销,数据传输效率低。
- tcp_nopush,tcp_nodelay同时开启时,数据量大时,会等待缓存区装满再发送数据,当到达最后一次,因数据没填满缓存区而暂停时,会忽略tcp_nopush直接实时传输数据。
四、http-server块
1.listen监听端口
listen port;
listen port default_server; # 匹配不到server_name时,默认匹配该server
2.server_name监听域名
# 精确匹配,支持配置多个域名
server_name address1 address2 address3;
注:监听是server_name和listen组合监听,当只匹配到listen,找不到server_name时,会默认匹配符合该端口的第一个server(或匹配配置了default_server的server)。
# 通配符匹配,server_name支持配置多个域名
server_name www.lzjfengyi.cloud *.lzjfengyi.cloud www.lzjfengyi.*;
注:不能使用 www..cloud 、 www.lzjfengyi.c 、 w*.lzjfengyi.cloud 会匹配失败
# 正则表达式匹配,使用 ~ 作为正则表达式字符串的开始标志
server_name ~^www\.\w+\.com$;
例如:
server_name ~^www\.(\w+)\.com$;
default_type text/plain; # 配置http返回的是文本类型
return 200 $1;
注:
- ~后面不能加空格,会报错,括号可以气质,如果网址是 www.lzjfengyi.cloud ,则$1的值就是 lzjfengyi
- 当网址能有多个server匹配时,匹配优先级:精确匹配>前通配符匹配>后通配符匹配>正则表达式匹配>默认server匹配
3. error_page
3.1 指定错误返回的页面
error_page 500 502 503 /50x.html;
3.2 指定错误返回的错误信息
server{
error_page 404 @jump_to_error;
localtion @jump_to_error{
default_type text/plain;
return 404 'the page not found';
}
}
3.3 状态码更改为另外一个状态码返回
error_page 404 =200 /abc.html; # 注意等号左边要加空格,右边不能加空格
location =/abc.html {
root html;
}
五、server-location块
1. 路径
1.1 精确匹配
location =/abc {} # 仅匹配abc本身
1.2 指定模式匹配
location /abc {} # 匹配以/abc开头的所有,如/abc,/abcde,/abc/ef
1.3 正则表达式匹配
# ~标志正则表达式,并区分大小写,^标志开始,$标志结束
location ~^/abc\w$ {}
# ~*标志正则表达式,并不区分大小写,^标志开始,$标志结束
location ~*^/abc\w$ {}
1.4 ^~
# ^~ 用于非正则表达式,功能与不加符合的一致,但如果匹配上,则直接使用该location
location ^~/abc {}
注:
- 指定模式匹配:当匹配是第一个location时,会继续搜索后面的是否匹配,会使用最后一个匹配上的location。
- 当匹配上 ^~ 时,直接使用这个location,不再往后搜索。
- 多个location匹配得上时,精确匹配>^~>正则>指定模式匹配
2. 资源对应目录
2.1 root
root path; # root的处理结果是:root路径+location路径
location /images/ {
root html;
}
2.2 alias
alias path; # alias处理结果是:使用alias路径取代location路径
location /images/ {
alias /usr/location/nginx/html/images/;
}
注:
- root定义最上层目录,alias定义全路径
- 如果location是 / 结尾,则alias也必须是 / 结尾,root则没要求。
3. index 访问该location路径时访问的首页
index file_name1 file_name2; # 该文件需要在root/alias指定的目录下。
注:
- index后面可以设置多个,空格分开
- 多个设置会从左到右开始尝试,找到第一个可以访问的就停止。
参考网站:http://nginx.org/en/docs/http/ngx_http_core_module.html
vim小技巧:
- 多行输入:
ctrl+v,然后通过方向键选中多行,输入大写的i,然后输入你想输入的,然后按Esc键,完成多行输入。 - 多行删除:
ctrl+v,然后通过方向键选中多行,输入d,完成删除