使用Nginx Location可以控制访问网站的路径,但一个server可以有多个location配置,多个location的优先级又该如何区分,本篇文章就给大家介绍下。
Location语法优先级
匹配符 | 匹配规则 | 优先级 |
= | 精准匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
/ | 通用匹配,任何请求都会匹配到 | 5 |
配置网站验证优先级
1. [root@Web01 ~]# cat /etc/nginx/conf.d/test.conf 2. server { 3. listen 80; 4. server_name test.koten.com; 5. 6. location = / { 7. default_type text/html; 8. return 200 "location = /"; 9. } 10. 11. location ^~ / { 12. default_type text/html; 13. return 200 "location ^~ /"; 14. } 15. 16. location ~ / { 17. default_type text/html; 18. return 200 "location ~ /"; 19. } 20. 21. location ~* / { 22. default_type text/html; 23. return 200 "location ~* /"; 24. } 25. 26. }
测试Location效果
精准匹配优先级最高
注释掉=,加上/
注释掉^~
注释掉~/
注释掉~*/,只剩/,/优先级最低
Location应用场景
1. # 通用匹配,任何请求都会匹配到 2. location / { 3. ... 4. } 5. 6. # 严格区分大小写,匹配以.php结尾的都走这个location 7. location ~ \.php$ { 8. ... 9. } 10. 11. # 严格区分大小写,匹配以.jsp结尾的都走这个location 12. location ~ \.jsp$ { 13. ... 14. } 15. 16. # 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条location 17. location ~* .*\.(jpg|gif|png|js|css)$ { 18. ... 19. } 20. 21. location ~* \.(jpg|gif|png|js|css)$ { 22. ... 23. } 24. 25. # 不区分大小写匹配 26. location ~* "\.(sql|bak|tgz|tar.gz|.git)$" { 27. ... 28. }