システムメンテナンスページにリダイレクトするように nginx を設定する

システムメンテナンスページにリダイレクトするように nginx を設定する

先週末、兄弟プロジェクトはより良いサービスを提供するためにサーバーを拡張する準備をしていました。兄弟プロジェクトの一部の機能がリアルタイムで提供され、対応するシステム機能を一時的にブロックする必要がありました。nginxを使用したため、nginxを直接構成して、修正されたシステムメンテナンスページにリダイレクトすることができました。

Nginx のリダイレクトは実際には非常に簡単です。 return または rewrite キーワードのいずれかを使用できます。リダイレクトは静的ページに直接ジャンプするため、後続の操作やレコードは不要であり、直接 301 永続リダイレクトが使用されます。

リダイレクトは、サーバーまたは特定の場所で設定できます。以下は、それぞれについて簡単に説明します。

サーバーで設定:

http {
    サーバ{
        聞く 80;
        サーバー名 A.com;

    # 以下の return または rewrite のいずれかを選択します。このうち、upgrade.html は私が自分で書いたプロンプト ページです。301 http://B.com/upgrade.html を返します。  
        # 書き換え ^/(.*)$ http://B.com/upgrade.html permanent;
        location / { # 以下の設定内容はここでは省略します} } }

または、次の場所で設定します:

http {
    サーバ{
        聞く 80;
        サーバー名 A.com;
        位置 / {
            ^/(.*)$ http://B.com/upgrade.html を永久に書き換えます。
  # 以下の設定内容はここでは省略します} } }

上記の例から、return は 301 パラメータリダイレクトを使用し、rewrite は permanent を使用していることがわかります (もちろん、break や last を使用することもできます。違いを知りたい場合は、自分で情報を調べてください)。

上記の 2 つの例では、A.com が B.com にリダイレクトするために使用されていることにお気づきでしょうか。A.com を使用して A.com/upgrade.html に直接リダイレクトしようとしましたが、繰り返しが多すぎるというエラー メッセージが報告され、無限ループに入ります。複数のドメイン名を同時に管理する場合、A を B にリダイレクトするように設定できますが、ドメイン名 A が 1 つしかない場合はどうなるでしょうか?

このとき、if 条件を使用して判断します。ここでは、サーバー内の構成を例に説明します。

http {
    サーバ{
        聞く 80;
        サーバー名 A.com;        

        # if の後にはスペースが必要であることに注意してください。 ! !
        $request_uri の場合:
            301 http://A.com/upgrade.html を返します。
        }

        位置 / {
  # 以下の設定内容はここでは省略します}
 } 
}

上記の例では、アクセス パスに /upgrade.html が含まれていない場合、upgrade.html にリダイレクトされることを示しています。このとき、リダイレクトは成功し、繰り返しすぎてもプロンプトは表示されません。ただし、別の問題があります。つまり、upgrade.html 内の画像が表示されないということです。画像がリダイレクトされないようにする方法を研究する時間がありません。後で時間があるときにさらに追加します。

if 条件をテストしているときに、特に落とし穴に遭遇しました。つまり、if を追加して nginx を再起動すると、次のエラー メッセージが表示されました。

制御プロセスがエラー コードで終了したため、nginx.service のジョブが失敗しました。詳細については、「systemctl status nginx.service」および「journalctl -xe」を参照してください。

systemctl status nginx.service と入力して、nginx: [emerg] unknown directive "if($request_uri" エラーなどのエラー情報を表示します。答えを見つけました。if の後にスペースが必要であることが判明しました!!! !!! 残念です。インターネット上の nginxif を紹介する記事には、このような重要な情報は記載されていませんでした...

情報ありがとうございます:

if の後にスペースが必要です: https://blog.csdn.net/palet/article/details/103394236

nginx で戻って書き直す: https://blog.csdn.net/u010982507/article/details/104025717

知識ポイント補足

任意のアドレスを入力するとメンテナンスページにリダイレクトするように nginx を設定します

注: 任意のアドレスを入力するとメンテナンスページにリダイレクトするように nginx を設定します。

サーバー{
    聞く 80;
    ルート /xxx/xxx/src;
    インデックス index.html index.htm;

    サーバー名 test.xxx.com;

    $flag を 0 に設定します。
      $request_uri の場合 ("(/static/.*)$"){
          $flag を "${flag}1" に設定します。
      }
      $request_uri が "/502.html$" の場合{
          $flag を "${flag}2" に設定します。
      }
      $flag = "012"の場合{
         ^(.*) http://test.xxx.com/502.html を永続的に書き換えます。
      }

 位置 /{
     ...

上記は、システムメンテナンスページへのnginxリダイレクトの詳細です。nginxリダイレクトメンテナンスページの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • nginxディレクトリパスをリダイレクトする方法
  • nginx 設定 URL リダイレクト - リバース プロキシの詳細な説明
  • Nginxのリダイレクト機能の詳しい説明
  • ngin 構成で 301 リダイレクトを設定する方法と nginx サブディレクトリで 301 リダイレクトを設定する方法

<<:  ミニマルなウェブサイトデザインの例

>>:  CSS フレックスベースのテキストオーバーフロー問題の解決方法

推薦する

DockerでVueプロジェクトをデプロイする方法を教えます

1.前面に書きます:軽量仮想化テクノロジーとして、Docker には継続的インテグレーション、バージ...

優れたWebフォームデザイン事例20選

ソフィー・ハルダッククライドキー埠頭 37 東ソープボックス Rxバランス EEハーバー対比 SVN...

CentOS6.7 mysql5.6.33 でデータファイルの場所を変更する方法

問題: MySQL がデータ ファイルを保存するパーティションの容量が小さく、現在いっぱいになってい...

XHTML チュートリアル、XHTML の基礎を簡単に紹介します

<br />この記事では、XHTMLとXHTMLの基礎知識について簡単に紹介します。 X...

MySQL GTID マスターとスレーブの不一致を修復するソリューション

目次解決策1: レプリカを再構築する前提条件アドバンテージ欠点手順マスター奴隷解決策2: データ修復...

Linux (Ubuntu) での MySQL 5.6.28 のインストールと設定のチュートリアル

mysql5.6.28のインストールと設定方法1. 基本的なシステム情報を確認し、yumでインストー...

TCPソケットSYNキューとAcceptキューの差異分析

まず、「LISTENING」状態の TCP ソケットには 2 つの独立したキューがあることを理解する...

HTML 基本要約推奨事項 (テキスト形式)

HTMLテキスト書式タグ 標簽 描述 <b> 定義粗體文本 <em> 呈現...

JavaScript オブジェクトの 3 つのプロパティ

目次1. 書き込み可能: 書き込み可能2. 列挙可能: 列挙可能3. 設定可能: 設定可能オブジェク...

アイデアコンパイラvueインデントエラー問題シナリオの分析

プロジェクトシナリオ: Vueプロジェクトを実行したらインデントエラーが出ました。ideaコンパイラ...

Java は Excel から MySQL にデータをインポートします

実際の業務では、Excel からデータベースにデータをインポートする必要がある場合があります。データ...

LinuxでDHCPサーバーを構築する方法

目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...

JavaScriptはキャンバスを使用して座標と線を描画します

この記事では、JavaScriptでキャンバスを使用して座標と線を描く具体的なコードを参考までに紹介...

MyBatis 動的 SQL の包括的な説明

目次序文動的SQL 1. まずモジュールのディレクトリ構造を見てみましょう2. 物理モデリングと論理...

DockerでKafkaをデプロイする方法

目次1. Dockerをビルドする2. コンテナに入る3. 設定ファイルを変更する4. Kafkaを...