Nginx路由匹配规则及各种场景实例
一、在nginx配置文件中通过location配置路由转发规则,配置语法为:
location [=||*|^~] /uri/ {
# …
}
中括号中为路由匹配符号,常见的有:
1 =:精确匹配 2 ^~:精确前缀匹配 3 ~:区分大小写的正则匹配 4 ~*:不区分大小写的正则匹配 5 /uri:普通前缀匹配 6 /:通用匹配
精确匹配
精确匹配使用 = 表示,nginx进行路由匹配的时候,精确匹配具有最高的优先级,请求一旦精确匹配成功nginx会停止搜索其他到匹配项
配置实例
location = /test {
…
}
精确前缀匹配
精确前缀匹配的优先级仅次于精确匹配,nginx对一个请求精确前缀匹配成功后,停止继续搜索其他到匹配项
配置实例
location ^~ /test_a {
…
}
正则匹配
正则匹配分为区分大小写和不区分大小写两种,分别用 ~ 和 ~* 表示;一个请求精确匹配和精确前缀匹配都失败后,如果配置有相关的正则匹配location,nginx会尝试对该请求进行正则匹配。需要说明的是正则匹配之间没有优先级一说,而是按照在配置文件中出现的顺序进行匹配,一旦匹配上一个,就会停止向下继续搜索
配置实例
# 配置1
location ~ /test_a {
…
}
# 配置2
location ~* /test_A {
…
}
对于请求 /test_a/hello 来说会被匹配到 配置1 处理,/test_A/hello 则会被匹配给 配置2 处理
普通前缀匹配
普通前缀匹配前面没有任何修饰符,直接在location后写需要匹配的uri,它的优先级次于正则匹配
配置实例
location /img {
…
}
通用匹配
通用匹配使用一个 / 表示,可以匹配所有请求,一般nginx配置文件最后都会有一个通用匹配规则,当其他匹配规则均失效时,请求会被路由给通用匹配规则处理;如果没有配置通用匹配,并且其他所有匹配规则均失效时,nginx会返回 404 错误
配置实例
location / {
…
}
引用一个完整例子
nginx路由规则配置:
location = / {
echo “规则A”;
}
location = /login {
echo “规则B”;
}
location ^~ /static/ {
echo “规则C”;
}
location ^~ /static/files {
echo “规则X”;
}
location ~ .(gif|jpg|png|js|css)$ {
echo “规则D”;
}
location ~* .png$ {
echo “规则E”;
}
location /img {
echo “规则Y”;
}
location / {
echo “规则F”;
}
请求uri 匹配路由规则
http://localhost/ 规则A http://localhost/login 规则B http://localhost/register 规则F http://localhost/static/a.html 规则C http://localhost/static/files/a.txt 规则X http://localhost/a.png 规则D http://localhost/a.PNG 规则E http://localhost/img/a.gif 规则D http://localhost/img/a.tiff 规则Y
以上是对nginx路由匹配规则的粗略总结和归纳。
二、各种场景实例:
# 1、反向代理静态文件 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8080; server_name 127.0.0.1; # charset koi8-r; location / { root html; index index.html index.htm; } # 配置反向代理 location /drink { alias D:\apk\drink; autoindex on; allow all; autoindex_exact_size on; autoindex_localtime on; } # error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
# 2、配置ssl域名+反向代理静态文件+代理服务 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8055; listen 14430 ssl; # 配置ssl域名 start server_name ****.nxycsw.cn; ssl_certificate D:/workspace/human_drink_yanqing/nginx-1.16.1/cert/ssl.pem; ssl_certificate_key D:/workspace/human_drink_yanqing/nginx-1.16.1/cert/ssl.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # 配置ssl域名 end # 配置反向代理 start location / { root D:/workspace/human_drink_yanqing/nginx-1.16.1/html/docs/dist; index index.html index.htm after.html front.html mobile.html; } # 配置反向代理 end error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # 配置服务代理 start location /api { # rewrite ^.+api/?(.*)$ /$1 break; include uwsgi_params; proxy_pass http://127.0.0.1:8056/api; #此处修改为自己的请求地址 allow all; autoindex_exact_size on; autoindex_localtime on; proxy_buffering off; } # 配置服务代理 end } }
# 3、配置负载 worker_processes 2; events { worker_connections 1024; } stream { # 负载地址 upstream api { server 127.0.0.1:19001 weight=10; server 127.0.0.1:19002 weight=10; server 127.0.0.1:19003 weight=10; server 127.0.0.1:19004 weight=10; } # 朝外提供服务的端口 server { listen 8084; # 监听端口 proxy_connect_timeout 300s; proxy_timeout 700s; proxy_pass api; } }
- nginx 配置location匹配规则实例讲解
- nginx 的 location 匹配规则
- thinkphp的URL路由规则与配置实例
- HttpHandler路由匹配规则
- Nginx的location 的匹配规则
- Nginx关于location 的匹配规则详解,Nginx location 匹配优先级,Nginx的location匹配规则和全局变量
- thinkphp5.0路由匹配规则失效
- URL路由规则实例
- nginx 匹配 规则
- 实例讲解Nginx下的rewrite规则(转)
- nginx的location匹配规则
- nginx的location匹配规则,泣血总结
- Nginx路径匹配规则详解
- nginx location匹配规则
- Nginx 关于 location 的匹配规则详解
- Nginx 路径匹配规则,通配符
- nginx 静态目录配置规则,路径匹配与本地资源
- 关于nginx的location属性的匹配规则
- Nginx的location匹配规则
- nginx loaction url 匹配规则