システムメンテナンスページにリダイレクトするように 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 フレックスベースのテキストオーバーフロー問題の解決方法

推薦する

ReactのPropsの簡単な比較

目次クラスコンポーネントのプロパティ比較浅い同等の浅い比較機能コンポーネントの簡単な比較先週面接に行...

MySQLで行を列に変換する方法

MySQL の行から列への操作いわゆる行から列への操作は、テーブルの行情報を列情報に変換することです...

CentOS 7にChromeブラウザをインストールする方法

この記事では、CentOS 7 に Chrome ブラウザをインストールする方法を紹介します。詳細は...

タグ li はブロックレベル要素ですか?

なぜ高さを設定できるのでしょうか。<h1 /> などの要素とは異なり、「セミインライン」...

MySQLのCOUNT(*)のパフォーマンスについてお話しましょう

序文基本的に、職場のプログラマーは、count(*)、count(1)、または count(prim...

Nest.js 環境変数の設定とシリアル化の詳細な説明

環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...

MySQLにおけるビューの作成(CREATE VIEW)と使用制限の詳しい説明

この記事では、例を使用して、MySQL ビューの作成 (CREATE VIEW) と使用上の制限につ...

MySQL 文字列分割操作 (区切り文字を含む文字列のインターセプション)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

Vueデータ双方向バインディング実装方法

目次1. はじめに2. コードの実装2.1 目的分析2.2 実装プロセス2.2.1 エントリーコード...

MySQLは現在の日付と時刻を取得する関数の例の詳細な説明

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

MySQL InnoDB テーブルスペース暗号化の例の詳細な説明

序文MySQL 5.7.11 以降、MySQL は、別の表領域に格納された InnoDB テーブルの...

JavaScript配列の一般的なメソッドの詳細な説明

目次元の配列を変更しない方法1. 連結文法:パラメータ:戻り値: 2. 参加する文法:パラメータ:戻...

Windows 7 の mysql6.x で中国語の文字化けが発生する問題に対する完璧な解決策

1. コマンドラインでMySQLサービスを停止します: net stop mysql stop my...

便利で使いやすいウェブアプリケーションを設計するための 10 のヒント

より使いやすい Web アプリケーションを設計するための 10 のヒントをご紹介します。ヒント1: ...

JavaScript の遅延読み込み属性パターンに関する簡単な説明

目次1. はじめに2. オンデマンド属性モード3. 乱雑な遅延読み込み属性パターン4. クラスの唯一...