記事ディレクトリ
1。概要
location
命令はnginx
最も重要な命令の1つです。命令location
の機能は、さまざまなurl
要求を照合し、要求に対して異なる方法で処理および応答することです。理解しにくいのは、複数のlocation
照合シーケンスです。この記事では、説明に焦点を当てます。そして説明。
nginx
リクエストURI
を場所で設定されたURIと一致させます。
2.ロケーションフォーマット
location
2つの形式があります:
- 一致する
uri
パラメータには4つのタイプがあります。もちろん、パラメータを取得することもできません。 - 定義ブロックと同様に、識別されたものを
location
使用した命名。@
goto
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
3.ロケーションマッチングパラメータの説明
パラメータ | 説明 |
---|---|
空気 | location 直後に続くパラメーターはありませんURI 。これは、プレフィックスが一致することを意味しURI ます。つまり、最初から要求に一致することを意味します。 |
〜 | 大文字と小文字を区別して、定期的に一致させます。 |
〜* | 大文字と小文字を区別せずに、定期的に一致させます。 |
^〜 | 一般的な文字照合は、主にディレクトリの照合に使用されます。 |
= | 通常の文字と完全に一致させます。 |
@ | 「@」は名前付きlocation のlocaiton 名前を定義error_page しtry_files ます。@で定義された名前は、通常、コマンドなどの内部方向付けに使用されます。その機能はプログラミングの機能と似ていますgoto 。 |
4.ロケーションマッチングの順序
nginx
リクエストに一致する命令には2つのレベルがありますURI
=>
最初のレベルがあるserver
ことによる命令域名
、ip
および端口
一致が見つかった最初のレベルの試合、やるserver
入力した後に試合を。の照合は、構成ファイルに表示される順序に正確に基づいているわけではありません。要求は、次のルールの構成と照合されます。server
location
location
URI
server
location
- 等
“=”
符号パラメータlocation
に完全に一致するかどうかを探し、等符号に完全に一致する場合は、一致をlocation
停止し、その中のlocation
命令を実行し、他のタイプと一致しないでくださいlocation
。 - 全て非マッチング正規表現
URI
でlocation
(を含む空
、=
、^~
パラメータの三種類)。最長のリクエストURI
を見つけてlocation URI
プレフィックスで照合しますlocation
。最長のlocation
パラメータがの場合は^~
、照合を停止location
してその中の命令を実行しlocation
ます。それ以外の場合は、一時的に保存します。 - 正規表現一致
URI
のlocation
(など~
、~*
によると、2種類のパラメータが)location
、それは最初の一致検出された場合、それらが、コンフィギュレーションファイルマッチングに表示される順序locaiton
一致が、実行を停止しますlocation
。 - 照合後にすべての正規式が照合されない場合
location
、2番目のステップで一時的に保存された最長のプレフィックス照合が実行されlocation
ます。
4.1マッチング順序の調整
このルールに従って簡単に言えば:
=
> ~^
> ~
= ~*
> 最长前缀匹配
>/
5.疑問符の後のパラメーターを一致させます
URI
後者が問題ではないことを要求location
するこれらのパラメータに一致するマークパラメータは$query_string
変数に格納され、if
決定することができます。
たとえば'
、パラメータを一重引用符で照合してから、エラーページにリダイレクトします。
/plus/list.php?tid=19&mid=1124'
if ( $query_string ~* ".*[;'<>].*" ){
return 404;
}
6.ロケーションURIの有無にかかわらず/
これについての多くの説明は正確ではなく、もう少し言葉を言う必要があります。
URI
最後にリクエストがあるかどうかは/
、バンド/
がアクセスディレクトリを/
示し、不在がアクセスファイルを示すという一般的な処理ロジックです。ファイルが存在しない場合は、ディレクトリが照合されます。たとえば、アクセスhttp://www.nginx.cn/images/
とのhttp://www.nginx.cn/images
場合、前のリクエストはディレクトリに一致し、後続のリクエストは最初にファイルに一致し、ファイルが保存されていない場合はディレクトリが一致します
場合で終わり、そして実行することが不可欠である、、、、、1。locatioin
URI
URI
/
location
proxy_pass
fastcgi_pass
uwsgi_pass
scgi_pass
memcached_pass
grpc_pass
例えば:
location /images/ {
proxy_pass http://www.redis.com.cn
}
この場合、指定されたファイルまたはディレクトリが存在するnginx
かどうかに関係なく、特別な処理が行われimages
ます。アクセスすると、そこhttp://www.nginx.cn/images
にリダイレクトされますhttp://www.nginx.cn/images/
。
したがって、これら2つの要求を異なる処理に対応させる場合は/
、を終了せずにlocation
構成を明示的に追加する必要があります。
location /images {
proxy_pass http://www.rabbitmq.cn
}
location /images/ {
proxy_pass http://www.redis.com.cn
}
7.場所に名前を付ける
with"@"
は、リクエストの一致に関係しないlocation
ネーミングを定義するために使用されますlocation
。これlocation
は通常、内部の向きで使用されます。
使用例error_page
でtry_files
は、コマンド。
その機能はプログラミングの機能と似ていますgoto
。
location /images {
try_files $uri $uri/ @name;
}
location @name {
...
}
8.ケース
location = / {
// 只匹配请求 "/"
[ configuration A ]
}
location / {
// 匹配任何请求,因为所有请求都是以"/"开始
// 但是更长字符匹配或者正则表达式匹配会优先匹配
[ configuration B ]
}
location /documents/ {
// 匹配所有 /documents/ 开头的请求,在没有正则表达式匹配时选择该locaiton
[ configuration C ]
}
location ^~ /images/ {
// 匹配任何以 /images/ 开始的请求,并停止匹配其它location
[ configuration D ]
}
location ~* .(gif|jpg|jpeg)$ {
// 匹配以 gif, jpg, or jpeg结尾的请求.
// 但是所有 /images/ 目录的请求将由 [Configuration D]处理.
[ configuration E ]
}
リクエストのURI
例:
/
->一致A
/index.html
->一致B
/documents/a.html
->一致C
/images/1.gif
->一致D
/documents/1.jpg
->一致E
(後で追加されます)