NGINX中一些命令。

背景:由于最近在为一个游戏后台配置web后台,symfony写的,要求是要作为subdirectory。来配置,跟以往不同 所以记录一下。顺便 好好掌握一下Nginx中的一些命令

location 命令

= /pattern 精确度最高 等于某个字符​(

pattern 被限制成简单的字符串,也就是说这里不能使用正则表达式。​

阻止继续搜索正则location

​)

匹配情况:    http://website.com/abcd        # 正好完全匹配    http://website.com/ABCD        # 如果运行 Nginx server 的系统本身对大小写不敏感,比如 Windows ,那么也匹配

http://website.com/abcd?param1&param2    # 忽略查询串参数(query string arguments),这里就是 /abcd 后面的 ?param1&param2

http://website.com/abcd/    # 不匹配,因为末尾存在反斜杠(trailing slash),Nginx 不认为这种情况是完全匹配

http://website.com/abcde    # 不匹配,因为不是完全匹配​

~ 正则表达式 区分大小写匹配

~* 不区分大小写匹配

@ 声明一个location 主要用来内部重定向

^~ 如果这个正则匹配到了​字符,后面的正则匹配都不会再去匹配了。(

匹配到了“普通location ”后,不再需要继续匹配“正则location ”了,要做到这一        点只要在“普通location ”前面加上“^~ ”符号(^ 表示“非”,~ 表示“正               则”,字符意思是:不要继续匹配正则)。

​)

对于一个特定的 HTTP 请求( a particular query ), nginx 应该匹配哪个 location 块的指令呢(注意:我们在 nginx.conf 配置文件里面一般会定义多个 location 的)?匹配 规则是:先匹配普通location (再匹配正则表达式)

例如:

location = /index.php{

//在访问index.php的时候才会触发这里面的内容​

}​

​location ~ index.php{

//

}

@符号

error_page 404 = @fallback;

 

location @fallback {

proxy_pass http://www.baidu.com;

}

​2、文件及目录匹配

-f和!-f用来判断是否存在文件

-d和!-d用来判断是否存在目录

-e和!-e用来判断是否存在文件或目录

-x和!-x用来判断文件是否可执行

3 rewrite 重写

rewrite $uri (.*)$ index.php/$1 (break|last|redirect|permanent)​

. rewrite break - url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变 2. rewrite last - url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变 3. rewrite redirect – 返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时) 4. rewrite permanent – 返回301永久重定向, 地址栏显示重定向后的url,爬虫更新url​

使用last会对server标签重新发起请求

如果location中rewrite后是对静态资源的请求,不需要再进行其他匹配,一般要使用break或不写,直接使用当前location中的数据源,完成本次请求 如果location中rewrite后,还需要进行其他处理,如动态fastcgi请求(.php,.jsp)等,要用last继续发起新的请求 (根的location使用last比较好, 因为如果有.php等fastcgi请求还要继续处理)

使用alias指定源:必须使用last

if语句主要用来判断一些在rewrite语句中无法直接匹配的条件,比如检测文件存在与否,http header,cookie等

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注