碑文
いくつかの時間を投げ、いくつかのバグを遮るnginxの場所の割り当てでプレーする前。その後、インターネットは少し混乱探して、関連情報へのアクセスを持っています。自分の手で、この週末の良いきちんと設定位置モジュールの思考実験を解放、コンフィギュレーションの場所モジュールをまとめました。
位置モジュール構成
整合特性は、おおよそ以下のセクション(優先順)に分けることができます
最も高い優先度(=)は、第2の優先順位(^〜)第三の優先度(一致シーケンスに従って〜、〜*)第四の優先(/)
1.試合が停止されます
=:完全に一致することを示し、または最後の試合、またはマッチされることはありません。マッチがオンになっている場合は、そのブロックは場所へのアクセスを、他の人が表示されません。
^〜:一致によって優先順位の試合は、URLに上から順に下には、^〜後で、それはブロックの場所に移行した場合、他のは見ていません。
2.注文のマッチング
〜:URLの上から下への順序に従ってマッチングあれば、通常の大文字と小文字を区別一致を示し、そしてそれは、すなわち、このブロックの場所の用途を探索していきません。
〜*:上からURLの下に順序に従って一致する場合は、大文字と小文字を区別しない正規の一致を示し、それはそのブロックのために、この場所の使用を見ていきません。
3.一般的な試合
/:すべての要求が一致した表現。
位置を用いた例
# 输入http://ip+port/images/1.p
# 此时显示的是'= /images/1.p',因为=匹配优先级最高
location = /images/1.p {
default_type 'text/plain';
echo '= /images/1.p';
}
location ^~ /images/1.p {
default_type 'text/plain';
echo ' /images/1.p';
}
# 输入http://ip+port/images/1.p
# 此时显示到的是'^~ /images/1.p',因为^~只要匹配到了就会停止匹配,哪怕后续的长度更长
location ^~ /images/ {
default_type 'text/plain';
echo '^~ /images/1.p';
}
location ~ /images/1.p {
default_type 'text/plain';
echo '~ /images/1.p';
}
# 输入http://ip+port/images/1.pxyzxyz
# 此时显示到的是'~ /images/',因为这是按照顺序匹配的,匹配到了后面的就不再匹配了
location ~ /images/ {
default_type 'text/plain';
echo '~ /images/';
}
location ~ /images/1 {
default_type 'text/plain';
echo '~ /images/1';
}
# 输入http://ip+port/images/ 显示'/',因为没有匹配到后面的URL,使用默认的/规则
# 输入http://ip+port/images/1xyzxyz 显示'~ /images/1',因为匹配到了后面的正则
location / {
default_type 'text/plain';
echo '/';
}
location ~ /images/1 {
default_type 'text/plain';
echo '~ /images/1';
}
# 输入http://ip+port/images/ 显示'/images/'
# 输入http://ip+port/images/1/ab 显示'/images/'
# 输入http://ip+port/images/1/abc 显示'/images/1/abc' 匹配上第一个location后,会继续向下匹配寻找,如果有更加完整的匹配,则会有下面的。如果没有,则使用当前的。
location /images/ {
default_type 'text/plain';
echo '/images/';
}
location /images/1/abc {
default_type 'text/plain';
echo '/images/1/abc';
}
注意事項
# 在使用“=”的时候会有意外情况,比方说下面这个例子。当输入'http://ip+port/'时,发现返回的状态码是304&404
# 原因在于Nginx发现请求的是个目录时,会重定向去请求'http://ip+port/index.html',此时返回码是304
# 而后Nginx收到了'http://ip+port/index.html'这个请求,发现没有location能够匹配,就返回404了
location = / {
default_type 'text/plain';
index index.html index.htm;
root /web/;
}