nginx配置文件
默认配置文件位置:/usr/local/nginx/conf/nginx.conf
配置文件分成3大块
- main 全局配置,对全局生效
- events 配置影响 Nginx 服务器与用户的网络连接
- http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
- server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
- location 配置虚拟主机内请求地址应该映射到哪里
- upstream 用于被代理服务器有多个并且需要负载均衡的情况
- types
配置大全
- main 全局配置,对全局生效
- worker_processes_number worker进程的数量,一般1个或者等于cpu线程数量,可以指定为auto
- user 指定nginx允许worker进程的用户和用户组
- pid 指定进程id存放位置
- worker_rlimit_nofile_number 指定每个worker子进程最大文件句柄数
nginx作为静态资源服务器的时候每个连接都会对应一个磁盘文件,这时候worker_rlimit_nofile_number 不应该小于worker_connections的一半,并且这个值不应该大于linux ulimit -n指定的单进程文件限制。 - worker_rlimit_core 指定 worker 子进程异常终止后的 core 文件,用于记录分析问题。
- worker_cpu_affinity cpu亲和力,把cpu和worker进程绑定
将每个 worker 子进程与特定 CPU 物理核心绑定,优势在于,避免同一个 worker 子进程在不同的 CPU 核心上切换,缓存失效,降低性能。但其并不能真正的避免进程切换。
- worker_priority 设置worker线程优先级偏量-20到+19,越小优先级越高
- worker_shutdown_timeout 优雅关闭等待时间
- timer_resolution worker程和操作系统的对时精度,
调整时间间隔越大,系统调用越少,有利于性能提升;反之,系统调用越多,性能下降。
- daemon 指定 Nginx 的运行方式,前台还是后台,一般都是后台
- events 配置影响 Nginx 服务器与用户的网络连接
- use Nginx使用何种事件驱动模型
method 可选值为:select、poll、kqueue、epoll、/dev/poll、eventport
- worker_connections worker子进程能够处理的最大并发连接数。
受到 worker_rlimit_nofile_number 和 操作系统 ulimit -n限制
- accept_mutex 是否打开负载均衡互斥锁
- http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
- server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
- server_name 指定虚拟主机域名
server-name可以使用通配符
域名匹配的四种写法:
- 精确匹配: server_name http://www.nginx.com ;
- 左侧通配: server_name *. http://nginx.com ;
- 右侧通配: server_name www.nginx.* ;
- 正则匹配: server_name ~^www.nginx.*$ ; # ~是正则标记,^和$示开始结束标记
匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配
- location 配置虚拟主机内请求地址应该映射到哪里
- root 指定静态资源目录位置,它可以写在 http 、 server 、 location 等配置中
- alias
alias 和 root 的区别 在于alias时替换(不会加上匹配部分),root指定根目录(会加上匹配部分)
- proxy_pass 代理地址
proxy_pass 地址后面的 斜杆很关键,类似alias 和 root 的区别
- add_header 添加或者修改响应头
效果
- return 停止处理请求,直接返回响应码或重定向到其他 URL ;执行 return 指令后, location 中后续指令将不会被执行。
- rewrite 根据指定正则表达式匹配规则,重写 URL ,重写适用于复杂的转发场景,如果用到重写可以反过来思考设计是否合理,rewrite可使用ngixn内置变量,文档末尾有总结
flag 可选值的含义:
- last 重写后的 URL 发起新请求,再次进入 server 段,重试 location 的中的匹配;
- break 直接使用重写后的 URL ,不再匹配其它 location 中语句;
- redirect 返回302临时重定向;
- permanent 返回301永久重定向;
rewrite 例子
- if 指令,if可使用ngixn内置变量,文档末尾有总结
condition 判断条件:
- $variable 仅为变量时,值为空或以0开头字符串都会被当做 false 处理;
- = 或 != 相等或不等;
- ~ 正则匹配;
- ! ~ 非正则匹配;
- ~* 正则匹配,不区分大小写;
- -f 或 ! -f 检测文件存在或不存在;
- -d 或 ! -d 检测目录存在或不存在;
- -e 或 ! -e 检测文件、目录、符号链接等存在或不存在;
- -x 或 ! -x 检测文件可以执行或不可执行;
if例子
- autoindex 自动生成首页,用于ngxin作为文件服务器(映射指定硬盘目录)
效果
- upstream 用于被代理服务器有多个并且需要负载均衡的情况
- server 定义上游服务器地址;
parameters 可选值:
- weight=number 权重值,默认为1;
- backup 备份服务器,仅当其他服务器都不可用时才会启用;
- down 标记服务器长期不可用,离线维护;
- max_conns=number 上游服务器的最大并发连接数;
- fail_timeout=time 服务器不可用的判定时间;
- max_fails=numer 服务器不可用的检查次数,超过一定次数以后nginx会自动剔除这个子服务器
- keepalive 对上游服务启用长连接;
- keepalive_requests 一个长连接可以有多少个请求 HTTP请求;
- keepalive_timeout 空闲情形下,一个长连接的超时时长;
- 指定负载均衡算法可有下面值
- hash
- ip_hash
- least_conn
- least_time
- random