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

推薦する

CSS スタイルの優先順位はどれくらい複雑ですか?

昨晩、面接の質問を見ていたら、CSS スタイルの優先順位について特に明確に説明していない人が何人かい...

Mysql でサーバーの UUID を変更する方法

問題の原因:スレーブサーバーがクローンマスターサーバーである場合、server-uuidの値は同じで...

HTMLの基礎を詳しく解説(第2部)

1. リストリスト ulコンテナーには、一貫した構造とスタイルを持つテキストまたはグラフの形式が読...

Navicat を使用してリモート Linux MySQL データベースに接続するときに発生する 10061 不明エラーの詳細な説明

Navicat を使用してリモート Linux MySQL データベースに接続すると、不明なエラー ...

CSS での三角形の描画と巧妙な応用例の詳細な説明

鉛Web ページ上の一般的な三角形の一部は、画像やフォント アイコンにする必要なく、CSS を使用し...

擬似静的およびクライアント適応型 Nginx の設定方法

バックエンドは thinkphp3.2.3 フレームワークを使用します。他の言語を使用している場合は...

Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策

Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...

Windows 10 の Docker で countly-server を展開して実行するプロセス

私は最近countlyに触れて、慣れてきました。私は、必要に応じてcountlyのクラッシュプラグイ...

crontab 実行時間とシステム時間の不一致の解決方法

序文LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...

CSS で垂直方向の中央揃えを実装するいくつかの方法の概要

フロントエンドのレイアウト プロセスでは、水平方向の中央揃えを実現するのは比較的簡単で、通常は ma...

IE ブラウザの HTML ハック タグの概要

コードをコピーコードは次のとおりです。 <!--[if !IE]><!-->...

HTML マルチヘッダーテーブルコード

1. マルチヘッダーテーブルコードコードをコピーコードは次のとおりです。 <!DOCTYPE ...

Vueはページの部分的なリフレッシュを実装します(ルータビューのページリフレッシュ)

Vue でprovide+inject組み合わせを使用するまず、App.vue を変更する必要があ...

Fabric.js は DIY ポストカード機能を実装します

この記事では、DIYポストカード機能を実現するためのfabricjsの具体的なコードを参考までに共有...

電子メールの HTML ページを作成するための原則の概要

HTML メールはこのサイト上の独立したホスト ページではないため、他の誰かによってホストされていま...