CentOSにApacheをインストールしてから起動までに必要な最初の設定
掲載日:2020年12月8日
INFOMARTION > CentOSにApacheをインストールしてから起動までに必要な最初の設定
概要
CentOSにApacheをインストールしてから起動までに必要な最初の設定の手順です。CentOS7を前提に記載しています。
バージョンは以下となります。
CentOSのバージョン | 7.6 (1810) |
---|---|
Apacheのバージョン | 2.4.6 |
目次
- インストール
- 1-1. Apacheのインストール
- 1-2. 起動確認(httpアクセス)
- 基本設定
- 2-1. ログファイル出力フォルダの作成
- 2-2. ドメイン設定
- 2-3. SSLのモジュールと設定ファイルの有効化
- 2-4. ログ出力パスの変更
- 2-5. SSL証明書の作成
- 2-6. 常時SSL化
- 2-7. 起動確認(httpsアクセス)
- 2-8. 自動起動設定
- まとめ
1. インストール
Apacheをインストールするところから起動までの設定について記載します。
1-1. Apacheのインストール
yumコマンドによりApacheのインストールを実行します。rootユーザで作業を実施してください。
[username@hostname ~]$ su -
[root@hostname ~]# yum -y install httpd
1-2. 起動確認(httpアクセス)
アクセス出来るか簡単に確認します。yumコマンドでApache(httpd)をインストールするとapachectlコマンドが使えるようになります。 こちらを使ってApacheを起動してみます。
[root@hostname ~]# apachectl start
[root@hostname ~]# apachectl status
* httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2020-12-06 17:08:12 JST; 1s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 1303 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
|-1303 /usr/sbin/httpd -DFOREGROUND
|-1304 /usr/sbin/httpd -DFOREGROUND
|-1305 /usr/sbin/httpd -DFOREGROUND
|-1306 /usr/sbin/httpd -DFOREGROUND
|-1307 /usr/sbin/httpd -DFOREGROUND
`-1308 /usr/sbin/httpd -DFOREGROUND
Dec 06 17:08:11 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Dec 06 17:08:12 localhost.localdomain httpd[1303]: AH00558: httpd: Could not reliably determ...ge
Dec 06 17:08:12 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
「apachectl status」コマンドを実行した結果、「Active: active (running)」が返ってきたら無事に起動しています。
続いて、ブラウザからApacheへアクセスします。CentOS7のデフォルト値ではfirewall(CentOS6以前の場合はiptables) がsshしかアクセスを許可していないのでhttpのアクセス許可を設定します。httpsもまとめて許可設定を入れたいと思います。 設定を永続的にするために「permanent」オプションも追加します。
[root@hostname ~]# firewall-cmd --permanent --add-service=http
[root@hostname ~]# firewall-cmd --permanent --add-service=https
[root@hostname ~]# firewall-cmd --reload
[root@hostname ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
「services」に「http」と「https」が追加されていたらOKです。 ブラウザからアクセスします。私の場合、サーバのIPアドレスが192.168.50.10なので「http://192.168.50.10」にアクセスします。 以下のページが表示されればOKです。
無事起動出来たら、一旦停止します。
[root@hostname ~]# apachectl stop
2. 基本設定
2-1. ログファイル出力フォルダの作成
/var/log/配下でのログを管理するため、/var/log/配下にhttpdディレクトリをApacheのログを入れるためのフォルダとして作ります。
パーミッション(権限)は755にします。Apacheは書き込みできるけど、他のユーザは読み込みしか出来ない設定です。他のユーザが書き込み出来るとログが改ざん出来ちゃうので。
「mkdir /var/log/httpd」は既に同じ名前のディレクトリが作成されている場合は実行不要です。
[root@hostname ~]# mkdir /var/log/httpd
[root@hostname ~]# chmod 755 /var/log/httpd
後半の手順でApacheのログの出力先の設定を変更します。
あくまでこの手順は格納先のログのフォルダを作る手順です。
2-2. ドメイン設定
httpd.confに記載されているドメイン設定を変更します。Apacheの設定はhttpd.confに基本的に集約されているので設定変更したい場合は、httpd.confを修正します。 ドメインはローカル環境(インターネットで一般公開しない)の場合は設定不要でも大丈夫です。
[root@hostname ~]# vi /etc/httpd/conf/httpd.conf
# コメントアウトを外して、ServerNameの設定を有効にします。ドメイン名は環境に合わせて設定します。
#ServerName www.example.com:80
ServerName domainname:80
2-3. SSLのモジュールと設定ファイルの有効化
httpsでアクセスを可能にするために、SSLを有効にします。SSL設定はSEOに関係しますし、そもそもセキュリティ上、httpは良くないのでhttpでないといけない場合を除いて、httpsにしましょう。
sslのモジュールをyumでインストールします。
[root@hostname ~]# yum -y install mod_ssl
yumでインストールすると自動的にsslのモジュールが有効になるので、インストールのみでOKです。設定ファイルも自動的に作られます。(/etc/httpd/conf.d/ssl.confが自動で作られます。)
2-4. ログ出力パスの変更
先程作成したログファイル出力フォルダにApacheのログ出力先を変更します。ssl(https)でのみアクセスされるように後続の手順で設定するので、 sslの設定ファイルのみ変更します。
[root@hostname ~]# vi /etc/httpd/conf.d/ssl.conf
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
~省略~
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ErrorLog /var/log/httpd/ssl_error_log
TransferLog /var/log/httpd/ssl_access_log
~省略~
CustomLog /var/log/httpd/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
上記の修正によりログの出力先が「/var/log/httpd」配下に変更されます。
「%t、%h」などと記載されていますが、こちらはログのフォーマット設定です。参考までによく使いそうなフォーマットを記載します。
【参考】
・%T:リクエスト処理にかかった時間(秒)
・%h:クライアントのホスト名またはIPアドレス。HostnameLookupsがOnに設定されている場合のみホスト名の解決を試みる
・%r:リクエストの最初の行
・%b:レスポンスのバイト数(HTTPヘッダは除く)。CLFフォーマット、つまり1バイトとも送られなかった場合は-になる
・%D:リクエスト処理にかかった時間(マイクロ秒)
・%>s:HTTPステータス
2-5. SSL証明書の作成
証明書を作成する手順です。個人で運用する場合は自己証明書で問題ないです。公開するサーバの場合は自己証明書は止めましょう。
通常の証明書と自己証明書はセキュリティ面での差はありません。 第3者が見たときに信頼性のある証明書か判断できるものか、そうでないかの差となります。(自己証明書だとURLのバーが赤くなります。) なので、公開するサーバ(第3者が見るサーバ)の場合は通常の証明書を発行しましょう。
Apacheのデフォルトの証明書の設定が「/etc/pki/tls/certs/localhost.crt」「/etc/pki/tls/private/localhost.key」となっているので これに合わせて証明書を作成していきます。
「/etc/httpd/conf.d/ssl.conf」の「SSLCertificateFile」と「SSLCertificateKeyFile」を見ると設定が分かります。
【自己証明書の場合】
自己証明書を作成する場合は以下のコマンドを実行します。rootユーザで実行してください。
「openssl req -new -key /etc/pki/tls/private/localhost.key > /etc/pki/tls/certs/localhost.crt」を実行すると何回か応答を求められますが 全てEnterで問題ないです。誰が証明書を発行しているかの情報(どこの国に住んでいて、メールアドレスは何かなど)となります。 通常の証明書を発行する場合は、正しく入力して設定しましょう。
[root@hostname ~]# openssl genrsa > /etc/pki/tls/private/localhost.key
[root@hostname ~]# openssl req -new -key /etc/pki/tls/private/localhost.key > /etc/pki/tls/certs/localhost.csr
[root@hostname ~]# openssl x509 -req -signkey /etc/pki/tls/private/localhost.key < /etc/pki/tls/certs/localhost.csr > /etc/pki/tls/certs/localhost.crt
【通常の証明書の場合】
通常の証明書を作成する場合は以下のコマンドを実行します。rootユーザで実行してください。
[root@hostname ~]# openssl genrsa -out /etc/pki/tls/private/localhost.key 2048
[root@hostname ~]# openssl req -new -key /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.csr
通常の証明書の場合はこれだけでは完了しません。作成した「server.csr」を認証局に渡してサーバ証明書を発行してもらい、発行してもらったサーバ証明書を設置する作業が発生します。
2-6. 常時SSL化
httpでアクセスされてしまうとセキュリティ的に良くないので、httpでアクセスが来たらhttpsにリダイレクトするように設定を追記します。
httpでのアクセスを禁止することもできますが、ユーザビリティの観点からリダイレクトする設定にすることをおすすめします。rootユーザで以下の作業を実施します。
[root@hostname ~]# vi /etc/httpd/conf/httpd.conf
末尾に以下の内容を追加してください。
<IfModule rewrite_module>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
こちらの設定で、httpで来たアクセスに対して、httpsで処理するように変更が可能です。
httpsで来た場合はこの設定が効かない記載していますが(RewriteCond %{HTTPS} off)
この設定が無いとhttpsのアクセスもリダイレクトしてしまい、無限ループになってしまうので、記載を忘れないでください。
2-7. 起動確認(httpsアクセス)
諸々設定が完了したので、httpsでアクセス可能か確認します。まずは起動します。
[root@hostname ~]# apachectl start
ブラウザからアクセスします。httpのアクセスの場合と同様ですが、私の場合、サーバのIPアドレスが192.168.50.10なので「http://192.168.50.10」にアクセスします。
httpのリダイレクトの設定を入れているので、「http://192.168.50.10」から「https://192.168.50.10」にURLが変更され、以下の画面が表示されます。
「Webページに移動」を押すと、以下の画面が表示され、URLのバーが赤くなります。URLのバーが赤くなる理由は自己証明書のためです。 認証局から発行された証明書を使用すれば、URLのバーは赤くならないです。
無事に起動できたのでApacheを停止します。
[root@hostname ~]# apachectl stop
2-8. 自動起動設定
最後に必須ではありませんが、毎回サーバ再起動の度にApacheを起動するのは大変なので、サーバ起動時にApacheが自動起動するように設定を入れます。systemctlコマンドへの登録も行います。CentOS7の場合の手順なので、CentOS7以外を使用している方はServiceコマンドにより対応する必要があるので、ご注意ください。
「apache.service」ファイルを作成して、必要な設定を記述します。
[root@hostname ~]# touch /etc/systemd/system/apache.service
[root@hostname ~]# vi /etc/systemd/system/apache.service
以下の内容を記載します。
[Unit]
#説明
Description=Apache
#実行前、実行後を制御
#Before=xxx.service
#After=xxx.service
[Service]
#ユーザ、グループ指定
User=root
Group=root
#起動したらステータスを起動中にする
Type=oneshot
RemainAfterExit=yes
#起動、停止、リロード
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl restart
[Install]
#runlevel3相当の設定
WantedBy=multi-user.target
記載が終わったら、systemctlコマンドに登録します。
[root@hostname ~]# systemctl enable apache
[root@hostname ~]# systemctl is-enabled apache
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep apache
apache.service enabled
[root@hostname ~]# systemctl daemon-reload
3. まとめ
Apacheをインストールした時に必要な最初の設定について記載させていただきました。
Apacheは基本的にデフォルト設定でもある程度動きますが、実際にカスタマイズしていく場合は、ログ出力先設定やSSL設定は運用していく上で変更しておいた方が良いので参考にしてみてください。
最後までご覧いただきありがとうございました。