nginx学习笔记(4):常用6大指令函数
一.if指令
1.判断变量
变量值是空字符串或者"0"时,判定为false;否则,判定为true
使用 “=” 和 “!=” 操作符判断是否等于字符串
使用 “~” 和 “!~” 操作符判断变量是否匹配正则表达式,后面再加*表示不区分大小写
if ($invalid_referer) {
return 403;
}
if ($request_method = POST) {
return 405;
}
2.判断路径
“-f”, “!-f”:判断指定的路径是否为存在且为文件;
“-d”, “!-d”:判断指定的路径是否为存在且为目录;
“-e”, “!-e”:判断指定的路径是否存在,文件或目录均可;
“-x”, “!-x”:判断指定路径的文件是否存在且可执行;
#判断index.html是否存在
location =/index.html {
if (!-f "$document_root/index.html") {
rewrite ^(.*)$ /index2.html;
}
}
二、rewrite指令
用于重写url
rewrite <regex> <replacement> [flag];
flag(可选):
用于指定重写的标志,影响重写操作的行为。
last:停止当前 location 的匹配过程,重新选择合适的 location。
break:停止当前 location 的匹配过程,并继续执行当前 location 中的其他指令。
redirect:发出一个临时的 302 重定向响应。
permanent:发出一个永久的 301 重定向响应。
三、set指令
用于定义变量
四、map指令
用于变量映射
map <variable> <value> {
<condition> <result>;
...
<default> <result>;
}
- <variable>
:要进行映射的变量名。
- <value>
:要映射到的结果变量名。
- <condition>
:条件,可以使用正则表达式或其他匹配规则。
- <result>
:满足条件时映射的结果值。
- <default>
:没有匹配到条件时的默认结果值。
http {
map $http_user_agent $browser {
default "unknown";
~*(MSIE) "Internet Explorer";
~*(Firefox) "Firefox";
~*(Chrome) "Google Chrome";
~*(Safari) "Safari";
~*(Opera) "Opera";
}
server {
location / {
add_header X-Browser $browser;
# 其他配置...
}
}
}
五、proxy_pass指令
用于代理到指定后端
六、try_files指令
尝试不同的文件或路径
格式1:try_files file ... uri;
格式2:try_files file ... =code;
关键点1:按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理
关键点2:查找路径是按照给定的root或alias为根路径来查找的
关键点3:如果给出的file都没有匹配到,则重新请求最后一个参数给定的uri,就是新的location匹配
关键点4:如果是格式2,如果最后一个参数是 = 404 ,若给出的file都没有匹配到,则最后返回404的响应码
location /images/ {
root /opt/html/;
try_files $uri $uri/ /images/default.gif;
}
#请求 127.0.0.1/images/test.gif
#会依次查找
#1.文件/opt/html/images/test.gif
#2.文件夹 /opt/html/images/test.gif/下的index文件
#3. 请求127.0.0.1/images/default.gif
####注意
#1.try-files 如果不写上 $uri/,当直接访问一个目录路径时,并不会去匹配目录下的索引页
#即 访问127.0.0.1/images/ 不会去访问 127.0.0.1/images/index.html