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. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...
基本的な HTML Web ページ タグのネスト ルールを紹介する場合、最初に説明する必要があるのは...
前回の記事では、MySQL 最適化の概要 - クエリの合計数を紹介しました。この記事では、クエリ ス...
CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...
win7 64 ビットで mysql-5.7.5-m15-winx64 をインストールして構成する方...
1. はじめにOracle が MySQL 8.0GA をリリースしました。海外での GA はリリー...
ラベル表示モード(重要) divタグとspanタグ1. スタイルはまったく同じですが、ラベルが異なり...
テーマ今日は、CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する方法を説...
Black Duck の 2017 年のオープンソース調査では、回答者の 77% がオープンソース...
目次概要型アサーション構文ではインスタンスオブ構文typeof構文要約する概要TypeScript ...
目次LAMPアーキテクチャ1.ランプの紹介2. WebサービスワークフローWebサーバーのリソースは...
この記事は主に、PostgreSQL データベースを記述して解析を実装する SQL スクリプト関数を...
1. はじめにMySQL にはレプリケーション ソリューションが付属しており、次のような利点がありま...
Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...
ドキュメントの範囲この記事では、Firefox やその他の Gecko ベースのブラウザ、Safar...