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. MySQL 8.0.20をダウンロードして解凍するダウンロードリンク: https://dev...
JS を使用してオブジェクト指向メソッドを実装し、JD.com の 5 つ星レビュー効果を実現します...
概要MySQL には独自のイベント スケジューラもあり、これは Linux の crontab ジョ...
Windows 10 に Docker をインストールする場合、コンテナタイプを Linux コンテ...
目次1. v-text テキストレンダリング命令2. v-html 1. v-text テキストレン...
一つの目的Html ページでローカル フォルダーを選択すると、フォルダーとそのサブフォルダー内のすべ...
Vueのシンプルなタイマーを参考にしてください。具体的な内容は以下のとおりです原理: setInte...
目次オブジェクトプロトタイプの値()オブジェクトプロトタイプtoString()シンボル.toPri...
float の使用例左サスペンション: float:left;右サスペンション: float:rig...
事前に書いておきます:次の手順では、ターミナルにコマンドを入力する必要があります。コンピューターでブ...
この記事では、MySQL 8.0のインストールと設定方法を参考までに紹介します。具体的な内容は以下の...
目次1. Gojsの実装1. 描画2. 破線の実装3. 点線を動かす2. 点線と点線アニメーションの...
前回の記事では、MySQL データ保存手順パラメータの詳細な例を紹介しました。今日は、JSON デー...
この記事は、参考のためにMySQL 8.0.18のインストールと設定のグラフィックチュートリアルを記...