開発者ドキュメント

UbuntuVPSでWordPressのインストールをApacheからNginxに移行する方法

ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由: Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このガイドはもう維持されていません。

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

序章


WordPressは、ウェブサイトやブログを簡単に開始するための人気のあるプラットフォームです。 非常に柔軟性があり、すばやく構成および変更できるため、構成の大部分ではなく、コンテンツに集中できます。

WordPressは、ほとんどのWebサーバー上で動作するように構成できますが、多くの人に人気のある、おそらくデフォルトの選択肢は、ApacheWebサーバーです。 Apacheは堅牢で十分にサポートされていますが、大量のゲストにサービスを提供するときにリソースの使用率に問題が発生することがあります。

もう1つのWebサーバーであるNginxは、その使いやすさ、柔軟性、およびリソース使用量の少なさから、急速に人気を集めています。 これらの理由から、多くの人がWordPressのインストールをホストするためにApacheではなくNginxを選択し始めています。 Nginx を使用してWordPressをインストールする方法については多くのリソースがありますが、既存のインストールを移行することは困難な作業のように見える場合があります。

このガイドでは、Ubuntu12.04サーバーで既存のWordPressインストールをApacheからNginxに移行する方法について説明します。 このガイドに従って、Ubuntu12.04にApacheを使用してWordPressをインストールしたことを前提としています。 別の方法でインストールした場合は、構成の一部の行を調整する必要がある場合があります。

NginxとPHP5-FPMをインストールします


最初に行う必要があるのは、Nginxサーバーをインストールすることです。 これはUbuntuのデフォルトのリポジトリで利用できるため、apt-getを使用できます。

sudo apt-get update
sudo apt-get install nginx

Apacheとは異なり、NginxはコアPHP処理機能を含まないように設計を選択しました。 代わりに、Nginxは、これらのリクエストを専用のPHPハンドラーに渡すことで、問題に対処しながらフォーカスを維持できると判断しました。

NginxでPHPファイルを実行するための標準的な選択肢は、次のようなユーティリティです。 php5-fpm. WordPressインストールが依存するPHPファイルを処理できるように、このパッケージをインストールする必要があります。

sudo apt-get install php5-fpm

これで、必要なすべてのコンポーネントがインストールされました。 これで、Apacheを引き継ぐようにコンポーネントを構成する実際の作業を開始できます。

PHP5-FPMを構成する


PHPハンドラーを構成することから始めます。これは、比較的単純で簡単だからです。

まず、php5-fpm構成ファイルの値を変更する必要があります。 今すぐ開く:

sudo nano /etc/php5/fpm/php.ini

を見つける cgi.fix_pathinfo パラメータを変更し、次のように変更します。

cgi.fix_pathinfo=0

これはセキュリティ対策です。 このパラメーターが「1」に設定されている場合、php5-fpmは要求されたファイルを探してPHPファイルを提供しようとし、完全に一致するものが見つからない場合は推測して厳密な一致を返します。

これは、サイトが機密情報を外部ユーザーに公開する可能性があるため、非常に安全ではありません。 php5-fpmが要求されたファイルと完全に一致する場合はファイルを返し、そうでない場合はユーザーにエラーを返す方がはるかに安全です。 これが私たちの変更が達成することです。

終了したら、このファイルを保存して閉じます。

次に、プロセッサがWebサーバーに正しく接続できるように、別のPHP構成ファイルを変更する必要があります。

このファイルをテキストエディタで開きます。

sudo nano /etc/php5/fpm/pool.d/www.conf

の場所を見つける listen = ディレクティブが定義されています。 これを変更して、Webサーバーとの通信にソケットを使用します。 次のように変更します。

    listen = /var/run/php5-fpm.sock

終了したら、ファイルを保存して閉じます。

変更を有効にするには、php5-fpmサービスを再起動する必要があります。

sudo service php5-fpm restart

Nginxサーバーブロック構成を作成する


これで、Nginxサーバーブロックを構成する準備が整いました。 Nginxサーバーブロックは、特定のサイトの構成を記述するという点でApache仮想ホストに似ています。

Apacheと同様に、UbuntuのNginxは、 sites-available ディレクトリを作成し、それらのサイトをにリンクします sites-enabled それらに仕えるために。 WordPressのインストールを提供するために、デフォルトの構成ファイルを変更します。

