Linuxサーバーでトラフィックの多いWebサイト用にApacheとPHPを構成する方法
LAMPスタック(Linux、Apache、MySQL、PHP)のインストール方法に関するほとんどすべてのチュートリアルでは、PHPスクリプトの処理に組み込みのApacheモジュールを使用することをお勧めします。たとえば、Ubuntuでは、sudo apt install libapache2-mod-php
などのコマンドを使用するときにこれを有効にします。 パッケージをインストールします。これにより、Apacheはmpm_preforkを使用するようになります。訪問者がWebサイトにアクセスするたびに、その接続を処理するための新しいプロセスが起動されます。これは、トラフィックが少ないときにうまく機能します。
しかし、突然のトラフィックのバーストが発生した場合、それは大きな問題になります。たとえば、Redditの投稿にあなたのウェブサイトが含まれている場合があり、その投稿が人気を博すと、わずか数分で数千人の訪問者を獲得できる可能性があります。
最良のシナリオでは、Apacheがトラフィックバーストを処理できる場合、一部の不運な訪問者は、ページが読み込まれるまでおそらく30〜60秒待たなければならない可能性があります。これは、今日の世界ではばかげています。最悪のシナリオでは、サーバーはひどく遅れ始め、リソースの不足のために一部の接続が単に切断されます。この場合、訪問者にはブラウザにエラーが表示されます。
何百、何千もの関心のある読者、顧客、ファンの注意を失う可能性があるため、どちらの方法でも良いシナリオではありません。
残念ながら、PHPはどちらにしてもかなり大きなリソースを大量に消費します。ただし、mpm_eventを使用すると、Apacheはトラフィックの突然のバーストをはるかに効率的な方法で処理できます。ただし、サーバーには少なくとも2GBのRAMと2つのCPUコア(実または仮想)を搭載することをお勧めします。1秒あたりの訪問者数が10人を超えるなど、トラフィックが急増することが予想される場合は、さらに多くのコアを搭載することをお勧めします。仮想プライベートサーバーを使用している場合は、状況とSSDストレージに仮想CPUコアを追加します。 RAMはセカンダリです。
DebianベースのディストリビューションでApacheMPMイベントとPHP-FPMを使用する方法
Debian、Ubuntu、またはこのファミリの他のディストリビューションでは、「libapache2-mod-php」パッケージのインストールを避けてください。 Apacheをインストールすると、デフォルトでMPMイベントが使用されます。ただし、前述のパッケージをインストールすると、スクリプトによってMPMイベントが無効になり、MPMプリフォークが有効になります。 Apache PHPモジュールは、mpm_preforkでのみ(安全に)機能します。もちろん、「libapache2-mod-php」がなければ、PHPファイル用のプロセッサはありません。したがって、Apacheに含まれているPHPモジュールの代わりにPHP-FPMを使用します。新しいサーバーにLAMPスタックをインストールする方法は次のとおりです。 Webアプリケーションの要件に応じて手順を調整できます。
まず、rootとしてログインします。次に、Apacheをインストールします。
apt update && apt install apache2
この時点で、Apacheは実際にデフォルトで有効になっているMPMイベントで出荷されていることがわかります。
apachectl -V
PHP-FPMをインストールします。
apt install php-fpm
ApacheでPHPプロセッサを有効にする方法の説明が表示されます。
FastCGIプロトコルを有効にします。
a2enmod proxy_fcgi
ApacheのPHP-FPMデフォルト構成を有効にします。
a2enconf php7.0-fpm
注 :Debian / Ubuntuの将来のバージョンでは、このコマンドは別のものに変更される可能性があります。 a2enconf php7.6-fpm
、PHP-FPMは別のバージョンになるためです。
Apacheを再起動します。
systemctl restart apache2
PHPアプリケーションの残りの要件をインストールします。次に例を示します:
apt install mariadb-server php-mysql
これにより、データベースサーバーとPHP MySQLモジュールがインストールされ、PHPアプリケーションがデータベースに接続できるようになります。
RedHatベースのディストリビューションでApacheMPMイベントとPHP-FPMを使用する方法
他の一般的なサーバー配布の選択肢は、RedHatまたはCentOSです。上記と同じように、MPMイベントが有効でPHP-FPMが有効になっているApacheのクリーンインストールの例が提供されます。
rootとしてログインし、Apacheをインストールします。
yum install httpd
Debianベースのディストリビューションとは異なり、ここでは、少なくとも執筆時点で入手可能な最新のCentOS 7では、ApacheがデフォルトでMPMプリフォークを使用していることがわかります。
apachectl -V
MPMイベントを有効にするには、構成ファイルを編集する必要があります。
sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf
これにより、#
が追加されます LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
の行にコメント(非アクティブ化)するための署名 。
次に、#LoadModule mpm_event_module modules/mod_mpm_event.so
の行のコメントを解除(アクティブ化)します。 前の#
を削除する 次のコマンドで署名します。
sed -i '/mpm_event\.so$/s/^#//' /etc/httpd/conf.modules.d/00-mpm.conf
Apacheを起動し、起動時に自動起動できるようにします。
systemctl start httpd.service systemctl enable httpd.service
ApacheがMPMイベントを使用するようになったかどうかを確認します。
apachectl -V
PHP-FPMとFastCGIモジュールをインストールします。
yum install php-fpm mod_fcgid
「/etc/httpd/conf.d/php.conf」を作成して、PHPファイルの処理方法をApacheに指示します。以下のすべてのコンテンツをコピーして、ターミナルに一度に貼り付けてから、Enterキーを押します。
cat <<PASTE > /etc/httpd/conf.d/php.conf # Redirect to local php-fpm if mod_php is not available <IfModule !mod_php7.c> <IfModule proxy_fcgi_module> # Enable http authorization headers <IfModule setenvif_module> SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 </IfModule> <FilesMatch ".+\.ph(p[3457]?|t|tml)$"> #SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> <FilesMatch ".+\.phps$"> # Deny access to raw php sources by default # To re-enable it's recommended to enable access to the files # only in specific virtual host or directory Require all denied </FilesMatch> # Deny access to files without filename (e.g. '.php') <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$"> Require all denied </FilesMatch> </IfModule> </IfModule> PASTE
この素晴らしい設定の功績はDebianにあります。他のソースでは、次のような単純な構成ファイルを推奨しています。
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
ただし、これは一部の攻撃に対して脆弱であり、特定のサービスが失敗した場合、PHPファイルを公開し、保存されているパスワード、コード、機密データを公開する可能性があります。
Apacheを再起動します。
systemctl restart httpd.service
PHP-FPMを起動し、起動時に自動起動を有効にします。
systemctl start php-fpm.service systemctl enable php-fpm.service
結論
これで、トラフィックに応じてはるかに拡張性の高いApacheサーバーができました。ただし、ほとんどの人にとって「最良」の設定と同様に、デフォルト設定を使用していることを忘れないでください。 HTTPサーバーを最大限に活用したい場合は、調整できるさまざまな変数について読む必要があります。これらの適切な値は、サーバーのリソース、予想されるトラフィック、およびPHPアプリケーションに大きく依存します。
-
Linux VPSでCS:GOサーバーを作成する方法
カウンターストライク:グローバルオフェンシブ用のSteamの公式ゲームサーバーは、ほとんどの目的に十分です。ただし、それらを制御することはできません。独自のサーバーを作成すると、次のことができるようになります。 マッチタイム、フリーズタイム、最大プレイヤー数、フレンドリーファイアなどの独自のルールを設定します。ただし、重要なルール、特にこれらのルールに違反しないように注意してください。 友達とプライベートマッチをする。 コンテスト/トーナメントを開催します。 カスタムマップで再生します。 Linuxでゲームサーバーを作成する理由 「これは、Windowsでも、自分のコンピューターでも簡単
-
OELでの高可用性のためにOracleFormsandReportsをインストールおよび構成します
このブログでは、Oracle®FormsandReportsバージョン12.2.1.3.0をOracle Enterprise Linux(OEL)バージョン7.2サーバーにインストールして構成し、高可用性を確保する方法を紹介します。 次の図は、高可用性モデルを示しています。 この高可用性モデルを使用するには、次のタスクを実行する必要があります。このブログで詳しく説明しています。 アプリケーションノード(node1およびnode2)にWebLogic®Serverバージョン12.2.1.3をインストールする準備をします。 JDK®1.8をインストールします。 WebLogicServ