这是 Nginx 学习总结的第三篇,上一篇介绍到了 Nginx 学习总结(2) —— 基本配置,这一篇会对Location 模块
作一些总结。咱们知道,Location 模块
主要是用于针对某些特定的 URL 进行配置,能够由前缀字符串定义,也能够由正则表达式定义。php
location = /test.png { # 精确匹配 [ configuration A ] } location / { # 通用匹配,可是正则表达式和最长字符串会优先被匹配 [ configuration B ] } location /documents/ { # 前缀字符串匹配 # 匹配任何以 /documents/ 开头的请求 # 只有后面的正则表达式没有匹配到时,该配置才会被采用 [ configuration C ] } location ^~ /images/ { # 前缀字符串匹配 # 匹配任何以 /images/ 开头的请求,匹配成功之后,会中止搜索后面的正则表达式匹配 [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { # 正则表达式匹配,匹配全部以 gif,jpg,jpeg 结尾的请求 # 然而,全部请求 /images/ 下的图片会被 configuration D 处理,由于 ^~ 指令,匹配不到这一条规则 [ configuration E ] } location /images/abc/ { # 前缀字符串匹配 # 只有去掉 configuration D 才能被匹配到 [ configuration F ] }
=
精确匹配; ^~
提升前缀字符串的匹配优先级; ~
区分大小写的正则表达式匹配;~*
不区分大小写的正则表达式匹配;/
通用匹配(由于全部的地址都以 / 开头,因此这条规则将匹配到全部请求),若是没有其它匹配,任何请求都会匹配到。默认状况, Nginx 先进行前缀字符串匹配,而后进行正则表达式匹配:若是前缀字符串匹配到了,而且前缀字符串有^~
,就不继续往下匹配正则表达式;若是没有这个^~
,即便前缀匹配到了,也要进行正则表则式匹配,若是正则表达式匹配到了,就是用正则表达式的,没有就是用前缀字符串匹配到的路径。总结以下:css
匹配优先级:精确匹配 >(^~) > 正则匹配 > 字符串(长 > 短)
# 第一个必选规则 # 直接匹配网站根目录,经过域名访问网站首页比较频繁,使用这个会加速处理,好比官网首页 location = / { root /usr/share/nginx/html; index index.php index.html index.htm; } # 第二个必选规则 # 处理静态文件请求,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { expires 7d; # 用来设置 HTTP 应答中的 Expires 和 Cache-Control 的头标时间,来告诉浏览器访问这个静态文件时,不用再去请求服务器,直接从本地缓存读取就能够了 } location ^~ /public/ { root /usr/share/nginx/html/laravel/public; expires 7d; } # 第三个必选规则 # 用来转发动态请求到后端应用服务器 location / { root /usr/share/nginx/html; index index.php index.html index.htm; }
有时,须要将原来的 URL 请求跳转到新的 URL 连接,但又不想使原来的 URL 失效,好比访问 http://jochen.com/test
时,须要跳转到 http://jochen.com/
,此时能够配置一个跳转:html
location = /test/ { return 302 http://jochen.com/; }
有时,咱们须要对访问作一些限制。好比,Nginx 的 ngx_http_stub_status_module
模块(该模块不是默认安装的,可使用 --with-http_stub_status_module
编译安装)提供了查看 Nginx 运行的基本状态信息,咱们只想让部分 IP 的人能够查看,此时能够配置一个访问控制:前端
location /nginx-status { # 在1.7.5版本以前,使用 stub_status on; 指令 stub_status; allow 127.0.0.1; allow 192.168.4.220; deny all; }
Nginx 默认是不容许列出整个目录的。如需此功能,咱们能够经过一下配置开启:nginx
location / { root /usr/share/nginx/html; autoindex on; # 开启目录自动索引 autoindex_exact_size off; # 默认为on,显示出文件的确切大小,单位是bytes。改成off后,显示出文件的大概大小,单位是kB或者MB或者GB autoindex_localtime on; # 默认为off,显示的文件时间为GMT时间。改成on后,显示的文件时间为文件的服务器时间 }
参考文章laravel