D6-Nginx-Location

简介:

D6-Nginx-Location

 

1 location
语法:location [=|^~|~|~*|@] /uri/ { … }
默认值:no
使用字段:server
这个参数根据URI的不同需求来进行配置,可以使用字符串正则表达式匹配,如果要使用正则表达式,你必须指定下列前缀

    ~* 不区分大小写
    ~ 区分大小写

要确定该指令匹配特定的查询,程序将首先对字符串进行匹配字符串匹配将作为查询的开始,最确切的匹配将被使用然后,正则表达式的匹配查询开始匹配查询的第一个正则表达式找到后会停止搜索如果没有找到正则表达式将使用字符串的搜索结果
在一些操作系统,如Mac OS X和Cygwin,字符串将通过不区分大小写的方式完成匹配(0.7.7),但是,比较仅限于单字节的语言环境。
正则表达式可以包含捕获(0.7.40),并用于其它指令中。
可以使用“^~”标记禁止在字符串匹配后检查正则表达式,如果最确切的匹配location有这个标记,那么正则表达式不会被检查。
使用“=”标记可以在URI和location之间定义精确的匹配,在精确匹配完成后并不进行额外的搜索,例如有请求“/”发生,则可以使用“location = /”来加速这个处理。
即使没有“=”和“^~”标记,精确的匹配location在找到后同样会停止查询
下面是各种查询方式的总结:

1    前缀“=”表示精确匹配查询,如果找到,立即停止查询。
2    指令仍然使用标准字符串,如果匹配使用“^~”前缀,停止查询。
3    正则表达式按照他们在配置文件中定义的顺序。
4    如果第三条产生一个匹配,这个匹配将被使用,否则将使用第二条的匹配。

