サーバー設定 · 3 min read · Jan 26, 2026

Fedora 18 における PHP5 (および PHP-FPM) と MySQL サポートを持つ Nginx のインストール

Fedora 18 における PHP5 (および PHP-FPM) と MySQL サポートを持つ Nginx のインストール

Version 1.0
Author: Falko Timme
Follow me on Twitter

Nginx (発音は「エンジンエックス」) は、無料でオープンソースの高性能 HTTP サーバーです。Nginx は、その安定性、豊富な機能セット、シンプルな設定、低リソース消費で知られています。このチュートリアルでは、PHP5 サポート (PHP-FPM 経由) と MySQL サポートを持つ Fedora 18 サーバーに Nginx をインストールする方法を示します。

私は、これがあなたにとって機能することを保証するものではありません!

1 前提条件

このチュートリアルでは、ホスト名 server1.example.com と IP アドレス 192.168.0.100 を使用します。これらの設定はあなたの環境によって異なる場合があるため、適宜置き換えてください。

2 MySQL 5 のインストール

まず、次のようにして MySQL 5 をインストールします:

yum install mysql mysql-server

次に、MySQL のシステム起動リンクを作成し (システム起動時に MySQL が自動的に起動するように)、MySQL サーバーを起動します:

systemctl enable mysqld.service  
systemctl start mysqld.service

次に、ネットワークが有効になっているか確認します。次のコマンドを実行します:

netstat -tap | grep mysql

次のような出力が表示されるはずです:

[root@server1 ~]# netstat -tap | grep mysql  
tcp        0      0 *:mysql                     *:*                         LISTEN      1116/mysqld  
[root@server1 ~]#

表示されない場合は、/etc/my.cnf を編集し、skip-networking オプションをコメントアウトします:

vi /etc/my.cnf

| [...] #skip-networking [...] |

その後、MySQL サーバーを再起動します:

systemctl restart mysqld.service

次に、次のコマンドを実行して、root ユーザーのパスワードを設定します (そうしないと、誰でもあなたの MySQL データベースにアクセスできてしまいます!):

mysql_secure_installation

NOTE: このスクリプトのすべての部分を実行することは、すべての MySQL サーバーで推奨されます。各ステップを注意深くお読みください!

MySQL にログインしてセキュリティを強化するためには、root ユーザーの現在のパスワードが必要です。MySQL をインストールしたばかりで、まだ root パスワードを設定していない場合、パスワードは空白のままですので、ここではただ Enter を押してください。

現在の root パスワードを入力してください (なしの場合は Enter を押してください): <– ENTER
OK, パスワードが正常に使用されました。次に進みます…

root パスワードを設定することで、適切な認証なしに誰も MySQL の root ユーザーにログインできないようにします。

root パスワードを設定しますか? [Y/n] <– ENTER
新しいパスワード: <– yourrootsqlpassword
新しいパスワードを再入力してください: <– yourrootsqlpassword
パスワードが正常に更新されました!
特権テーブルを再読み込みしています..
… 成功!

デフォルトでは、MySQL のインストールには匿名ユーザーが含まれており、誰でもユーザーアカウントを作成せずに MySQL にログインできるようになっています。これはテスト用にのみ意図されており、インストールを少しスムーズにするためのものです。生産環境に移行する前に、これらを削除する必要があります。

匿名ユーザーを削除しますか? [Y/n] <– ENTER
… 成功!

通常、root は ‘localhost’ からのみ接続を許可されるべきです。これにより、誰かがネットワークから root パスワードを推測できなくなります。

リモートからの root ログインを禁止しますか? [Y/n] <– ENTER
… 成功!

デフォルトでは、MySQL には誰でもアクセスできる ‘test’ という名前のデータベースが含まれています。これもテスト用にのみ意図されており、生産環境に移行する前に削除する必要があります。

テストデータベースとそのアクセスを削除しますか? [Y/n] <– ENTER

  • テストデータベースを削除しています…
    … 成功!
  • テストデータベースの特権を削除しています…
    … 成功!

特権テーブルを再読み込みすることで、これまでに行ったすべての変更が即座に適用されることを保証します。

特権テーブルを今すぐ再読み込みしますか? [Y/n] <– ENTER
… 成功!

クリーンアップ中…

すべて完了しました!上記のすべてのステップを完了した場合、あなたの MySQL インストールは今や安全であるはずです。

MySQL をご利用いただきありがとうございます!

[root@server1 ~]#

3 Nginx のインストール

Nginx は Fedora 18 のパッケージとして利用可能で、次のようにインストールできます:

yum install nginx

次に、nginx のシステム起動リンクを作成し、起動します:

systemctl enable nginx.service  
systemctl start nginx.service

