Nginx Location配置指南

news/2025/2/26 7:33:12

语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static//aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~*  开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
例子,有如下匹配规则:
location = / {
   #规则A
}
location = /login {
   #规则B
}
location ^~ /static/ {
   #规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
   #规则D
}
location ~* \.png$ {
   #规则E
}
location !~ \.xhtml$ {
   #规则F
}
location !~* \.xhtml$ {
   #规则G
}
location / {
   #规则H
}
那么产生的效果如下:
访问根目录/, 比如http://localhost/将匹配规则A
访问 http://localhost/login将匹配规则B,http://localhost/register则匹配规则H
访问 http://localhost/static/a.html将匹配规则C
访问 http://localhost/a.gif,http://localhost/b.jpg将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 http://localhost/static/c.png则优先匹配到规则C
访问 http://localhost/a.PNG则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。
访问 http://localhost/a.xhtml不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。


所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_passhttp://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root/webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root/webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
    proxy_passhttp://tomcat:8080/
}


二: root与alias区别

nginx配置下有两个指定目录的执行,root和alias

复制代码
location /img/ {
    alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
    root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。]
复制代码

alias是一个目录别名的定义,root则是最上层目录的定义。

还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~



三、ReWrite语法
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
1、下面是可以用来判断的表达式:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
2、下面是可以用作判断的全局变量
例:http://localhost:88/test1/test2/test.php
$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:D:\nginx/html
$request_filename:D:\nginx/html/test1/test2/test.php
四、Redirect语法
server {
listen 80;
server_name start.igrow.cn;
index index.html index.php;
root html;
if ($http_host !~ “^star\.igrow\.cn$&quot {
rewrite ^(.*) http://star.igrow.cn$1 redirect;
}
}
五、防盗链
location ~* \.(gif|jpg|swf)$ {
valid_referers none blocked start.igrow.cn sta.igrow.cn;
if ($invalid_referer) {
rewrite ^/ http://$host/logo.png;
}
}
六、根据文件类型设置过期时间
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
expires 1h;
break;
}
}
七、禁止访问某个目录
location ~* \.(txt|doc)${
root /data/www/wwwroot/linuxtone/test;
deny all;
}
一些可用的全局变量:
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri


http://www.niftyadmin.cn/n/4667613.html

相关文章

每天学一点---图形图像GDI编程

首先先了解什么是 GDI 呢?GDI 是从 Windows 95 到 Windows 2000 随附的旧版绘图装置接口 (Graphics Device Interface), 是属于绘图方面的 API (Application Programming Interface)。因为应用程序不能直接控制硬件, 所以当我们要进行绘图的动作时, 必须透过 GDI 才…

关于GDP的经典解释

告诉你什么叫做GDP增长!关于GDP的经典解释。 两个聪明的经济学天才青年,经常为一些高深的经济学理论争辩不休。   一天饭后去散步,为了某个数学模型的证明两位杰出青年又争了起来,正在难分高下的时候,突然发…

MST的prim算法

int prim(int n){int lowcost[maxn]; //记录集合外的点到集合内的距离bool s[maxn]; //记录是否包含在集合中for(int i1;i<n;i){lowcostc[1];sfalse;}s[1]true; //初始化int sum0;for(int i2;i<n;i) //逐个找连接森林的最短边加入{in…

如何让google搜索的时候下雪

【谷歌会下雪】 只要在谷歌中搜“let it snow”你的屏幕就会下雪&#xff0c;下多了出霜还可以用鼠标画着玩&#xff0c;你的屏幕会被“霜冻”&#xff0c;点击屏幕上“除霜”按钮可以完成除霜。(少数浏览器不支持) 下到一定的时候就把屏幕护住了&#xff0c;就需要除霜了&…

Android如何实现边采集边上传--Camera类实现(后续发表MediaRecorder实现)

最近看了Sipdroid和ZXing两个开源代码,对于如何在Andrpid平台上实现边采集边上传的功能有了新的见解,同时也决定重新弄一下以前做的广州亚运排传的项目.先给大家说下软件的功能吧.拿出android手机然后采集实时的图片数据,并对这些采集的图片数据进行H264编码,然后根据协议上传到…

一文读懂分红险、万能险和投连险

一、分设账户的区别 分红险不设单独的投资账户&#xff0c;分红险的保障和分红账户是混合的。 万能险设有保障账户和一个单独的投资账户。 投连险也是保障账户和投资账户分离&#xff0c;并设置有几个不同投资账户&#xff0c;可能享有较高回报的同时也需承担一定的风险&#x…

这些混账的开源库在煞笔Windows系统上的编译方法

这些混账的开源库在煞笔Windows系统上的编译方法 母语不就是用来吐槽的么&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;说母语我不骂人难道还用英语么&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

WindowManager massge和handler

在一个可移动浮动按钮的demo源码学习中&#xff0c;有一些WindowManager的使用&#xff0c;在此做下总结。 1.翻译过来就是窗口管理&#xff0c;是和应用框架层的窗口管理器交互的接口&#xff0c;通过 mWindowManager (WindowManager) mContext.getSystemService(Context.WIN…