手当たり次第に書くんだ

飽きっぽいのは本能

CentOS 8 Apache Web サーバー構築

目次に戻る

概要

Webサーバー(Apache)を構築します。本稿ではHTTPSの有効化まで取り上げます。

前提条件

OS

CentOS Stream 8を使用します。

SELinux

有効です。無効にする場合はこちらを参照して下さい。

Firewalld

無効です。有効化する場合はこちらを参照して必要な許可設定をして下さい。

標準ポート番号

TCP:80 (HTTP), TCP:443 (HTTPS)

設定

インストール

Webサーバーをインストールします。

[root@centos ~]# dnf install httpd mod_ssl

サービス起動設定

Apacheはインストール直後の状態でも起動できます。このまま/var/www/htmlにコンテンツを保存すれば公開されます。一旦、Webサーバーを起動します。

[root@centos ~]# systemctl enable --now httpd.service
[root@centos ~]# systemctl status httpd.service

起動時に/var/log/messagesに下記のログが出力されますが、後述のServerNameを設定することで以降は出力されません。

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe9f:695f. Set the 'ServerName' directive globally to suppress this message

/etc/httpd/conf/httpd.conf

httpd.confを直接編集しても問題ありませんが、httpd.confはconf.dディレクトリ内に*.confが存在する場合、それを読み込む設定がされています(下記の設定値)。

IncludeOptional conf.d/*.conf

今回はhttpd.confを編集せずに、新規に/etc/httpd/conf.d/my.httpd.confを作成してApacheの設定を行います(my.httpd.confの設定が優先されます)。方針にもよりますが設定ファイルは小さいほうが楽です。httpd.confで設定する場合は読み替えて下さい。尚、Apacheの設定は比較的セキュリティ関連が多くなります。こちらを参考にさせて頂きました。

[root@centos ~]# vi /etc/httpd/conf.d/my.httpd.conf
ServerAdmin webmaster@si1230.com
ServerName www.si1230.com:80
<Directory "/var/www/html">
    Options None
</Directory>
AddDefaultCharset Off
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header unset X-Powered-By
ServerAdmin
管理者のメールアドレスを指定します。
ServerName
Webサーバーが自分自身を示すときに使うホスト名とポートです。WebサーバーのFQDNとポート番号を設定します。未設定の場合はhostsファイルかDNSで逆引きを試行しますが、Apacheの推奨は明示的にServerNameを設定します。
Options None
ディレクトリに対してのオプション設定です。デフォルト値はIndexes FollowSymLinksですが、Noneにすると全てのオプションが無効化されます。必要に応じてオプションを有効にすれば良いでしょう。
AddDefaultCharset
文字コードの設定でhtmlのmetaタグより優先されます。デフォルト値はUTF-8ですが、日本語環境では文字化けするケースが多い為、Offに変更します。
ServerTokens
Prodにするとレスポンスヘッダーに含まれるWebサーバーの情報を最小限(Apacheであることのみが表示)にします。
ServerSignature
Offにするとエラーページのフッターからバナー情報を削除します。
TraceEnable
OffにするとTRACEメソッドを無効化します(XST攻撃対策)。
Header unset X-Powered-By
PHP等のバージョンを非表示にします。

/etc/httpd/conf.d/welcome.conf

welcome.confはテストページの設定です。テストページはDocumentRootに何もない場合に表示されます。通常運用では不要な為、無効化します。単に削除してもアップデート時に元に戻る為、空のファイルに変更します。

[root@centos ~]# echo -n "" > /etc/httpd/conf.d/welcome.conf

/etc/httpd/conf.d/ssl.conf

ssl.confのデフォルト値

コメント行等を削除したssl.confは下記の通りです。

Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLHonorCipherOrder on
SSLCipherSuite PROFILE=SYSTEM
SSLProxyCipherSuite PROFILE=SYSTEM
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

ssl.confの設定

ssl.confを作成します。主に証明書の指定となりますので自己署名証明書を指定する場合はこちらを参照して下さい。尚、SELinuxが有効な状態では証明書のパスが決められている為、既定の場所以外に配置する場合はSELinuxの変更が必要です。

[root@centos ~]# vi /etc/httpd/conf.d/ssl.conf
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ServerName www.si1230.com:443
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLHonorCipherOrder on
SSLCipherSuite PROFILE=SYSTEM
SSLProxyCipherSuite PROFILE=SYSTEM
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
SSLCertificateChainFile /etc/pki/tls/certs/inter.crt
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
ServerName
httpd.confの説明と同じです。
SSLCertificateFile
サーバー証明書を指定します。
SSLCertificateKeyFile
サーバー証明書の秘密鍵を指定します。
SSLCertificateChainFile
必要に応じて中間証明書を指定します。デフォルトはコメントアウトされています。大抵、正式な証明書では中間証明書が必要です。

サービス再起動

設定を反映させる為、サービスを再起動します。

[root@centos ~]# systemctl restart httpd.service

目次に戻る

CentOS 8 Apache Web サーバー構築

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る