ブラウザにウェブサーバーの IP アドレスまたはホスト名を入力します (例: http://192.168.0.100)。Nginx のウェルカムページが表示されるはずです:

4 PHP5 のインストール

PHP5 を Nginx で PHP-FPM 経由で動作させることができます (PHP-FPM (FastCGI プロセスマネージャ) は、あらゆる規模のサイト、特に忙しいサイトに役立つ追加機能を持つ PHP FastCGI の代替実装です)。公式の Fedora 18 リポジトリには php-fpm パッケージがあるため、php-cli や MySQL を PHP スクリプトから使用するために必要な php-mysql などのいくつかの PHP5 モジュールと一緒に php-fpm をインストールできます:

yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

APC は、PHP 中間コードをキャッシュおよび最適化するための無料でオープンな PHP オペコードキャッシャーです。他の PHP オペコードキャッシャー (eAccelerator や Xcache など) と似ています。PHP ページの速度を向上させるために、これらのいずれかをインストールすることを強くお勧めします。

APC は次のようにインストールできます:

yum install php-pecl-apc

次のようなエラーを避けるために:

[13-Nov-2011 22:13:16] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /usr/share/nginx/html/info.php on line 2

… /var/log/php-fpm/www-error.log で PHP スクリプトをブラウザで呼び出すときに、/etc/php.ini を開いて date.timezone を設定する必要があります:

vi /etc/php.ini

| [...] [Date] ; 日付関数で使用されるデフォルトのタイムゾーンを定義します ; http://php.net/date.timezone date.timezone = "Europe/Berlin" [...] |

システムの正しいタイムゾーンを確認するには、次のコマンドを実行します:

cat /etc/sysconfig/clock
[root@server1 ~]# cat /etc/sysconfig/clock  
ZONE="Europe/Berlin"  
[root@server1 ~]#

次に、php-fpm のシステム起動リンクを作成し、起動します:

systemctl enable php-fpm.service  
systemctl start php-fpm.service

PHP-FPM は、ポート 9000 で FastCGI サーバーを実行するデーモンプロセスです。

5 Nginx の設定

Nginx の設定は /etc/nginx/nginx.conf にあり、今開きます:

vi /etc/nginx/nginx.conf

設定は理解しやすいです (詳細については、こちらを参照してください: http://wiki.codemongers.com/NginxFullExample および http://wiki.codemongers.com/NginxFullExample2)

まず (これはオプションです)、ワーカープロセスの数を増やし、keepalive_timeout を適切な値に設定できます:

| [...] worker_processes 4; [...] keepalive_timeout 2; [...] |

仮想ホストは server {} コンテナ内で定義されます。デフォルトの vhost は /etc/nginx/nginx.conf のファイルの下部で定義されています - 次のように修正しましょう:

vi /etc/nginx/nginx.conf

| [...] server { listen 80; server_name _; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } # サーバーエラーページを静的ページ /40x.html にリダイレクト # error_page 404 /404.html; location = /40x.html { root /usr/share/nginx/html; } # サーバーエラーページを静的ページ /50x.html にリダイレクト # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # PHP スクリプトを 127.0.0.1:80 でリッスンしている Apache にプロキシ # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # PHP スクリプトを 127.0.0.1:9000 でリッスンしている FastCGI サーバーに渡す # location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # .htaccess ファイルへのアクセスを拒否します。Apache のドキュメントルートが # nginx のものと一致する場合 # location ~ /\.ht { deny all; } } [...] |

servername ; はこれをデフォルトのキャッチオール vhost にします (もちろん、ここに www.example.com のようなホスト名を指定することもできます)。

location / 部分では、index 行に index.php を追加しました。root /usr/share/nginx/html; はドキュメントルートが /usr/share/nginx/html ディレクトリであることを意味します。

PHP にとって重要な部分は location ~ .php$ {} ステanza です。これをコメントアウト解除して有効にします。root 行をウェブサイトのドキュメントルート (例: root /usr/share/nginx/html;) に変更してください。fastcgi_param 行を fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; に変更することを確認してください。そうしないと、PHP インタープリターがブラウザで呼び出す PHP スクリプトを見つけられなくなります。

try_files $uri =404; 行を追加して、ゼロデイの脆弱性を防ぐことに注意してください (http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP および http://forum.nginx.org/read.php?2,88845,page=3 を参照)。代わりに、try_files $uri =404; 行を使用したくない場合は、/etc/php5/fpm/php.ini で cgi.fix_pathinfo = 0; を設定できます (その後、PHP-FPM を再読み込みすることを忘れないでください)。

ファイルを保存して、nginx を再読み込みします:

systemctl reload nginx.service

次に、ドキュメントルート /usr/share/nginx/html に次の PHP ファイルを作成します…

vi /usr/share/nginx/html/info.php

| |

次に、ブラウザでそのファイルを呼び出します (例: http://192.168.0.100/info.php):

ご覧の通り、PHP5 は動作しており、FPM/FastCGI 経由で動作しています。Server API 行に示されています。さらに下にスクロールすると、MySQL モジュールを含む、すでに有効になっているすべてのモジュールが表示されます:

6 リンク

著者について

Falko Timme は Timme Hosting (超高速 Nginx ウェブホスティング) のオーナーです。彼は HowtoForge のリードメンテイナー (2005 年以来) であり、ISPConfig のコア開発者の一人です (2000 年以来)。また、O’Reilly の書籍「Linux システム管理」にも貢献しています。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。