Linux
 Computer >> コンピューター >  >> システム >> Linux

Linuxサーバーでトラフィックの多いWebサイト用にApacheとPHPを構成する方法

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

Linuxサーバーでトラフィックの多いWebサイト用にApacheとPHPを構成する方法

PHP-FPMをインストールします。

apt install php-fpm

ApacheでPHPプロセッサを有効にする方法の説明が表示されます。

Linuxサーバーでトラフィックの多いWebサイト用に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

Linuxサーバーでトラフィックの多いWebサイト用にApacheとPHPを構成する方法

MPMイベントを有効にするには、構成ファイルを編集する必要があります。

sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf

これにより、#が追加されます LoadModule mpm_prefork_module modules/mod_mpm_prefork.soの行にコメント(非アクティブ化)するための署名 。

Linuxサーバーでトラフィックの多いWebサイト用にApacheとPHPを構成する方法

次に、#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

Linuxサーバーでトラフィックの多いWebサイト用にApacheとPHPを構成する方法

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アプリケーションに大きく依存します。


  1. Linux VPSでCS:GOサーバーを作成する方法

    カウンターストライク:グローバルオフェンシブ用のSteamの公式ゲームサーバーは、ほとんどの目的に十分です。ただし、それらを制御することはできません。独自のサーバーを作成すると、次のことができるようになります。 マッチタイム、フリーズタイム、最大プレイヤー数、フレンドリーファイアなどの独自のルールを設定します。ただし、重要なルール、特にこれらのルールに違反しないように注意してください。 友達とプライベートマッチをする。 コンテスト/トーナメントを開催します。 カスタムマップで再生します。 Linuxでゲームサーバーを作成する理由 「これは、Windowsでも、自分のコンピューターでも簡単

  2. 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