nginx常用配置
nginx常用配置
xiaoxin-topNginx
nginx常用配置
nginx常用命令1 | nginx -s reload # 向主进程发送信号,重新加载配置文件,热重启 |
1 | # main段配置信息 |
用一张图清晰的展示它的层级结构:配置文件解析:
main 全局配置,对全局生效;
events 配置影响 Nginx 服务器与用户的网络连接;
http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
location 用于配置匹配的 uri ;
upstream 配置后端服务器具体地址,负载均衡配置不可或缺的部分;
nginx层级结构图
配置文件main段核心参数配置文件由指令与指令块构成
每条指令以 “;” 分号结尾,指令与参数间以空格符号分隔
指令块以 {} 大括号将多条指令组织在一起
include 语句允许组合多个配置文件以提升可维护性
通过 # 符号添加注释,提高可读性
通过 $ 符号使用变量
部分指令的参数支持正则表达式,例如常用的 location指令
user
指定运行 Nginx 的 woker 子进程的属主和属组,其中组可以不指定。
1 | #语法:user USERNAME [GROUP] |
pid
指定运行 Nginx master 主进程的 pid 文件存放路径。
1 | pid /opt/nginx/logs/nginx.pid # master主进程的的pid存放在nginx.pid的文件 |
worker_rlimit_nofile_number
指定worker子进程可以打开的最大文件句柄数。
1 | worker_rlimit_nofile 20480; # 可以理解成每个worker子进程的最大连接数量。 |
worker_rlimit_core
指定worker子进程可以产生最大core文件大小。用于记录分析问题。
1 | worker_rlimit_core 50M; # 存放大小限制 |
worker_processes_number
指定 Nginx 启动的 worker 子进程数量。
1 | worker_processes 4; # 指定具体子进程数量 |
worker_cpu_affinity
将每个 worker 子进程与我们的 cpu 物理核心绑定。
将每个 worker 子进程与特定 CPU 物理核心绑定,优势在于,避免同一个 worker 子进程在不同的 CPU 核心上切换,缓存失效,降低性能。但其并不能真正的避免进程切换。
1 | worker_cpu_affinity 0001 0010 0100 1000; # 4个物理核心,4个worker子进程 |
worker_priority
指定 worker 子进程的 nice 值,以调整运行 Nginx 的优先级,通常设定为负值,以优先调用 Nginx 。
Linux 默认进程的优先级值是120,值越小越优先;nice 值范围为 -20 到 +19 。备注:应用的默认优先级值是120加上 nice 值等于它最终的值,这个值越小,优先级越高。
1 | worker_priority -10; # 120-10=110,110就是最终的优先级 |
worker_shutdown_timeout
指定 worker 子进程优雅退出时的超时时间。
1 | worker_shutdown_timeout 5s; |
timer_resolution
worker 子进程内部使用的计时器精度,调整时间间隔越大,系统调用越少,有利于性能提升;反之,系统调用越多,性能下降
在 Linux 系统中,用户需要获取计时器时需要向操作系统内核发送请求,有请求就必然会有开销,因此这个间隔越大开销就越小。
1 | timer_resolution 100ms; |
daemon
指定 Nginx 的运行方式,前台还是后台,前台用于调试,后台用于生产。
1 | daemon off; # 默认是on,后台运行模式 |
use
Nginx 使用何种事件驱动模型。
method 可选值为:select、poll、kqueue、epoll、/dev/poll、eventport
1 | use method; # 不推荐配置它,让nginx自己选择 |
worker_connections
worker 子进程能够处理的最大并发连接数。
1 | worker_connections 1024 # 每个子进程的最大连接数为1024 |
accept_mutex
是否打开负载均衡互斥锁
1 | accept_mutex on # 默认是off关闭的,这里推荐打开 |
server_name指令
指定虚拟主机域名
域名匹配的四种写法:精确匹配:server_name http://www.nginx.com ;
左侧通配:server_name .http://nginx.com ;
右侧统配:server_name www.nginx. ;
正则匹配:server_name ~^www.nginx.*$ ;
匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配
1 | #语法:server_name name1 name2 name3 |
server_name配置实例:
/etc/nginx/nginx.conf
1 |
|
1 | server { |
1 |
|
1 |
|
当访问 http://www.nginx-test.com 时,都可以被匹配上,因此选择优先级最高的“完全匹配”;
当访问 http://mail.nginx-test.com 时,会进行“左匹配”;
当访问 http://www.nginx-test.org 时,会进行“右匹配”;
当访问 http://doc.nginx-test.com 时,会进行“左匹配”;
当访问 http://www.nginx-test.cn 时,会进行“右匹配”;
当访问 fe.nginx-test.club 时,会进行“正则匹配”;
指定静态资源目录位置
指定静态资源目录位置,它可以写在 http 、 server 、 location 等配置中。
#当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png
1 |
|
它也是指定静态资源目录位置,它只能写在 location 中。
#当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png
1 | location /image { |
注意:root 会将定义路径与 URI 叠加, alias 则只取定义路径。
location块
1 | location [ = | ~ | ~* | ^~ ] uri { |
1 | = 精确匹配; |
1 | server { |
1 |
|
不带 / 当访问 http://www.nginx-test.com/test 时, Nginx 先找是否有 test 目录,如果有则找 test 目录下的 index.html ;如果没有 test 目录, nginx 则会找是否有 test 文件。
带 / 当访问 http://www.nginx-test.com/test 时, Nginx 先找是否有 test 目录,如果有则找 test 目录下的 index.html ,如果没有它也不会去找是否存在 test 文件。
return
停止处理请求,直接返回响应码或重定向到其他 URL ;执行 return 指令后, location 中后续指令将不会被执行。
1 |
|
rewrite
根据指定正则表达式匹配规则,重写 URL 。
1 | #语法: |
flag 可选值的含义:
last 重写后的 URL 发起新请求,再次进入 server 段,重试 location 的中的匹配;
break 直接使用重写后的 URL ,不再匹配其它 location 中语句;
redirect 返回302临时重定向;
permanent 返回301永久重定向;
#上下文(标签):
可以写在:
server{}块
location{}块
if{}块
如:
1 | rewirte /images/(.*\.jpg)$ /pic/$1; # $1是前面括号(.*\.jpg)的反向引用 |
如:
1 | server{ |
- 当访问 fe.lion.club/search 时,会自动帮我们重定向到 https://www.baidu.com。
- 当访问 fe.lion.club/images/1.jpg 时,第一步重写 URL 为 fe.lion.club/pics/1.jpg ,找到 pics 的 location ,继续重写 URL 为 fe.lion.club/photos/1.jpg ,找到 /photos 的 location 后,去 html/photos 目录下寻找 1.jpg 静态资源。
if指令
1 | if (condition) {...} |
condition 判断条件:
- $variable 仅为变量时,值为空或以0开头字符串都会被当做 false 处理;
- = 或 != 相等或不等;
- ~ 正则匹配;
- ! ~ 非正则匹配;
- ~* 正则匹配,不区分大小写;
- -f 或 ! -f 检测文件存在或不存在;
- -d 或 ! -d 检测目录存在或不存在;
- -e 或 ! -e 检测文件、目录、符号链接等存在或不存在;
- -x 或 ! -x 检测文件可以执行或不可执行;
- server{}
或 - location{}
- 检测客户端浏览器类型
1
2
3if($http_user_agent ~ Chrome){
rewrite /(.*)/browser/$1 break;
} - 如果访问 /images/ 则重写 URL 为 /pics/
1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 8080;
server_name localhost;
root html;
location / {
if ( $uri = "/images/" ){
rewrite (.*) /pics/ break;
}
}
}
- 当访问 localhost:8080/images/ 时,会进入 if 判断里面执行 rewrite 命令。
autoindex
用户请求以 / 结尾时,列出目录结构,可以用于快速搭建静态资源下载网站。
autoindex.conf 配置信息:
1 | server { |
- 当访问 http://fe.xxx.com/download/ 时,会把服务器 /opt/source/download/ 路径下的文件展示出来。