Nginx(「エンジンx」と発音)は、無料のオープンソースの高性能HTTPサーバーです。 Nginxは、その安定性、豊富な機能セット、シンプルな構成、および低リソース消費で知られています。このチュートリアルでは、PHP5サポート(PHP-FPM経由)およびMySQLサポートを備えたCentOS6.4サーバーにNginxをインストールする方法を示します。
これがあなたのために働くという保証はありません!
1予備メモ
このチュートリアルでは、ホスト名server1.example.comとIPアドレス192.168.0.100を使用します。これらの設定はユーザーによって異なる場合があるため、必要に応じて置き換える必要があります。
2追加のリポジトリを有効にする
php-fpmは、公式のCentOSリポジトリからは入手できませんが、それ自体がEPELリポジトリに依存しているRemiRPMリポジトリからは入手できます。次のように両方のリポジトリを有効にできます:
rpm --import https://fedoraproject.org/static/0608B895.txt
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6 -8.noarch.rpm
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum install yum-priorities
/etc/yum.repos.d/epel.repoを編集します...
vi /etc/yum.repos.d/epel.repo
...そして[epel]セクションにpriority=10という行を追加します:
[epel] name =Enterprise Linux6用の追加パッケージ-$basearch#baseurl =http://download.fedoraproject.org/pub/epel/ 6 / $ basearchmirrorlist =https://mirrors.fedoraproject.org/metalink?repo =epel-6&arch =$ basearchfailovermethod =priorityenabled =1priority =10gpgcheck =1gpgkey =file:/// etc / pki / rpm-gpg / RPM-GPG -KEY-EPEL-6 [...] |
次に、/ etc / yum.repos.d / remi.repoの[remi]セクションに対して同じことを行い、さらに1に変更を有効にします:
vi /etc/yum.repos.d/remi.repo
[remi] name =Les RPM de remi pour Enterprise Linux $ releasever-$ basearch#baseurl =http://rpms.famillecollet.com/enterprise /$releasever/remi/$basearch/mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirrorenabled=1priority=10gpgcheck=1gpgkey=file:/// etc / pki / rpm-gpg / RPM -GPG-KEY-remifailovermethod =priority [remi-test] name =Les RPM de remi en test pour Enterprise Linux $ releasever-$ basearch#baseurl =http://rpms.famillecollet.com/enterprise/$releasever/test/ $ basearch / mirrorlist =http://rpms.famillecollet.com/enterprise/$releasever/test/mirrorenabled=0gpgcheck=1gpgkey=file:/// etc / pki / rpm-gpg / RPM-GPG-KEY-remi> |
3MySQL5のインストール
まず、次のようにMySQL5をインストールします。
yum install mysql mysql-server
次に、MySQLのシステム起動リンクを作成し(システムが起動するたびにMySQLが自動的に起動するように)、MySQLサーバーを起動します。
chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start
次に、ネットワークが有効になっていることを確認します。実行
netstat -tap | grep mysql
次のように表示されます:
[[email protected]〜]#netstat -tap | grep mysql
tcp 0 0 *:mysql *:*保護されたメール#1799 / mysqld
[そうでない場合は、/ etc / my.cnfを編集して、オプションskip-networkingをコメントアウトします。
vi /etc/my.cnf
[...]#skip-networking [...] |
MySQLサーバーを再起動します:
/etc/init.d/mysqld restart
実行
mysql_secure_installation
ユーザーrootのパスワードを設定するには(そうでない場合は、誰でもMySQLデータベースにアクセスできます!):
[[メール保護]〜]#mysql_secure_installation
注:このスクリプトのすべての部分を実行することは、すべてのMySQLに推奨されます
本番環境で使用するサーバー!!各ステップを注意深くお読みください。
MySQLにログインしてセキュリティで保護するには、rootユーザーの現在の
パスワードが必要です。 MySQLをインストールしたばかりで、
rootパスワードをまだ設定していない場合、パスワードは空白になります。
ここで、Enterキーを押すだけです。
Enter rootの現在のパスワード(noneの場合は入力):<-ENTER
OK、正常に使用されたパスワード、次に進みます...
rootパスワードを設定すると、誰もMySQLにログインできないようになります
適切な承認なしのrootユーザー。
rootパスワードを設定しますか? [Y / n] <-ENTER
新しいパスワード:<-yourrootsqlpassword
新しいパスワードを再入力:<-yourrootsqlpassword
パスワードが正常に更新されました!
特権テーブルを再読み込みしています。 。
...成功!
デフォルトでは、MySQLのインストールには匿名のユーザーが含まれているため、誰でも
ユーザーアカウントを持っていなくてもMySQLにログインできます。
それらのために作成されました。これは、テストのみを目的としており、インストールを
少しスムーズにすることを目的としています。
本番環境に移動する前に、それらを削除する必要があります。
匿名ユーザーを削除しますか? [Y / n] <-ENTER
...成功!
通常、rootは「localhost」からの接続のみを許可する必要があります。これにより、
誰かが、ネットワークからのルートパスワードを推測できないようになります。
ルートログインをリモートで禁止しますか? [Y / n] <-ENTER
... Success!
デフォルトでは、MySQLには「test」という名前のデータベースが付属しており、誰でもアクセスできます。
これもテストのみを目的としており、本番環境に移動する前に
削除する必要があります。
テストデータベースを削除してアクセスしますか? [Y / n] <-ENTER
-テストデータベースを削除しています...
...成功しました!
-テストデータベースの特権を削除しています...
...成功しました!
特権テーブルを再読み込みすると、これまでに行われたすべての変更が
すぐに有効になります。
特権テーブルを今すぐ再読み込みしますか? [Y / n] <-ENTER
...成功!
クリーンアップ...
すべて完了しました!上記のすべての手順を完了した場合、MySQLのインストールは安全になっているはずです。
MySQLをご利用いただきありがとうございます。
[[メールで保護]〜]#
4Nginxのインストール
Nginxは、CentOS 6.4(EPELから)のパッケージとして提供されており、次のようにインストールできます。
yum install nginx
次に、nginxのシステム起動リンクを作成して起動します:
chkconfig --levels 235 nginx on
/etc/init.d/nginx start
ウェブサーバーのIPアドレスまたはホスト名をブラウザ(例:http://192.168.0.100)に入力すると、nginxのウェルカムページが表示されます:
5PHP5のインストール
PHP5をPHP-FPMを介してnginxで動作させることができます(PHP-FPM(FastCGI Process Manager)は、あらゆるサイズのサイト、特に忙しいサイトに役立ついくつかの追加機能を備えた代替のPHP FastCGI実装です)。次のように、phpスクリプトからMySQLを使用する場合に必要なphp-cliおよび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-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy
APCは、PHP中間コードをキャッシュおよび最適化するための無料のオープンPHPオペコードキャッシャーです。これは、eAcceleratorやXcacheなどの他のPHPオペコードキャッシャーに似ています。 PHPページを高速化するために、これらのいずれかをインストールすることを強くお勧めします。
APCは次のようにインストールできます:
yum install php-pecl-apc
次に、/ etc / php.iniを開き、cgi.fix_pathinfo =0を設定します:
vi /etc/php.ini
[...]; cgi.fix_pathinfoは、CGIの*実際の* PATH_INFO/PATH_TRANSLATEDサポートを提供します。 PHPの;以前の動作は、PATH_TRANSLATEDをSCRIPT_FILENAMEに設定し、grokしないことでした。 PATH_INFOとは何ですか。 PATH_INFOの詳細については、cgiの仕様を参照してください。設定;これを1にすると、PHPCGIはそのパスを仕様に準拠するように修正します。設定;ゼロの場合、PHPは以前と同じように動作します。デフォルトは1です。スクリプトを修正する必要があります。 PATH_TRANSLATEDではなくSCRIPT_FILENAMEを使用します。; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfocgi.fix_pathinfo=0 [...] |
(http://wiki.nginx.org/Pitfallsを読んで、これを行う必要がある理由を確認してください。)
それに加えて、
のようなエラーを回避するために[08-Aug-2011 18:07:08] PHP警告:phpinfo():システムのタイムゾーン設定に依存することは安全ではありません。 date.timezone設定またはdate_default_timezone_set()関数を使用する必要があります。これらの方法のいずれかを使用してもこの警告が表示される場合は、タイムゾーン識別子のスペルを間違えている可能性があります。 2行目の/usr/share/nginx/html/info.phpで、代わりに「CEST / 2.0/DST」に「Europe/Berlin」を選択しました
... /var/log/php-fpm/www-error.logで、ブラウザでPHPスクリプトを呼び出す場合は、/ etc/php.iniでdate.timezoneを設定する必要があります。
[...] [Date];日付関数で使用されるデフォルトのタイムゾーンを定義します。 http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezonedate.timezone ="Europe / Berlin" [...] |
次のコマンドを実行すると、システムの正しいタイムゾーンを見つけることができます:
cat / etc / sysconfig / clock
[[email protected] nginx]#cat / etc / sysconfig / clock
ZONE ="Europe / Berlin"
[[email protected] nginx]#
次に、php-fpmのシステム起動リンクを作成して起動します:
chkconfig --levels 235 php-fpm on
/etc/init.d/php-fpm start
PHP-FPMは、ポート9000でFastCGIサーバーを実行するデーモンプロセス(initスクリプト/etc/init.d/php-fpmを使用)です。
6nginxの構成
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; [...] |
仮想ホストは、/ etc / nginx/conf.dディレクトリのサーバー{}コンテナで定義されます。デフォルトの仮想ホスト(/etc/nginx/conf.d/default.conf内)を次のように変更してみましょう:
vi /etc/nginx/conf.d/default.conf
[...] server {listen 80;サーバー名 _; #charset koi8-r; #access_log logs / host.access.log main;場所/{ルート/usr/ share / nginx / html; index index.php index.html index.htm; } error_page 404 /404.html;場所=/404.html{ルート/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_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_paramsを含める; } #Apacheのドキュメントルートがnginxの1つの場所と一致する場合、.htaccessファイルへのアクセスを拒否します#/\。ht{すべて拒否; }} |
サーバー名 _;これをデフォルトのキャッチオール仮想ホストにします(もちろん、www.example.comのようにここでホスト名を指定することもできます)。
場所/部分で、インデックス行にindex.phpを追加しました。ルート/usr/ share / nginx / html;ドキュメントルートがディレクトリ/usr/ share / nginx/htmlであることを意味します。
PHPの重要な部分は、場所〜\ .php${}スタンザです。コメントを外して有効にします。ルート行をWebサイトのドキュメントルート(例:root / usr / share / nginx / html;)に変更します。 try_files $ uri=404;という行を追加したことに注意してください。ゼロデイエクスプロイトを防ぐため(http://wiki.nginx.org/Pitfalls#Passing_Unmanaged_Requests_to_PHPおよびhttp://forum.nginx.org/read.php?2,88845,page=3を参照)。 fastcgi_param行をfastcgi_paramに変更してください。SCRIPT_FILENAME$document_root$ fastcgi_script_name;そうしないと、PHPインタープリターがブラウザーで呼び出したPHPスクリプトを見つけられないためです($document_rootは/usr / share / nginx / htmlに変換されます。これは、ドキュメントルートとして設定したものだからです)。
PHP-FPMはデフォルトで127.0.0.1のポート9000でリッスンしているため、nginxにfastcgi_pass127.0.0.1:9000;という行で127.0.0.1:9000に接続するように指示します。 PHP-FPMにUnixソケットを使用させることも可能です。これについては第7章で説明します。
次に、ファイルを保存してnginxをリロードします:
/etc/init.d/nginxリロード
次に、ドキュメントルート/ usr / share / nginx / html ...
に次のPHPファイルを作成します。vi /usr/share/nginx/html/info.php
<?phpphpinfo();?> |
次に、そのファイルをブラウザ(http://192.168.0.100/info.phpなど)で呼び出します。
ご覧のとおり、サーバーAPI行に示されているように、PHP5は機能しており、FPM/FastCGIを介して機能しています。さらに下にスクロールすると、MySQLモジュールを含むPHP5ですでに有効になっているすべてのモジュールが表示されます。
7PHP-FPMでUnixソケットを使用する
デフォルトでは、PHP-FPMは127.0.0.1のポート9000でリッスンしています。 PHP-FPMにTCPオーバーヘッドを回避するUnixソケットを使用させることも可能です。これを行うには、/ etc / php-fpm.d / www.conf ...
を開きます。vi /etc/php-fpm.d/www.conf
...そしてリッスンラインを次のように見せます:
[...]; listen =127.0.0.1:9000listen =/tmp/php5-fpm.sock [...] |
次に、PHP-FPMをリロードします:
/etc/init.d/php-fpmリロード
次に、nginx構成とすべてのvhostを確認し、行fastcgi_pass127.0.0.1:9000;を変更します。 fastcgi_pass unix:/tmp/php5-fpm.sock;、例:このように:
vi /etc/nginx/conf.d/default.conf
[...] location〜 \ .php $ {root / usr / share / nginx / html; try_files $ uri =404; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_paramsを含める; } [...] |
最後にnginxをリロードします:
/etc/init.d/nginxリロード
8リンク
- nginx:http://nginx.org/
- nginx Wiki:http://wiki.nginx.org/
- PHP:http://www.php.net/
- PHP-FPM:http://php-fpm.org/
- MySQL:http://www.mysql.com/
- CentOS:http://www.centos.org/
FalkoTimmeはの所有者 Timme Hosting(超高速nginx Webホスティング)。彼はHowtoForge(2005年以降)の主任メンテナーであり、ISPConfig(2000年以降)のコア開発者の1人です。彼はまた、O'Reillyの本「LinuxSystemAdministration」にも寄稿しています。