首页 > 清河洛 > nginx中的error_page指令和location区段
2019
07-08

nginx中的error_page指令和location区段

error_page指令

error_page指令的作用是当发生错误的时候能够显示一个预定义的uri的内容

error_page 502 503 /50x.html;

当访问出现502、503的时候就能返回50x.html中的内容。

我们也可以自己定义返回状态码

error_page 502 503 =200 /50x.html;

这样用户访问产生502 、503的时候给用户的返回状态是200,内容是50x.html。

如果error_page指定的是一个动态脚本,该脚本返回的状态也能返回给用户

使用代理等复杂操作可以自定义一个location

error_page 502 503 @fetch;
location @fetch{
    ......
}

可以使用变量设置如:

error_page 404 502 /error.php?$status;

在error.php中使用$_SERVER["QUERY_STRING"]获取状态码进而动态返回内容

location区段

location区段指令为匹配指定规则的请求uri(不包含查询字符串)单独配置配置项

location [= | ~ | ~* | ^~ | @] /uri/ {
    configuration
}
    =表示精确匹配,只有完全匹配才能生效。
    ^~表示普通字符串匹配上以后不再进行正则匹配。
    ~表示区分大小写的正则匹配。
    ~*表示不区分大小写的正则匹配。
    不带任何修饰符,表示前缀匹配。
    location / 通用匹配,匹配任何未匹配到其他location的请求。
    @表示一个自定义的location,这些区段客户段不能访问,只可以由内部产生的请求来访问

location匹配的优先级(与location在配置文件中的顺序无关)

=精确匹配会第一个被处理。匹配后nginx停止搜索其他location指令

^~只匹配该规则,匹配后nginx停止搜索其他location指令

所有剩下的普通字符匹配,正则表达式匹配按定义的顺序最长的匹配(后面更长的匹配会覆盖前面较短的匹配)

location指令中常用配置指令alias、root、proxy_pass

alias别名配置:将location匹配到的URL路径指向alias指定的路径:

location /test/ {
    alias /usr/local/;
    #指定的路径如果是目录结尾一定要含有反斜杠
}

请求/test/1.jpg,会返回文件/usr/local/1.jpg。

在正则匹配的location内如果含捕获语句,alias配置中也要引用这些捕获值:

location ~* /img/(.+\.(gif|png|jpeg)) {
    alias /usr/local/images/$1;
}

请求中只要能匹配到正则,如/img/flower.png或者/resource/img/flower.png,都会转换为请求/usr/local/images/flower.png。

root根路径配置:将location匹配到的URL路径的根目录指向root配置的路径如:

location /test/ {
    root /usr/local/;
}

请求/test/1.jpg,将会返回文件/usr/local/test/1.jpg。

proxy_pass反向代理配置:将location匹配到的URL路径的请求转发到proxy_pass配置的URL,是否会附加location配置路径与proxy_pass配置的路径后是否有"/"有关,有"/"则不附加,如:

location   /test/  {
        proxy_pass    http://127.0.0.1:8080/;
}

请求/test/1.jpg,将会被nginx转发请求到http://127.0.0.1:8080/1.jpg(未附加/test/路径)

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。