今すぐそのファイルを開きます:

sudo nano /etc/nginx/sites-available/default

構成ファイル内で、すでに存在する情報を削除します。 作成中のファイル全体で何が起こっているかを話し合うことができるように、最初から始めます。

まず、サーバーブロックを作成する必要があります。 これは、単一のWebサイトの編成の基本単位です。 これらのファイルは、サーバーの起動時またはリロード時にNginx構成に組み込まれます。 それらはデフォルト値を継承し、それらを変更する可能性があります。

server {

}

まず、各Nginxディレクティブはセミコロン(;)で終了する必要があることを知っておくことが重要です。 これを含めないと、Nginxがファイルを誤って解釈し、サーバーの起動に失敗する可能性があります。

サーバーブロック内で、ユーザーからの接続を取得するためにこのサイトがリッスンするポートを指定します。 デフォルトでは、WebブラウザへのHTTPトラフィックはポート80で提供されるため、ここでNginxに接続を探すように指示します。

また、WordPressファイルがデフォルトで保存されるドキュメントルートを指定する必要があります。

上記のガイドに従った場合、WordPressファイルは /var/www ディレクトリ。 別の方法でインストールした場合、WordPressファイルはに保存される可能性があります /var/www/wordpress, /home/wordpress/public_html、または他の場所。 の値を調整します root 構成に一致するディレクティブ。

サーバー{リッスン80;
root <span class="highlight">/var/www</span>;

}

次に、ディレクトリが要求されたときにどのファイルを提供しようとするかをNginxに指示するディレクティブを追加します。 ディレクトリを記述するために提供されるファイルは、ディレクトリインデックスと呼ばれます。 WordPressでは、このファイルは呼び出されます index.php. HTMLで記述された他のインデックスファイルは、フォールバックとして使用できます。

また、サーバーが応答するドメイン名を指定する必要があります。 WordPressが構成した唯一のサイトである場合、これは重要ではないかもしれませんが、このディレクティブを含めると、このファイルを再度変更せずに他のサイトを追加できます。 最初のserver_nameの後に名前を付けることで、一致する代替名(「www」が前に付いたサイトなど)を含めることができます。

サーバー{リッスン80;
root <span class="highlight">/var/www</span>;
index index.php index.html index.htm;

server_name <span class="highlight">your_domain.com</span> www.<span class="highlight">your_domain.com</span>;

}

サーバーブロックに入力した残りの情報は、ロケーションブロックにさらに区分されます。 ロケーションブロックを使用すると、リクエストが特定のパターンに一致した場合の処理に関する特定のルールを指定できます。

まず、ルートパーティションに一致するロケーションブロックを作成します。 これは、で定義したフォルダにあるファイルに適用されます。 root 指令。 このブロックには、ファイルの提供を試みる方法に関する一般的なルールが含まれます。

追加するルールは、ドメイン名の後に要求された正確なリソースに一致するファイルを見つけようとするようにNginxに指示します。 それでもうまくいかない場合は、同じ名前のディレクトリを見つけようとする必要があります。 これも失敗した場合は、要求されたリソースをPHPスクリプトに渡します。このスクリプトは、要求を処理するための適切な方法を見つけようとします。

このロケーションブロックの後に、php5-fpmツールへのPHPスクリプトの受け渡しを実際に処理するブロックを定義します。 これは、php5-fpm構成ファイルで定義した情報を使用して接続します。

サーバー{リッスン80;
root <span class="highlight">/var/www</span>;
index index.php index.html index.htm;

server_name <span class="highlight">your_domain.com</span> www.<span class="highlight">your_domain.com</span>;

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

}

この時点で、いくつかのことを強化したいと思います。 Nginxがファビコンリクエストとrobot.txtリクエスト(検索エンジンがサイトのインデックスを作成するために使用する)をどのように処理するかについて、いくつかのルールを作成します。 この情報のリクエストをログに記録する必要はありません。

その後、非表示のフォルダー(Linuxシステムでは開始ドットで示されます)へのアクセスを拒否するロケーションブロックがあります。 これにより、Apache構成に使用された可能性のあるファイルを提供できなくなります。 .htaccess ファイル。 これらのファイルをユーザーから保護する方が安全です。

