書き換えモジュールは ngx_http_rewrite_module モジュールです。その主な機能はリクエスト URI を書き換えることです。これは Nginx にデフォルトでインストールされるモジュールです。書き換えモジュールは、PCRE 正規表現に従って URI を書き換え、内部リダイレクトを開始して場所を一致させるか、直接 30 回のリダイレクトを実行してクライアントに戻ります。 コマンド実行の順序は、まずサーバー ブロック内の書き換えモジュール コマンドを実行して、書き換え後のリクエスト URI を取得します。
(2)一致した位置にある書き換えモジュール命令を順次実行する 命令 例 サーバー{ 8080を聴く; # ここでbreakはサーバーブロックのreturn命令の実行を停止します(return命令は書き換えモジュールに属します) # コメントアウトすると、すべての受信リクエストがOKを返します 壊す; 200「ok」を返します。 場所 = /testbreak { 壊す; 200 $request_uri を返します。 プロキシパス http://127.0.0.1:8080/other; } 位置 / { 200 $request_uri を返します。 } } # 次のようにリクエストを送信します# curl 127.0.0.1:8080/testbreak # /他の # `/testbreak` の代わりに `/other` が返されていることが分かります。これは、`proxy_pass` 命令がまだ実行されていることを示しています。 # つまり、他のモジュールの命令は break によって中断されません。 # (proxy_pass は ngx_http_proxy_module の命令です) もし コンテキスト: サーバー、場所 指定された条件に基づいてifブロック文の内容を実行するかどうかを決定します ifにおけるいくつかの判断条件 なお、上記 1、2、3 の値は変数である必要がありますが、4、5、6、7 の値は変数でも文字列でもかまいません。-f/-d/-e/-x の基本的な使い方は bash と同じです。 $variable を "0" に設定します。 ($変数)の場合{ # 「0」は偽なので実行されません 壊す; } # 正規表現に一致する変数を使用しても問題はありません if ( $http_host ~ "^star\.igrow\.cn$" ) { 壊す; } # 文字列が正規表現に一致し、エラーを報告します if ( "star" ~ "^star\.igrow\.cn$" ) { 壊す; } # ファイルのような文字列と変数の両方が正常かどうかを確認します if ( !-f "/data.log" ) { 壊す; } if ( !-f $ファイル名 ) { 壊す; } 戻る コンテキスト: サーバー、場所、if 戻りコード[テキスト]; 戻りコード URL; URLを返します。 処理を停止し、指定されたコードをクライアントに返します。 非標準コード 444 は、応答ヘッダーを送信せずに接続を閉じます。 バージョン 0.8.42 以降では、return ステートメントでリダイレクト URL を指定できます (ステータス コードは 301、302、303、307 のいずれかになります)。 リダイレクトされた URL をこのサーバーのローカル URL として指定できる特別なケースがあります。この場合、nginx は要求されたプロトコル $scheme、server_name_in_redirect、port_in_redirect に基づいて完全な URL を自動的に生成します (ここで注意すべき点は、server_name_in_redirect と port_in_redirect の指示は、サーバー ブロック内の server_name と listen port をリダイレクトとして使用するかどうかを示すことです) # 戻りコード [テキスト]; クライアントにOKを返す location = /ok { 200「ok」を返します。 } # リターンコード URL; Baidu への一時的なリダイレクト location = /redirect { 302 http://www.baidu.com を返します。 } # 戻りURL; 上と同様に、デフォルトも一時的なリダイレクトです location = /redirect { http://www.baidu.com を返します。 } リライト
正規表現の置換を書き換える [フラグ]; 書き換えディレクティブは、指定された正規表現 regex を使用して要求された URI と一致させ、一致が成功した場合は、置換を使用して URI を変更します。書き換えディレクティブは、設定ファイル内に記述された順序で実行されます。このフラグは、命令のそれ以上の処理を終了するために使用できます。置換文字列が http://、https://、または $scheme で始まる場合、後続のコンテンツの処理を停止し、クライアントに直接リダイレクトします。 最初のケースでは、文字列をhttp://に書き換えます。 位置 / { # 正規表現 /test1/(.*) に一致すると、リクエストは一時的に http://www.$1.com にリダイレクトされます。 # リダイレクトとして記述されたフラグと同等 /test1/(.*) http://www.$1.com を書き換えます。 200「ok」を返します。 } # ブラウザに127.0.0.1:8080/test1/baiduと入力 # 一時的に www.baidu.com にリダイレクトします # 次のreturnコマンドは実行されません 2番目のケースでは、http://なしで文字列を書き換えます。 位置 / { /test1/(.*) www.$1.com を書き換えます。 200「ok」を返します。 } # 次のようにリクエストを送信します# curl 127.0.0.1:8080/test1/baidu # わかりました # ここには http:// がないので、単純に書き換えるだけです。要求されたURIは/test1/baiduからwww.baidu.comに書き換えられます # 書き換えコマンドは順番に実行されるため、次のステップは戻りコマンドを実行することであり、応答は正常です 書き換えの4つのフラグ 1.最後 # 書き換えがなく、その後にフラグもない場合は、順番に実行されます。# 実行可能な場所に書き換えモジュール命令がない場合、場所と一致する場所の新しいラウンドを開始するように書き換えられます / { # フラグがない場合、デフォルトの順序は rewrite ^/test1 /test2 です。 ^/test2 /test3 を書き換えます。# ここで、URI に一致する新しいラウンドの場所が開始されます。これは /test3 です。 } 場所 = /test2 { 200 "/test2" を返します。 } 場所 = /test3 { 200 "/test3" を返します。 } # 次のリクエストを送信します# curl 127.0.0.1:8080/test1 # /テスト3 ラストとブレイクの違い
位置 / { ^/test1 /test2 を書き換えます。 rewrite ^/test2 /test3 last; # ここで、URI に一致する新しいロケーション ラウンドが開始されます: /test3 ^/test3 /test4 を書き換えます。 proxy_pass http://www.baidu.com; } 場所 = /test2 { 200 "/test2" を返します。 } 場所 = /test3 { 200 "/test3" を返します。 } 場所 = /test4 { 200 "/test4" を返します。 } # 次のリクエストを送信します# curl 127.0.0.1:8080/test1 # /テスト3 上記の場所/を次のコード場所/{に変更すると ^/test1 /test2 を書き換えます。 # ここでは新しいロケーションマッチングは開始されません。後続の書き換えモジュール命令は終了し、書き換えられた URI は /more/index.html になります。 ^/test2 /more/index.html を書き換えて、break; rewrite /more/index\.html /test4; # このコマンドは無視されます # proxy_pass は rewrite モジュールのコマンドではないため、break proxy_pass https://www.baidu.com によって終了されません。 } # 次のリクエストを送信します# ブラウザに 127.0.0.1:8080/test1 と入力します # エージェントから Baidu 製品ページへ https://www.baidu.com/more/index.html; 書き換え後のリクエスト パラメータ<br /> 置換文字列の置換に新しいリクエスト パラメータが含まれている場合、以前のリクエスト パラメータがその後に追加されます。以前のパラメータが必要ない場合は、置換文字列の最後に疑問符を付けて、追加されないようにします。 # 最後に ? が追加されているため、書き換え後の URL に元のリクエスト パラメータは追加されません。 rewrite ^/users/(.*)$ /show?user=$1? last; ログを書き換える
rewrite モジュール命令実行のログを有効または無効にします。有効にすると、rewrite は nginx error_log に通知レベルのログを記録します。デフォルトはオフです。 構文: rewrite_log on | off; セット コンテキスト: サーバー、場所、if 指定された変数の値を設定します。変数の値には、テキスト、変数、またはこれらの組み合わせを含めることができます。 位置 / { $var1 に "ホストは " を設定します。 $var2 に $host を設定します。 $var3 に「uri は $request_uri です」を設定します。 200「応答 OK $var1$var2$var3」を返します。 } # 次のリクエストを送信します# curl 127.0.0.1:8080/test # 応答OK ホストは127.0.0.1 URIは/test 初期化されていない変数の警告
初期化されていない変数に関する警告をログに記録するかどうかを制御します。デフォルトで有効 内部実装 ngx_http_rewrite_module モジュール ディレクティブは、構成フェーズ中に、リクエスト処理中に解釈される内部ディレクティブにコンパイルされます。インタプリタは単純な仮想スタック マシンです。 例えば、
以下の手順に翻訳されます:
上記には limit_rate ディレクティブがないことに注意してください。これは ngx_http_rewrite_module モジュールとは関係ありません。 if ブロック用に別の構成を作成します。条件が真の場合、limit_rate が 10k に等しいリクエストがこの構成に割り当てられます。 \ 命令
正規表現の最初のスラッシュを括弧内に置くと、次のように簡略化できます。
対応するディレクティブは次のようになります。
場所(非書き換えモジュール) 文法 次のようにサーバー ブロックで使用します。
場所表現タイプ パスを直接記述すると、大文字と小文字が区別される正規表現によってパスが照合されます。 優先度 Nginx の rewrite モジュールの詳細説明はこれで終わりです。より関連性の高い Nginx rewrite コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
目次1. キープアライブの使用使用例: 1. すべてのページをキャッシュする: 2. 条件に基づいて...
LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | grep ...
友人の中には、データベースについて学習しているときに、テーブル構造を作成するときに誤ってフィールドを...
社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...
設定ファイルを書いてMyBatisを簡単に使う方法マイバティス3.xここでは MyBatis につい...
Docker-machineはDockerが公式に提供しているDocker管理ツールです。これは d...
ここ数日、dockerでSpring Bootアプリケーションを実行する方法を勉強してきました。以前...
はじめに: Web ページを作成するときに、画像をアップロードする必要がある場合がよくあります。画像...
目次概要コードの実装要約する概要アダプタ パターンは、デザイン パターンの動作パターンのパターンです...
目次フォワードプロキシnginx リバースプロキシnginx リバースプロキシ 02リバースプロキシ...
Tomcatをインストールする前に、まずJDK環境をインストールしてくださいLinux サーバー上で...
目次HTTP ハイジャック、DNS ハイジャック、XSS HTTPハイジャックDNSハイジャックXS...
<br />当サイトのオリジナルコンテンツですので、転載の際は出典を123WORDPRE...
目次概要リバースプロキシの役割Nginx リバース プロキシ イントラネット侵入 8081 ポートの...
文章のスタイルでは、このような状況がよく見られます コードは次のとおりです <div styl...