VirtualHostを前提としたWEBサーバーをApache(httpd)で構築します。
Apache(httpd)のインストール
モジュールインストールが便利です。(バージョンも2.4固定なので、選択の必要もありません)
[root@server]# dnf module install httpd
初期設定
VirtualHost設定前までの初期設定(最低限の設定)を行います。
この設定は自身の環境に合った設定にしましょう。
[root@server]# vi /etc/httpd/conf/httpd.conf
- Options Indexes FollowSymLinks
+ Options FollowSymLinks
- ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
- AddDefaultCharset UTF-8
+ AddDefaultCharset off
+ ServerTokens Prod
+ TraceEnable Off
+ RequestHeader unset Proxy
+ Header always unset X-Powered-By
+ Header always append X-FRAME-OPTIONS SAMEORIGIN
+ Header always set X-Content-Type-Options nosniff
+ Header always set X-XSS-Protection "1; mode=block"
+ IncludeOptional domain.d/*.conf
[root@server]# cd /etc/httpd/conf.d
[root@server]# cp autoindex.conf autoindex.conf.org
[root@server]# cat /dev/null > autoindex.conf
[root@server]# cp welcome.conf welcome.conf.org
[root@server]# cat /dev/null > welcome.conf
[root@server]# vi userdir.conf
+ #<Directory "/home/*/public_html">
+ # AllowOverride FileInfo AuthConfig Limit Indexes
+ # Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
+ # Require method GET POST OPTIONS
+ #</Directory>
MPMパラメーターの設定
以下、いずれもWEBサーバー以外にDBなど同居するサービスがある場合を想定しています。(WEBサーバー専用であれば、もっと割り振っても良いと思います)
2コアCPUサーバーの場合
[root@server]# vi /etc/httpd/conf.d/mpm_event.conf
<IfModule mpm_event_module>
ServerLimit 6
ThreadLimit 30
ThreadsPerChild 30
StartServers 3
MinSpareThreads 5
MaxSpareThreads 10
MaxRequestWorkers 180
MaxConnectionsPerChild 0
</IfModule>
4コアCPUサーバーの場合
[root@server]# vi /etc/httpd/conf.d/mpm_event.conf
<IfModule mpm_event_module>
ServerLimit 10
ThreadLimit 40
ThreadsPerChild 40
StartServers 3
MinSpareThreads 5
MaxSpareThreads 20
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
6コアCPUサーバーの場合
[root@server]# vi /etc/httpd/conf.d/mpm_event.conf
<IfModule mpm_event_module>
ServerLimit 10
ThreadLimit 60
ThreadsPerChild 60
StartServers 3
MinSpareThreads 5
MaxSpareThreads 20
MaxRequestWorkers 600
MaxConnectionsPerChild 0
</IfModule>
MPMパラメーター解説
- ServerLimit
-
サーバプロセス数の上限
※MaxRequestWorkers / ThreadsPerChildの値以上になるようにする。 - ThreadLimit
-
子プロセス毎のスレッド数の上限
※MaxRequestWorkers / ServerLimitを目安にする。 - ThreadsPerChild
-
子プロセス毎に作成されるスレッド数
※ThreadLimitが同値にする。(割り当てられた共有メモリを無駄にしないため) - StartServers
-
起動時に作成される子プロセス数
※既定値(3)のまま。(起動後の子プロセス数は動的に調整されるため) - MinSpareThreads
-
アイドルスレッドの最小数
※ThreadsPerChildの整数倍にする。 - MaxSpareThreads
-
アイドルスレッドの最大数
※ThreadsPerChildの整数倍にする。(自動的に調整される) - MaxRequestWorkers
-
最大同時接続数
※ThreadsPerChildの整数倍にする。 - MaxConnectionsPerChild
-
子プロセスが稼働中に扱う接続数の上限
※既定値(0)のまま。(上限なし)
まずは、最大同時接続数(MaxRequestWorkers)とサーバプロセス数の上限(ServerLimit)の値を決めます。
最大同時接続数は、仮想コア×100程度。(WEBサーバのみで他に同居するサービスが無い場合には、×200程度)
サーバプロセス数の上限は、6~16程度。(メモリ次第)
上記2つの値を決めてしまえば、後は計算して入力できるかと思います。
あくまで初期設定値なので、サーバー稼働後の実際の負荷を確認しながら、値は変更していきましょう。