例:

 
  1. location  = / { 
  2.   # 只匹配 / 的查询. 
  3.   [ configuration A ] 
  4. location  / { 
  5.   # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。 
  6.   [ configuration B ] 
  7. location ^~ /images/ { 
  8.   # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。 
  9.   [ configuration C ] 
  10. location ~* \.(gif|jpg|jpeg)$ { 
  11.   # 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处理。 
  12.   [ configuration D ] 

各请求的处理如下例:

 
  1. / → configuration A 
  2. /documents/document.html → configuration B 
  3. /images/1.gif → configuration C 
  4. /documents/1.jpg → configuration D 


注意你可以以任何顺序定义这4个配置并且匹配结果是相同的,但当使用嵌套的location结构时可能会将配置文件变的复杂并且产生一些比较意外的结果。
标记“@”指定一个命名的location,这种location并不会在正常请求中执行,它们仅使用在内部重定向请求中。(查看error_page和try_files)

2 匹配顺序测试:
nginx 代码

 
  1.  
  2. #匹配正则 
  3.     location ~ /(fashion|life|men)/pic/             
  4.     {   
  5.       rewrite ^/ http://blog.test.com/ permanent; 
  6.     }   
  7.  
  8. #匹配字符串 
  9.     location ^~ /fashion/pic/ 
  10.     {   
  11.       proxy_pass http://blog.test.com/; 
  12.     }    

curl 测试

 
  1. curl -IL http://192.168.57.75/fashion/pic/ 
  2. HTTP/1.1 200 OK 
  3. Server: nginx 
  4. Date: Tue, 14 Aug 2012 07:56:10 GMT 
  5. Content-Type: text/html; charset=UTF-8 
  6. Connection: keep-alive 
  7. Vary: Accept-Encoding 
  8. Vary: Accept-Encoding 
  9. X-Powered-By: PHP/5.3.6 
  10. X-Pingback: http://blog.test.com/xmlrpc.php 
  11.  
  12. curl -IL http://192.168.57.75/life/pic/ 
  13. HTTP/1.1 301 Moved Permanently 
  14. Server: nginx 
  15. Date: Tue, 14 Aug 2012 07:56:15 GMT 
  16. Content-Type: text/html 
  17. Content-Length: 178 
  18. Connection: keep-alive 
  19. Location: http://blog.test.com/ 
  20.  
  21. HTTP/1.1 200 OK 
  22. Server: nginx 
  23. Date: Tue, 14 Aug 2012 07:56:15 GMT 
  24. Content-Type: text/html; charset=UTF-8 
  25. Connection: close 
  26. Vary: Accept-Encoding 
  27. X-Powered-By: PHP/5.3.6 
  28. X-Pingback: http://blog.test.com/xmlrpc.php 


重复一边
1 程序将首先对字符串进行匹配,字符串匹配将作为查询的开始,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配查询的第一个正则表达式找到后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果。
以任何顺序定义这几个配置(location)并且匹配结果是相同的


3 常用的location

 
  1. //php    
  2.     location ~ .*\.(php|php5)?$ 
  3.     { 
  4.       fastcgi_pass 127.0.0.1:9000; 
  5.       fastcgi_index index.php; 
  6.       fastcgi_param SCRIPT_FILENAME /var/www/html/bbs$fastcgi_script_name; 
  7.       include fastcgi_params; 
  8.     } 
  9.  
  10.  
  11. //expires   
  12.     location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ 
  13.     { 
  14.       expires      300d; 
  15.     } 
  16.  
  17.    location ~ \.(js|css|htm|html|shtml)$ 
  18.    { 
  19.       expires      60m; 
  20.    } 
  21.  
  22.  
  23. //proxy 
  24.  
  25.    location / 
  26.    { 
  27.      proxy_pass http://www.test.com/picture/; 
  28.      #proxy_set_header Host $host; 
  29.      proxy_set_header X-Forward-For $remote_addr; 
  30.    } 
  31.  
  32.    location  /message/ 
  33.    { 
  34.      roxy_pass http://www.test.com/message/; 
  35.      proxy_set_header Host $host; 
  36.    } 
  37.  
  38.    location ^~ /fashion/picture/ 
  39.    { 
  40.      roxy_pass http://www.test.com/picture/; 
  41.    } 
  42.  
  43.    location ^~ /life/picture/ 
  44.    { 
  45.      proxy_pass http://pic.test.com/; 
  46.    } 
  47.  
  48.    location ^~ /men/picture/ 
  49.    { 
  50.      proxy_pass http://pic.test.com/; 
  51.    } 



参考


结束
更多请:
linux 相关 37275208
vmware 虚拟化相关  166682360


本文转自 dongnan 51CTO博客,原文链接:http://blog.51cto.com/dngood/981447


相关文章
|
21天前
|
开发框架 .NET 应用服务中间件
LNMP详解(六)——Nginx location语法详解
LNMP详解(六)——Nginx location语法详解
16 1
|
8月前
|
应用服务中间件 nginx
nginx--location
nginx--location
|
8月前
|
应用服务中间件 nginx
nginx: [emerg] duplicate location “/“ in /usr/local/etc/nginx/nginx.conf:142
nginx: [emerg] duplicate location “/“ in /usr/local/etc/nginx/nginx.conf:142
171 0
|
9月前
|
应用服务中间件 nginx
Nginx专题:location
Nginx专题:location
69 0
|
应用服务中间件 nginx
【Nginx】第四节 nginx.conf配置文件解读即location详解(1)
【Nginx】第四节 nginx.conf配置文件解读即location详解
342 0
|
前端开发 JavaScript Java
【Nginx】第四节 nginx.conf配置文件解读即location详解(2)
【Nginx】第四节 nginx.conf配置文件解读即location详解
312 0
|
缓存 前端开发 JavaScript
nginx的location与rewrite
需要注意的是在location的 / 这个是重点,一定要清楚的知道root表示指明路径为对应的location “/” URL。以右侧/而言;而alias相对于左侧/而言。而且还要明白匹配时的有限顺序,当location匹配到之后就不会看下面的location的。而在 rewrite规则当中,需要明白的时只有规则完成,跳出循环,而其它三种时不可以的,其他三种还是会网下去匹配的。
362 0
nginx的location与rewrite
|
应用服务中间件 nginx
解决 openresty Nginx 重启报错问题 nginx: [error] open() “/usr/local/openresty/nginx/logs/nginx.pid“ fa
解决 openresty Nginx 重启报错问题 nginx: [error] open() “/usr/local/openresty/nginx/logs/nginx.pid“ fa
747 0
解决 openresty Nginx 重启报错问题 nginx: [error] open() “/usr/local/openresty/nginx/logs/nginx.pid“ fa
|
应用服务中间件 nginx
解决 openresty Nginx 重启报错问题 nginx: [error] open() “/usr/local/openresty/nginx/logs/nginx.pid“ fa
解决 openresty Nginx 重启报错问题 nginx: [error] open() “/usr/local/openresty/nginx/logs/nginx.pid“ fa
459 0
解决 openresty Nginx 重启报错问题 nginx: [error] open() “/usr/local/openresty/nginx/logs/nginx.pid“ fa
|
前端开发 应用服务中间件 nginx