Nginx の書き換え機能は、リダイレクトと同様に、URL アドレスを一時的または永続的に新しい場所にリダイレクトする、通常の一致する書き換えをサポートしています。この機能は、Web サイトの構造に大きな変更を加えたときに役立ちます。たとえば、Web サイトの mp3 リソースは以前は URL www.site1.org/mp3 を使用してアクセスされていましたが、現在はサーバー上の mp3 ディレクトリが music ディレクトリに置き換えられています。この場合、書き換え機能を簡単に実装できます。次に、site1.org を www.site1.org に強制的に調整したり、その逆を行ったりすることができます。このディレクティブは、ngx_http_rewrite_module モジュールにあります。この記事では主にこの命令の使用方法を説明し、デモンストレーションを行います。 1. コマンド構文の説明を書き直す 構文: rewrite regex replacement [flag]; 指定された正規表現がリクエスト URI と一致する場合、URI は置換文字列で指定されたとおりに変更されます。 このフラグは、対応する書き換えルールに一致した後、後続の書き換えルールのチェックを続行するかどうかを制御するために使用されます。オプションのフラグ パラメータは、次のいずれかになります。 最後 壊す リダイレクト 永続 注: 通常、break フラグは、rewrite が location に書き込まれる場合、または rewrite が if コンテキストに書き込まれる場合に使用されます。 その他の指示 ログの書き換えオン|オフ 戻りコード: 2. 位置コンテキストに基づく書き換え機能のデモンストレーション ローカル環境# more /etc/redhat-release CentOS Linux リリース 7.2.1511 (コア) nginx の -v を実行します。 nginx バージョン: nginx/1.12.2 nginxの設定 # vim /etc/nginx/conf.d/rewrite.conf サーバー{ 聞く 80; サーバー名 site1.orag www.site1.org; 位置 / { ルート /www/site1.org; インデックス index.html index.htm; } } # mkdir -pv /www/site1.org/images # echo "これは書き換えテストページです。" >/www/site1.org/index.html # cp /usr/share/backgrounds/gnome/*.jpg /www/site1.org/images/ # vim /etc/hosts 192.168.1.175 サイト1.org 192.168.1.175 www.site1.org # カール http://www.site1.org これは書き換えテストページです。 # curl -I upload/2022/web/Waves. HTTP/1.1 200 OK サーバー: nginx/1.12.2 日付: 2017 年 11 月 1 日水曜日 03:47:58 GMT コンテンツタイプ: image/jpeg コンテンツの長さ: 458818 最終更新日: 2017年11月1日水曜日 03:43:48 GMT 接続: キープアライブ ETag: "59f942f4-70042" 受け入れ範囲: バイト rewrite.confファイルを修正し、書き換えディレクティブlocation / {を追加します。 ルート /www/site1.org; インデックス index.html index.htm; ^/images/(.*)$ /imgs/$1 を最後に書き換えます。 } # systemctl nginx をリロードします # curl -I upload/2022/web/Waves. HTTP/1.1 404 見つかりません サーバー: nginx/1.12.2 日付: 2017 年 11 月 1 日水曜日 04:02:38 GMT コンテンツタイプ: text/html コンテンツの長さ: 169 接続: キープアライブ # mkdir -pv /www/site1.org/imgs # mv /www/site1.org/images/Waves.jpg /www/site1.org/imgs/. # curl -I upload/2022/web/Waves. HTTP/1.1 200 OK サーバー: nginx/1.12.2 日付: 2017 年 11 月 1 日 (水) 04:05:07 GMT コンテンツタイプ: image/jpeg コンテンツの長さ: 458818 最終更新日: 2017年11月1日水曜日 03:43:48 GMT 接続: キープアライブ ETag: "59f942f4-70042" 受け入れ範囲: バイト # curl -I upload/2022/web/Waves. ##このメソッドはHTTP/1.1 200 OKにアクセスできます サーバー: nginx/1.12.2 日付: 2017 年 11 月 1 日水曜日 04:06:17 GMT コンテンツタイプ: image/jpeg コンテンツの長さ: 458818 最終更新日: 2017年11月1日水曜日 03:43:48 GMT 接続: キープアライブ ETag: "59f942f4-70042" 受け入れ範囲: バイト 書き換えによって発生する http 500 エラーをシミュレートするには、rewrite.conf ファイルを次のように変更します。 位置 / { ルート /www/site1.org; インデックス index.html index.htm; ^/images/(.*)$ /imgs/$1 を最後に書き換えます。 ^/imgs/(.*)$ /images/$1 を書き換えます。 } # systemctl nginxを再起動します # curl -I upload/2022/web/Waves. HTTP/1.1 500 内部サーバーエラー サーバー: nginx/1.12.2 日付: 2017年11月1日水曜日 05:23:16 GMT コンテンツタイプ: text/html コンテンツの長さ: 193 接続: 閉じる # curl -I upload/2022/web/Waves. HTTP/1.1 500 内部サーバーエラー サーバー: nginx/1.12.2 日付: 2017年11月1日水曜日 05:23:28 GMT コンテンツタイプ: text/html コンテンツの長さ: 193 接続: 閉じる 上記のテストは、500 エラーが無限ループによって発生することを示しています。 Nginx が提供する参考例: サーバー{ ... ##rewrite ディレクティブはサーバー コンテキストにあります rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; ##メディアディレクトリを含む /download ディレクトリ内のファイルリクエストを donwload/any/mp3/any.mp3 にリダイレクトします 最後に ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra を書き換えます。 ##オーディオディレクトリを含む /download ディレクトリ内のファイルリクエストを donwload/any/mp3/any.mp3 にリダイレクトします 403 を返します。 ... } location /download/ { ##rewrite ディレクティブは location コンテキスト内にあります rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; ## 最後のフラグは break に置き換える必要があります。そうしないと、nginx は 10 サイクルで 500 エラーを返します。 rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break; 403 を返します。 } 3. if条件に基づく書き換え関数のデモンストレーション # vi /etc/nginx/conf.d/rewrite.conf サーバー{ 聞く 80; サーバー名 site1.orag www.site1.org; $host が 'www.site1.org' の場合 { 書き換え^/(.*)$ http://www.site1.org/$1 永久的; } 場所 / { ##著者: Leshami ルート /www/site1.org; ##ブログ: http://blog.csdn.net/leshami インデックス index.html index.htm; ^/images/(.*)$ /imgs/$1 を最後に書き換えます。 ^/imgs/(.*)$ /images/$1 を書き換えます。 } } # systemctl nginx.service をリロードします ローカルテスト(ローカルホストファイルの変更) # カール http://site1.org <html> ## 301 ステータス コードを返す <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 永久に移動しました</h1></center> <hr><center>nginx/1.12.2</center> </本文> </html> Windows環境のテスト WindowsマシンのHostファイルを変更した後、次のエントリを追加します 192.168.1.175 centos7-router.com 192.168.1.175 www.centos7-router.com ブラウザを開き、ドメイン名で http://site1.org にアクセスすると、自動的に http://www.site1.org にジャンプします (デモは省略) 4. httpをhttpsに書き換える サイト全体がhttpsでない場合は、一部の機密データはhttpsを経由する必要がありますが、これは書き換えによっても実現できます。 次の例では、ディレクトリ https://www.site1.org/user に機密情報が含まれていると仮定すると、次のように書き換えることができます。 場所 ^~ /ユーザー { 書き換え^/ https://www.site1.org$request_uri?permanent; } サイト全体はhttpsです サーバー{ 聞く 80; サーバー名 site1.orag www.site1.org; アクセスログ /var/log/nginx/http-access.log; エラーログ /var/log/nginx/http-error.log; 書き換え^/ https://www.site1.org$request_uri; } 上記のデモンストレーションは簡単に言えば 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介
戦争パッケージを準備する1. 既存のSpringBootプロジェクトを準備し、pomに依存関係を追加...
目次1. はじめに: 2. プロトタイプチェーン継承: 3. コンストラクタ継承の借用(オブジェクト...
1. 仮想マシン(物理マシン)をインストールする仮想マシンまたは物理マシンにインストールできます。 ...
1. MySQL 独自のストレステストツール - Mysqlslap mysqlslap は、mys...
以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...
Nginx: PV、UV、独立IPウェブサイトを作成する人なら誰でも、ウェブサイトのPV、UV、その...
1. コンテナに入るdocker run [オプション] イメージ名 [起動コンテナに渡されるコマン...
変数の宣言グローバル変数の設定@a='新しい変数' を設定します。関数やストアドプロ...
1. はじめにこれまで、テキストの特定の部分を強調したい場合、通常は太字にしたり明るい色を使用したり...
更新: MySQL の公式 Web サイトにアクセスして MySQL インストーラーをインストールし...
1. mysqlbinlog: [エラー] 不明な変数 'default-character...
具体的なコードは次のとおりです。 <!DOCTYPE html> <html>...
今日は簡単な3Dルービックキューブを作ってみましょうまずはレンダリングを見てみましょう!これを学んだ...
Google Chinaは、ウェブサイトやブログを素早く簡単に多言語化できる翻訳ツールをリリースした...
初めてwampをインストールした後、すべてのサービスが正常に使用できますが、再起動するとwampのア...