Nginx Location 配置说明

3 篇文章 0 订阅
本文介绍了Nginxlocation块的配置语法,包括五种修饰符的用法,如=、^~、~和~*。解释了location修饰符的匹配优先级,并通过实例展示了它们如何影响请求处理。同时,文章还探讨了root和alias指令的区别,以及在实际应用中的配置案例,如重定向、静态文件缓存和防止盗链等安全措施。
摘要由CSDN通过智能技术生成

location语法

Nginx location块 可以放置在server块内或另一个 location块内,语法为:

location [modifier] [URI] {
  ...
  ...
}



五种修饰符

location块中的修饰符modifier是可选的,修饰符有:

  • none:如果location块中不存在修饰符,则与请求URI的开头匹配。
  • =:用于将location块与请求的URI完全匹配。
  • ~:用于区分大小写的正则表达式与请求的 URI 匹配。
  • ~*:用于与请求的 URI 进行不区分大小写的正则表达式匹配。
  • ^~:用于对请求的 URI 执行最长的非正则表达式匹配。如果请求的 URI 命中此location块,则不会发生进一步的匹配。

优先级别如下

优先级修饰符支持正则匹配模式同级存在多个匹配
1=完全匹配报重复冲突
2^~前缀匹配匹配前缀最长的一个,如果完全相同则报重复冲突
3~~*通配符匹配匹配第一个
4none前缀匹配匹配前缀最长的一个,如果完全相同则报重复冲突

实例说明

参考nginx官方文档的一个例子

	location = / {
		#[ configuration A ]
		return 200 "configuration A";	    
	}

	location / {
		#[ configuration B ]
		return 200 "configuration B";
	}

	location /documents/ {
		#[ configuration C ]
		return 200 "configuration C";
	}

	location ^~ /images/ {
		#[ configuration D ]
		return 200 "configuration D";
	}


	location ~* \.(gif|jpg|jpeg)$ {
		#[ configuration E ]
		return 200 "configuration E";
	}

请求 / 返回configuration A
请求 /index.html 返回configuration B
请求 /documents/document.html 返回configuration C
请求/images/1.gif 返回configuration D
请求/documents/1.jpg 返回configuration E



容易误解的地方

很多人对 ^~~^ 分不清。
其实location修饰符只有^~ ,并没有 ~^
~^ 实际是 修饰符~后面加^开头的正则表达式:
例如 location ~ ^/id/\d+ 匹配 /id/123 的请求
因为nginx配置文件对间隔符的兼容忽略,写成location ~^/id/\d+ 也同样有效。
为了配置的可读性,建议 ~ ^ 不要写成~^



root和alias的区别

注意location中root和alias的区别

当设置 root 的时候:

location /i/ {
    root /data/w3;
}

请求 /i/top.gif 将访问 /data/w3/i/top.gif



当设置 alias 的时候:

location /i/ {
    alias /data/w3/images/;
}

请求 /i/top.gif 将访问 /data/w3/images/top.gif



应用案例

把前端页面/tags/* 路径误写成/tag/* 进行纠正

location ~ ^/tag/(.+) {
	if ($query_string) {
		return 301 /tags/$1?$query_string;
	}
	return 301 /tags/$1;
}

把首页http请求重定向为https请求

location = / {
	if ($scheme != "https") {
	 	return 302 https://$host$request_uri;
	}
}

静态文件设置长远时间过期,这样就会在浏览器中缓存更长时间

# Set expires to year on static file types
location ~* ^.+\.(css|js|jpg|jpeg|gif|webp|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|mp4)$ {
  expires 365d;
  access_log off;
}

access日志中不记录favicon图标请求日志

location ~ (?:apple-touch-.*|favicon.*)\.(?:png|ico) {
  log_not_found off;
  access_log off;
}

防止外站盗链图片

location ~ .(png|gif|jpe?g)$ {
    valid_referers none blocked yourwebsite.com *.yourwebsite.com;
    if ($invalid_referer) {
        return   403;
    }
}

防止可写目录中的脚本访问

location ~* /(media|images|cache|tmp|logs)/.*.(php|jsp|pl|py|asp|cgi|sh)$ {
    return 403;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值