nginx の入れ替えをどうしようかと思って準備したこと

もふもふあげさん nginx
この記事は約4分で読めます。
スポンサーリンク

このブログのあるサーバは yum でインストールした nginx で動かしてるのだけど、nginx の場合はパッケージでインストールすると、いろいろとオプションを設定することもできないわけで、どうするかなと。

でまぁパッケージの nginx を動かしてる裏でソースコードの nginx を make するとかきっとややこしいぞとか思ったわけで、他に私がやりやすい方法はないかと考えたわけです。

足りない頭を使った結果、「作業中、サイトのメンテナンス画面を 503 で表示させるために、使っていない Apache を起動しよう」という結論になりました。要するにブログを止めている間、検索エンジンに対しては HTTP ステータスコード 503 を返すようにしてメンテナンス中であることを知らせつつ、裏でのんびり作業しようと思い付いた次第であります。

メンテナンス画面をステータスコード 503 で返す理由というのは、『Webサイトのメンテナンス中画面を出す正しい作法と.htaccessの書き方 | Web担当者Forum』を参考にしてください。単純に「メンテナンス中です」という内容の html を表示すると、検索エンジン側で「コンテンツが消えた判定」をされる恐れがあるからです。いやそうじゃないから。

というわけで、Apache を起動しないまま放置していた httpd.conf をまずは弄る……前に、現在のルートとは別のディレクトリを作成しておくというようなことを踏まえた手順など。

  1. nginx で設定してるルート(/var/www/html)とは別の Apache 用メンテナンス告知専用ディレクトリ(/var/www/maintenance)を作成する。
    sudo mkdir /var/www/maintenance
    
  2. maintenance ディレクトリに、現在メンテナンス中であることを書いた maintenance.html を作っておく。内容はご自由に。
    cd /var/www/maintenance
    sudo vi maintenance.html // 手元で作成して scp で送り込むと楽ですね
    
  3. 最低限の設定を httpd.conf に行う。サイトへのアクセスはすべて、ステータスコード 503 を吐いて maintenance.html へリダイレクトされるようにする。
    sudo vi /etc/httpd/conf/httpd.conf
    
    # ServerTokens On
    ServerTokens Prod
    ......
    # ServerName www.example.com:80
    ServerName yourdomain:80
    ......
    # DocumentRoot "/var/www/html"
    DocumentRoot "/var/www/maintenance"
    ......
    # 
    
    ......
    # ServerSignature On
    ServerSignature Off
    ......
    <virtualHost *:80>
    DocumentRoot /var/www/maintenance
    ServerName yourdomain
    ErrorDocument 503 /maintenance.html
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !=/maintenance.html
    RewriteRule ^.*$ - [R=503,L]
    </virtualHost>
    
    sudo apachectl configtest // httpd.conf の構文チェック
    Syntax OK
    
  4. nginx を止めて httpd を起動する。
    sudo /etc/init.d/nginx stop
    sudo /etc/init.d/httpd start
    
  5. サイトのトップページや個別記事にアクセスして、maintenance.html が表示されることを確認する。
  6. 5で問題なければ httpd を止めて nginx を起動し、元に戻す。
    sudo /etc/init.d/httpd stop
    sudo /etc/init.d/nginx start
    

こうしておくと、メインである nginx を長時間弄る時でも Apache に切り替えてメンテナンスしていることを告知しつつあれこれできるんじゃないかと。Web サーバを振り替えて作業するので、本番サーバ上でも焦らないで済むかなぁとか思ったりしたのであります。

あ、当然のことながら httpd の自動起動は設定しないこと。

そのような流れで、本日は Apache の設定だけ完了。これで、いつでもメンテナンスモードに切り替えることができるようになりましたっと。うちの Apache はメンテナンス告知をするためだけにインストールされた娘ということになりました。アンインストールしないで残しておいて良かったわ。

本番本命の nginx 切り替えは時間のある時かな。もうちょっとしたら GW に突入するし、そこで作業してもいいかとか。その気になればどこかの週末にでも。ともかくメンテナンス画面が出たら、「ああ何かやってんだな」と思っていただけますと幸いです。

タイトルとURLをコピーしました