Nginx 7年前

Nginx 路由匹配

作者头像 刘宇帅
5289 0
模式 含义
location = /uri = 表示精确匹配只有完全相等才会匹配成功
location ^~ /uri ^~ 表示对路由进行前缀匹配
location ~ /uri ~ 表示对路由进行正则匹配
location ~* /uri ~* 表示对路由进行不区分大小写的正则匹配
location /uri 不带任何修饰符也表示前缀匹配
location / 默认匹配,任何没有匹配到的uri

多个 location 配置的情况下匹配顺序为(匹配到某一等级就结束,同一规则时匹配长度长的优先):

  1. 首先精确匹配 =
  2. 其次前缀匹配 ^~
  3. 其次是按文件中顺序的正则匹配
  4. 然后匹配不带任何修饰的前缀匹配。
  5. 最后是交给 / 通用匹配
  6. 当有匹配成功时候,停止匹配,按当前匹配规则处理请求

例子:

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及nginx结果:

  1. 访问根目录 /,比如 http://localhost/ 将匹配 规则A
  2. 访问 http://localhost/login 将匹配 规则B,http://localhost/register 则匹配 规则F
  3. 访问 http://localhost/static/a.html 将匹配 规则C
  4. 访问 http://localhost/static/files/a.exe 将匹配 规则X,虽然 规则C 也能匹配到,但因为最大匹配原则,最中选中了 规则X。你可以测试下,去掉规则 X ,则当前 URL 会匹配上 规则C。
  5. 访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配 规则D 和 规则 E ,但是 规则 D 顺序优先,规则 E 不起作用,而 http://localhost/static/c.png 则优先匹配到 规则 C
  6. 访问 http://localhost/a.PNG 则匹配 规则 E ,而不会匹配 规则 D ,因为 规则 E 不区分大小写。
  7. 访问 http://localhost/img/a.gif 会匹配上 规则D,虽然 规则Y 也可以匹配上,但是因为正则匹配优先,而忽略了 规则Y。
  8. 访问 http://localhost/img/a.tiff 会匹配上 规则Y。
作者头像

刘宇帅

非著名程序员,全栈开发工程师,长期专注系统开发与架构设计。

提示

功能待开通!


暂无评论~

相关文章

浏览器报错 net::ERR_INCOMPLETE_CHUNKED_ENCODING

nginx服务器返回200但是浏览器报错 net::ERR_INCOMPLETE_CHUNKED_ENCODING 原因是nginx在获得后端服务器返回数据时,数据过大需要存在临时文件中,但是当前运行nginx用户,没有该文件的读写权限 导致的。 如何证实 可以查看nginx的日志,会有以下类似错误 2018/03/22 16:11:35 [crit] 9519#0: *339625 open() "/var/lib/nginx/tmp/fastcgi/5/02/0000000025" failed 很明显,nginx无法写/var/lib/nginx/tmp/fastcgi/5/02/000

Nginx日志配置推荐

推荐日志配置 log_format main 'remote_addr=[$remote_addr] http_x_forward=[$http_x_forwarded_for] time=[$time_local] request=[$request] ' 'status=[$status] byte=[$bytes_sent] elapsed=[$request_time] upstream_connect_time=[$upstream_connect_time] upstream_response_time=[$upstream_response_time] '

Nginx 反向代理常见问题汇总与解决方案

在使用 Nginx 做反向代理时,经常会遇到一些看似莫名其妙的问题,比如返回 502 错误、路径出错、真实 IP 丢失等等。本文总结了开发和部署中最常见的 Nginx 反向代理问题,并给出对应的排查和解决方案,帮助你快速定位和修复问题。 目录 一、502 Bad Gateway 二、路径拼接异常 三、获取不到真实客户端-IP 四、跨域请求失败 五、WebSocket 无法正常工作 六、请求体过大导致-413-错误 七、反向代理跳转失效 八、HTTPS-代理配置问题 九、文件下载异常或中断 十、缓存未生效或生效异常 总结 一、502 Bad Gateway 这个错误意味着 Nginx 无法成

Nginx 四层最佳配置

stream { log_format proxy 'time=[$time_local] remote_addr=[$remote_addr]' ' protocol=[$protocol] status=[$status] byte_send=[$bytes_sent] byte_received=[$bytes_received] ' 'session_time=[$session_time] upstream_addr=[$upstream_addr] ' 'upstream_

nginx ssl_certificate is defined in server

问题 nginx 启动后 error 日志里报错,并且 https 无法访问,报错如下 "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 100.120.198.130, server: 0.0.0.0:443 我们需要修改下 nginx conf 配置,在 listen 443 中添加 default_server server { listen 443 ssl; # 报错配置 listen 443 default_server ssl; #