nginxの場所の設定
リリース: 2016-08-08 09:27:16
文法規則: location [=|~|~*|^~] /uri/ { … }
= で始まるは完全一致を意味します
^~ あるもので始まる通常の文字列から始まると、URL パスと一致すると理解できます。 nginx は URL をエンコードしないので、リクエストは /static/20%/aa となり、これはルール ^~ によって制御できます。
/static/ /aa は一致します (スペースに注意してください)。
~ の先頭は大文字と小文字を区別する正規一致を意味します
~* の先頭は大文字と小文字を区別しない正規一致を意味します
!~ と !~* はそれぞれ大文字と小文字を区別します は と一致せず、大文字と小文字を区別しない は の通常の
/ ユニバーサル マッチングと一致せず、あらゆるリクエストが一致します。
複数のロケーション構成の場合、一致する順序は次のとおりです (参考資料から取得していますが、まだ検証されていません。試してみればわかります。厳密に考えないでください。参考までに)
最初match =、次に match^ ~、ファイル内の順序で通常のマッチングが続き、最後に / ユニバーサル マッチングです。照合が成功すると、照合は停止され、現在の照合ルールに従ってリクエストが処理されます。 例として、次のような一致ルールがあります: location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#规则E
}
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
location / {
#规则H
}
ログイン後にコピー
その結果は次のようになります:
ルートディレクトリ/にアクセスします。たとえば、http://localhost/ はルールに一致します。 A
http://localhost/login はルール B に一致し、http://localhost/register は http://localhost/static/a.html にアクセスしたときにルール H
に一致し、ルール C に一致します。
http://localhost/a.gif にアクセスすると、http://localhost/b.jpg はルール D とルール E に一致しますが、ルール D が優先され、ルール E は効果がありません。一方、http:// localhost/static/c.png ルール C が最初に一致します
http://localhost/a.PNG にアクセスすると、ルール E は一致しますが、ルール E は大文字と小文字を区別しないため、ルール D は一致しません。
http://localhost/a.xhtml にアクセスすると、ルール F およびルール G に一致しません。 http://localhost/a.XHTML は、大文字と小文字が区別されないため、ルール G に一致しません。ルール F とルール G は消去法に属し、マッチングルールには適合するがマッチングされないため、実際のアプリケーションで使用する場所を検討してください。
http://localhost/category/id/1111 にアクセスして、最後にルール H に一致します。上記のルールのいずれも一致しないため、nginx はこの時点でリクエストを FastCGI などのバックエンド アプリケーション サーバーに転送する必要があります ( php)、tomcat(jsp)、nginxがディレクションプロキシサーバーとして存在します。
したがって、実際の使用では、次のような一致するルール定義が少なくとも 3 つあると個人的に感じています: #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
proxy_pass http://tomcat:8080/
}
ログイン後にコピー
テストされていないその他の情報:
3. ReWrite構文
last – 基本的にすべてがこのフラグを使用します。
break - Rewirte を中止し、マッチングを継続しません
redirect - 一時的なリダイレクトの HTTP ステータス 302 を返します
permanent - 永続的なリダイレクトの HTTP ステータス 301 を返します
注: last と Break の最大の違いは
- Break は、現在の位置の書き換え検出を終了し、位置マッチングを実行しません。 - last は、現在の位置の書き換え検出を終了しますが、位置マッチングを再試行し、ブロック
1 を判定するために使用できる式は次のとおりです:
-f と !-f はファイルが存在するかどうかを判定するために使用されます
-d と !-d はディレクトリが存在するかどうかを判定するために使用されます
-e と ! -e は、ファイルまたはディレクトリが存在するかどうかを判断するために使用されます
-x および !-x は、ファイルが実行可能かどうかを判断するために使用されます。 2. 以下は、判定に使用できるグローバル変数です。 $args #この変数は等しいです。リクエストラインのパラメータに追加します。
$content_length #
リクエストヘッダーのコンテンツ長フィールド。 $content_type #
リクエストヘッダーのContent-Typeフィールド。 $document_root #
現在のリクエストは、root ディレクティブで指定された値です。 $host #
Request host ヘッダー フィールド。それ以外の場合はサーバー名です。 $http_user_agent #
クライアントエージェント情報$http_cookie #
クライアントCookie情報$limit_rate #
この変数は接続速度を制限できます。 $request_body_file #
クライアントリクエストボディ情報の一時ファイル名。 $request_method #
クライアントによって要求されたアクション。通常は GET または POST。 $remote_addr #
クライアントのIPアドレス。 $remote_port #
クライアントのポート。 $remote_user #
認証基本モジュールによって検証されたユーザー名。 $request_filename #
ルートまたはエイリアス ディレクティブと URI リクエストによって生成された、現在のリクエストのファイル パス。 $query_string #
$args と同じ。 $scheme #HTTP
メソッド (http、https など)。 $server_protocol #
リクエストで使用されるプロトコル。通常は HTTP/1.0 または HTTP/1.1。 $server_addr #
サーバーアドレス、この値はシステムコールの完了後に決定できます。 $server_name #
サーバー名。 $server_port #
リクエストがサーバーに到達するポート番号。 $request_uri #
「/foo/bar.php?arg=baz」など、ホスト名を除いたリクエストパラメータの元のURIが含まれます。 $uri #
リクエストパラメータを含まない現在のURI、$uriには「/foo/bar.html」などのホスト名が含まれません。 $document_uri #
は$uriと同じです。 例: http://localhost:88/test1/test2/test.php
$host:localhost$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:D:nginx/html
$request_filename:D:nginx/html/test1/test2/test.php
4. リダイレクト構文
複数のディレクトリをパラメータに変換します
abc.domian.com/sort/2 =>
($host ~* (.*).domain.com) {
2. セット
$sub_name $1;
3. 書き換え
^/sort/(d+)/?$ /index.php?act=sort&cid = $ $$1 last;
^/(d+)/(.+)/ /$2?id=$1 last;
たとえば、次の設定 nginx は、ユーザーが ie を使用するときに /nginx-ie ディレクトリにリダイレクトします: 1。
場合
($http_user_agent ~ MSIE) {
2.
書き換え
^(.*)$ /nginx-ie/$1 Break;
3.
}
ディレクトリは自動的に「/」を追加します
1.
if
(-d $request_filename){
2.
書き換え
^/(.*)([^/])$ http://$host/$1$2/ Permanent;
3.
}
htアクセス禁止
1.
場所
~/.ht {
2.
すべて拒否します;
3.
}
複数のディレクトリを禁止する
1.
場所
~ ^/(cron|テンプレート)/ {2.
すべて拒否;
3.休憩;
4.
}
/data で始まるファイルを禁止する
/data/ の下の複数レベルのディレクトリ内の .log.txt およびその他のリクエストを禁止できます。1. 場所
~ ^/データ {
2.
全てを否定します;
3.
}
単一のディレクトリをブロックします
.log.txt リクエストを禁止することはできません
1. 場所
/searchword/cron/ {2.
すべて拒否します;3.
}単一のファイルをブロック
1. 場所
~ /data/sql/data.sql {
2.
すべて拒否します;
3.
}
favicon.ico と robots.txt の有効期限を設定します ここでは、favicon.ico は 99 日、robots.txt は 7 日で、404 エラー ログは記録されません
1.
場所
~(favicon.ico) {
2.
Log_not_found オフ;
3.
有効期限が切れます
99d;
4.
休憩;
5.
}
6.
7.
場所 ~(robots.txt) {8.
Log_not_found オフ;
9.
有効期限が切れます
7d;
場所
^~ /html/scripts/loadhead_1.js {
2.
access_log off;
3.
root /opt/lampp/htdocs/web;
600;
5.休憩;
6.
}
ファイルのアンチホットリンクと有効期限の設定ここで返される 412 はカスタム http ステータス コードで、デフォルトは 403 で、正しいホットリンク リクエストを見つけるのに便利です"rewrite ^/ http://leech. c1gstudio.com/leech.gif;"ホットリンク対策画像を表示します"access_log off;"アクセス ログを記録しないでストレスを軽減します
"3D 期限切れ" すべてのファイルのブラウザ キャッシュは 3 日間
1.
場所
~* ^.+.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
2. valid_referers
ブロックされているものはありません *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;
3. if
($invalid_referer) {
4.
書き換えます ^/ http://leech.c1gstudio.com/leech.gif;
5.
リターン 412;6.
休憩;7.
access_log off;
9.
root/opt/lampp/htdocs/web;
/opt/htdocs/www;
2.
許可
208.97.167.194;
3.
許可
222.33.1.2;
4.
許可
231.152.49.4;
5.拒否
すべて;
6. auth_basic
"C1G_ADMIN";
7. auth_basic_user_file
htpasswd;
複数レベルのディレクトリ内のファイルを 1 つのファイルに変換して SEO 効果を高めます
/job-123-456-789.html は /job/123/456/789.html を指します
1. 書き直す
^/job-([0-9]+)-([0-9]+)-([0-9]+).html$ /job/$1/$2/jobshow_$3.html last;
ルート ディレクトリ内のフォルダーが第 2 レベルのディレクトリを指すようにします
たとえば、/shanghaijob/ は /area/shanghai/ を指します
last を Permanent に変更すると、ブラウザのアドレス バーには /location/shanghai/
と表示されます1. 書き換え
^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
上記の例の問題は、/shanghai にアクセスするときに一致しないことです 1 . 書き換え
^/([0-9a-z]+)job$ /area/$1/ last;
2. rewrite
^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
この方法では、/shanghai にもアクセスできますが、ページ内の相対リンクにはアクセスできません./list_1.html の実際のアドレスは /area /shanghia/list_1.html ですが、/list_1.html になり、アクセスできなくなります。
それなら、自動ジャンプ
(-d $request_filename)を追加すると機能しません
1 実ディレクトリでなければならないという条件がありますが、私の書き換えはそうではないので、効果はありません
1 .
if
(-d $request_filename){
2.
書き換え
^/(.*)([^/])$ http://$host/$1$2/ Permanent;
3.
}
理由がわかれば、もっと簡単になりますハンドル、手動でジャンプさせてください
1.
rewrite
^/([0-9a-z]+)job$ /$1job/ 永続;
2.
書き換え
^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
ファイルとディレクトリが存在しない場合はリダイレクトします:
1.
場合
(!-e $request_filename) {
2.
proxy_pass
http://127.0.0.1;
3.
}
🎜ドメイン名ジャンプ🎜🎜
1. サーバー
2.
{
3.
聞いてください 80;
4.
server_name jump.c1gstudio.com;
5.
インデックスindex.htmlindex.htmインデックス.php;
6.
root /opt/lampp/htdocs/www;
7.
書き換えます ^/ http://www.c1gstudio.com/;
8.
access_log オフ;
9.
}
多ドメイン名转向
1. server_name
www.c1gstudio.com www.c1gstudio.net;
2.
インデックスindex.htmlindex.htmインデックス.php;
3.
root /opt/lampp/htdocs;
4. if
($host ~ "c1gstudio.net") {
5. rewrite
^(.*) http://www.c1gstudio.com$1 永久;
6. }
三级域名跳转
1. 場合
($http_host ~* "^(.*).i.c1gstudio.com$") {
2. rewrite
^(.*) http://top.yingjiesheng.com$1;
3. break;
4. }
ドメイン名镜向
1. サーバー
2.
{
3.
80;
ミラーを使用.c1gstudio.com。
インデックスインデックス.htmlインデックス.htmインデックス.php;
6.
ルート /opt/lampP/htdocs/www ;7.
。
access_log off;
9.
}
上記では、nginx のロケーション構成をさまざまな側面を含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31