このチュートリアルでは、PHPサポート(PHP-FPM経由)およびMySQL(MariaDB)サポートを備えたCentOS7サーバーにNginxをインストールする方法を示します。
LEMPとは何ですか?
Nginx(「エンジンx」と発音)は、無料のオープンソースの高性能HTTPサーバーです。 Nginxは、その安定性、豊富な機能セット、シンプルな構成、および低リソース消費で知られています。
LEMPの前提条件
このチュートリアルでは、ホスト名server1.example.comとIPアドレス192.168.1.100を使用します。これらの設定はユーザーによって異なる場合があるため、必要に応じて置き換える必要があります。
このチュートリアルでは、nanoエディターを使用して構成ファイルを編集します。 Nanoはこのようにインストールできます。
yum -y install nano
ファイアウォールをインストールすることをお勧めします。まだfirewalldをインストールしておらず、ファイアウォールを使用したい場合は、次のコマンドを使用してインストールしてください。
yum -y install firewalld
ファイアウォールを起動し、起動時にファイアウォールを起動できるようにします。
systemctl start Firewalld.service
systemctl enable Firewalld.service
次に、SSHポートを開いて、SSHでサーバーに接続できることを確認します。
Firewall-cmd --permanent --zone =public --add-service =ssh
firewall-cmd --reload
最新のNginxは公式のCentOSリポジトリから入手できないため、インストールするためにNginxプロジェクトのリポジトリを含めます。
nano /etc/yum.repos.d/nginx.repo
[nginx] name =nginx repobaseurl =http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1
MySQL(MariaDB)のインストール
まず、MySQLの代わりにMariaDBをインストールします。 MariaDBはMySQLの無料フォークです。シェルで次のコマンドを実行して、MariaDBデータベースサーバーをインストールします。
yum -y install mariadb mariadb-server net-tools
次に、MariaDBのシステム起動リンクを作成し(システムが起動するたびに自動的に起動するように)、MariaDBサーバーを起動します。
systemctl enable mariadb.service
systemctl start mariadb.service
次に、ネットワークが有効になっていることを確認します。 MraiDBサービスは互換性のあるデータベースサーバーであるため、mysqlという名前であることに注意してください。実行
netstat -tap | grep mysql
次のように表示されます:
[[メール保護]〜]#netstat -tap | grep mysql
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 19842 / mysqld
実行:
mysql_secure_installation
ユーザーrootのパスワードを設定するには(そうでない場合は、誰でもMySQLデータベースにアクセスできます!):
[[email protected]〜]#mysql_secure_installation
/ usr / bin / mysql_secure_installation:379行目:find_mysql_client:コマンドが見つかりません
注:このスクリプトのすべての部分を実行することは、本番環境で使用するすべてのMariaDBサーバーに推奨されます。
各ステップを注意深くお読みください!
MariaDBにログインして保護するには、rootユーザーの現在の
パスワードが必要です。 MariaDBをインストールしたばかりで、
rootパスワードをまだ設定していない場合、パスワードは空白になります。
ここで、Enterキーを押すだけです。
rootの現在のパスワードを入力してください(noneの場合は入力してください):
OK、正常に使用されたパスワード、次に進みます...
rootパスワードを設定すると、適切な認証なしに誰もMariaDB
rootユーザーにログインできないようになります。
ルートパスワードを設定しますか? [Y / n] <-ENTER
新しいパスワード:<-yourrootsqlpassword
新しいパスワードを再入力:<-yourrootsqlpassword
パスワードが正常に更新されました!
特権テーブルを再読み込みしています。 。
...成功!
デフォルトでは、MariaDBインストールには匿名ユーザーがあり、
ユーザーアカウントを作成しなくても誰でも
MariaDBにログインできます。
これはテストのみを目的としており、インストールを少しスムーズにすることを目的としています。
本番環境に移行する前にそれらを削除する必要があります。
匿名ユーザーを削除しますか? [Y / n] <-ENTER
...成功!
通常、rootは「localhost」からの接続のみを許可する必要があります。これにより、
誰かがネットワークからルートパスワードを推測できないようになります。
rootログインをリモートで禁止しますか? [Y / n] <-ENTER
...成功!
デフォルトでは、MariaDBには「test」という名前のデータベースが付属しており、誰でも
アクセスできます。これもテストのみを目的としているため、
本番環境に移行する前に削除する必要があります。
テストデータベースを削除してアクセスしますか? [Y / n] <-ENTER
-テストデータベースを削除しています...
...成功しました!
-テストデータベースの権限を削除しています...
...成功!
特権テーブルをリロードすると、これまでに行われたすべての変更が
すぐに有効になります。
特権テーブルを今すぐリロードしますか? [Y / n] <-ENTER
...成功!
クリーンアップ...
すべて完了です。上記のすべての手順を完了すると、MariaDBの
インストールは安全になります。
MariaDBをご利用いただきありがとうございます!
[[メール保護]〜]#
[[メール保護]〜]#mysql_secure_installation
Nginxのインストール
Nginxはnginx.orgからパッケージとして入手でき、次のようにインストールできます:
yum -y install nginx
次に、nginxのシステム起動リンクを作成して起動します:
systemctl enable nginx.service
systemctl start nginx.service
ポート80がすでに使用されているというエラーが発生する可能性があります。エラーメッセージは次のようになります。
[[email protected]〜]#service nginx start
nginxの開始:nginx:[emerg] bind()to 0.0.0.0:80 failed(98:アドレスはすでに使用されています)
nginx: [emerg] bind()to 0.0.0.0:80 failed(98:アドレスはすでに使用中)
nginx:[emerg] bind()to 0.0.0.0:80 failed(98:アドレスはすでに使用中)
nginx:[emerg] bind()to 0.0.0.0:80 failed(98:アドレスはすでに使用中)
nginx:[emerg] bind()to 0.0.0.0:80 failed(98:アドレスはすでに使用中) use)
nginx:[emerg]はまだバインドできませんでした()
#pre>これは、別のWebサーバー(おそらくApache)がこのサーバーですでに実行されていることを意味します。 Apacheサービスを停止してから、NGINXのサービスを開始します:
systemctl stop httpd.service
yum remove httpd
systemctl disable httpd.service次に、Nginxを再起動してみてください。
systemctl start nginx.serviceファイアウォールでHTTPポートとHTTPSポートを開きます
Firewall-cmd --permanent --zone =public --add-service =http
Firewall-cmd --permanent --zone =public --add-service =https
firewall-cmd --リロードシェルでの出力は次のようになります。
[[email protected]〜]#firewall-cmd --permanent --zone =public --add-service =http
success
[[email protected]〜]#firewall-cmd- -permanent --zone =public --add-service =https
success
[[email protected]〜]#firewall-cmd --reload
success
[[email protected ]〜]#WebサーバーのIPアドレスまたはホスト名をブラウザ(例:http://192.168.1.100)に入力すると、Nginxのウェルカムページが表示されます。
PHPのインストール
PHP-FPM(FastCGI Process Manager)を使用して、PHP5をNginxで動作させることができます。 PHP-FPMは、あらゆるサイズのサイト、特に忙しいサイトに役立ついくつかの追加機能を備えた、代替のPHPFastCGI実装です。次のように、phpスクリプトからMySQLを使用する場合に必要なphp-cliおよびphp-mysqlなどのいくつかのPHP5モジュールと一緒にphp-fpmをインストールできます。
yum -y install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-mbstring php-xml php-xmlrpc php-mbstring php- snmp php-soapAPCは、PHP中間コードをキャッシュおよび最適化するための無料のオープンPHPオペコードキャッシャーです。これは、eAcceleratorやXcacheなどの他のPHPオペコードキャッシャーに似ています。 PHPページを高速化するために、これらのいずれかをインストールすることを強くお勧めします。
PHPpeclリポジトリからAPCをインストールします。 PECLでは、APCパッケージをコンパイルするためにCentos開発ツールをインストールする必要があります。
yum -y install php-devel
yum -ygroupinstall'開発ツール'APCをインストールします:
pecl install apc[[email protected]〜]#pecl install apc
APC-3.1.13.tgzのダウンロード...
APC-3.1.13.tgz(171,591バイト)のダウンロードを開始
.................完了:171,591バイト
55ソースファイル、ビルド
実行:phpize
構成:
PHP Apiバージョン:20100412
Zend Module Api No:20100525
Zend Extension Api No:220100525
APCで内部デバッグを有効にする[no]:<-ENTER
リクエストファイルごとに有効にする情報APCキャッシュから使用されるファイルについて[no]:<-ENTER
スピンロックを有効にする(EXPERIMENTAL)[no]:<-ENTER
メモリ保護を有効にする(EXPERIMENTAL)[no]:<- ENTER
pthreadミューテックスを有効にする(デフォルト)[no]:<-ENTER
pthread読み取り/書き込みロックを有効にする(実験的)[yes]:<-ENTER
/ var/tmpにビルドする/pear-build-rootVrjsuq/APC-3.1.13
......次に、/ etc / php.iniを開き、cgi.fix_pathinfo =0を設定します:
nano /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を読んで、これを行う必要がある理由を確認してください。)
次の行を追加します:
[...] extension =apc.so/etc/php.iniファイルの最後にあります。
それに加えて、
のようなタイムゾーンエラーを回避するために[28-June-2016 14:21:01] 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を設定する必要があります。
[...][日付];日付関数で使用されるデフォルトのタイムゾーンを定義します。 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のシステム起動リンクを作成して起動します:
systemctl enable php-fpm.service
systemctl start php-fpm.servicePHP-FPMは、ポート9000でFastCGIサーバーを実行するデーモンプロセス(initスクリプト/etc/init.d/php-fpmを使用)です。
Nginxの構成
nginx構成は/etc/nginx/nginx.confにあり、これを今開いています:
nano /etc/nginx/nginx.confまず(これはオプションです)、ワーカープロセスの数を増やし、keepalive_timeoutを適切な値に設定できます。
[...] worker_processes 4; [...] keepalive_timeout 2; [...]仮想ホストは、/ etc / nginx/conf.dディレクトリのサーバー{}コンテナで定義されます。デフォルトの仮想ホスト(/etc/nginx/conf.d/default.conf内)を次のように変更してみましょう:
nano /etc/nginx/conf.d/default.conf[...] server {listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main;場所/{ルート/usr/ share / nginx / html; index index.html index.htm index.php; } #error_page 404 /404.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でリッスンしているため、fastcgi_pass127.0.0.1:9000;という行で127.0.0.1:9000に接続するようにNginxに指示します。 PHP-FPMにUnixソケットを使用させることも可能です。これについては第7章で説明します。
次に、ファイルを保存してNginxをリロードします:
systemctl restart nginx.service次に、ドキュメントルート/ usr / share / nginx / html ...
に次のPHPファイルを作成します。nano /usr/share/nginx/html/info.php<?phpphpinfo();?>次に、そのファイルをブラウザ(http://192.168.1.100/info.phpなど)で呼び出します。
ご覧のとおり、PHP 5は機能しており、サーバーAPI行に示されているように、FPM/FastCGIを介して機能しています。さらに下にスクロールすると、MySQLモジュールを含むPHP5ですでに有効になっているすべてのモジュールが表示されます。
PHP-FPMにUnixソケットを使用させる
デフォルトでは、PHP-FPMは127.0.0.1のポート9000でリッスンしています。 PHP-FPMにTCPオーバーヘッドを回避するUnixソケットを使用させることも可能です。これを行うには、/ etc / php-fpm.d / www.conf ...
を開きます。nano /etc/php-fpm.d/www.conf...そしてリッスンラインを次のように見せます:
[...]; listen =127.0.0.1:9000listen =/var/run/php-fpm/php5-fpm.sock [...]次に、PHP-FPMをリロードします:
systemctl restart php-fpm.service次に、Nginx構成とすべてのホストを確認し、行fastcgi_pass127.0.0.1:9000;を変更します。 fastcgi_pass unix:/tmp/php5-fpm.sock;、例:このように:
vi /etc/nginx/conf.d/default.conf[...]場所〜\ .php${ルート/usr/ share / nginx / html; try_files $ uri =404; fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_paramsを含める; } [...]最後に、Nginxをリロードします:
systemctl restart nginx.serviceこのCentOS7サーバーを仮想マシンとしてダウンロード このセットアップは、howtoforgeサブスクライバー向けにova / ovf形式(VMWareおよびVirtualboxと互換性があります)の仮想マシンのダウンロードとして利用できます。
VMのログインの詳細
- ルートパスワードは:howtoforge
- 「管理者」ユーザーのパスワードは次のとおりです:howtoforge
最初のログイン時に両方のパスワードを変更してください。
- VMのIPアドレスは192.168.1.100です
リンク
- 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/
Cent OS