最後に、uploadsまたはfilesディレクトリ内からPHPファイルが実行またはアクセスされないようにします。 これにより、サーバーが悪意のあるコードを実行するのを防ぐことができます。

完成したファイルは次のようになります。

サーバー{リッスン80;
root <span class="highlight">/var/www</span>;
index index.php index.html index.htm;

server_name <span class="highlight">your_domain.com</span> www.<span class="highlight">your_domain.com</span>;

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

location = /favicon.ico {
    log_not_found off;
    access_log off;
}

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

location ~ /\. {
    deny all;
}

location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}

}

終了したら、ファイルを保存して閉じます。 このファイルはすでにリンクされている必要があります sites-enabled ディレクトリなので、Nginxを起動するとアクティブになります。

スイッチを作る


現在、Apacheはポート80でファイルを提供しています。 これは、Nginxがそのポートをバインドしてリッスンできないことを意味します。 Nginxが引き継ぐことができるようにする前に、Apacheを停止する必要があります。

場合によっては、Apacheがサーバー上の他のコンテンツの提供に関与している場合は、Apacheをそのままにしておくことをお勧めします。 複数のサイトがあり、1つのサイトのみをNginxに移行している可能性があります。 この場合、Apache構成のポート80へのすべての参照を無効にする必要があります。

チェックする必要のあるファイルは次のとおりです。

/etc/apache2/ports.conf
/etc/apache2/apache2.conf
/etc/apache2/httpd.conf
/etc/apache2/sites-enabled/    ## Search all sites in this directory

Apacheを使用してサイトにサービスを提供し続け、Apacheポートを80から別のポートに変更する必要がある場合、インターネットからアクセスできるようにするには、Nginxを介してこれらをプロキシする必要があります。 これはこのチュートリアルの範囲外ですが、関連情報はこの記事にあります。

一部のコンテンツを提供するためにApacheを実行する必要がある場合は、構成ファイルでポートを切り替えた後、NginxをオンにしたときにApacheをリロードするだけです。 これにより、ポート80のコンテンツがNginxに切り替わり、Apacheは他のコンテンツに対して引き続き機能します。

sudo service apache2 reload && sudo service nginx start

ただし、Apacheがさらに必要でなく、すべてのコンテンツをNginxに移行した場合は、Nginxをロードする前にApacheをオフにすることができます。

sudo service apache2 stop && sudo service nginx start

Apacheがポート80の制御を放棄するか、Nginxを起動する前に完全に停止することが重要です。 これを行わないと、使用するように指示されたポートが使用できないため、Nginxの初期化が完了しない可能性があります。

移行が成功し、コンテンツがすべてNginxで提供されている場合は、Apacheと使用されていないすべての依存関係をアンインストールできます。

次のように入力すると、これらを見つけることができます。

dpkg --get-selections | grep apache

apache2                         install
apache2-mpm-prefork             install
apache2-utils                   install
apache2.2-bin                   install
apache2.2-common                install
libapache2-mod-auth-mysql       install
libapache2-mod-php5             install

次に、次のように入力してこれらをアンインストールできます。

sudo apt-get remove apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-auth-mysql libapache2-mod-php5

次のように入力することで、不要になった依存関係を処理することもできます。

sudo apt-get autoremove

結論


これで、WordPressが再び稼働するようになります。今回は、Nginxがサポートしています。 ApacheとNginxはどちらも同じように動作しますが、特にWordPressのようなフル機能のフロントエンドをバックアップする場合、Nginxはより少ないリソースで同じ作業を実行できることがよくあります。

これは必ずしもより高速なサイトにつながるとは限りませんが、サイトが大量のトラフィックを受信する場合は非常に重要になります。 使用するリソースが少ないということは、負荷が高い場合でもWebサーバーが正常に機能し続けることができることを意味します。 これは、コンテンツが再投稿されてトラフィックの流入が見られるようになった場合に重要になる可能性があります。 Nginxは、追加のリソースを割り当てることなく、そのトラフィックを処理するのに役立ちます。

ジャスティン・エリングウッド
モバイルバージョンを終了