apacheの設定

更新日:2021/12/26

apacheのインストールと自動起動+疎通確認

apacheをインストールを行います。
以下のコマンドで依存パッケージも含めインストールされます。

[root@localhost ~]# dnf install httpd ←httpdをインストールする
Last metadata expiration check: 0:01:55 ago on Sat 25 Dec 2021 11:32:24 PM JST.
Dependencies resolved.
================================================================================
 Package          Arch   Version                                Repo       Size
================================================================================
Installing:
 httpd            x86_64 2.4.37-43.module_el8.5.0+1022+b541f3b1 appstream 1.4 M
Installing dependencies:
 apr              x86_64 1.6.3-12.el8                           appstream 129 k
 apr-util         x86_64 1.6.1-6.el8                            appstream 105 k
 centos-logos-httpd
                  noarch 85.8-2.el8                             baseos     75 k
 httpd-filesystem noarch 2.4.37-43.module_el8.5.0+1022+b541f3b1 appstream  39 k
 httpd-tools      x86_64 2.4.37-43.module_el8.5.0+1022+b541f3b1 appstream 107 k
 mod_http2        x86_64 1.15.7-3.module_el8.4.0+778+c970deab   appstream 154 k
Installing weak dependencies:
 apr-util-bdb     x86_64 1.6.1-6.el8                            appstream  25 k
 apr-util-openssl x86_64 1.6.1-6.el8                            appstream  27 k
Enabling module streams:
 httpd                   2.4

Transaction Summary
================================================================================
Install  9 Packages

Total download size: 2.1 M
Installed size: 5.6 M
Is this ok [y/N]: ←「y」を入力してenterキー押下でインストールが開始されます

続いて、OS起動時に自動的にhttpdが起動するように設定を行います。
ついでに、インストール直後はhttpdサービスが立ち上がってないので、起動させます。

[root@localhost httpd]# systemctl status httpd ←現在のhttpdステータスを表示(停止中)
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd.service(8)
[root@localhost httpd]# systemctl enable httpd ←OS起動時に自動起動するように設定
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@localhost httpd]# systemctl start httpd  ←httpdを起動
[root@localhost httpd]# systemctl status httpd ←httpdステータスを表示
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-12-25 23:42:42 JST; 4s ago
     Docs: man:httpd.service(8)
 Main PID: 32166 (httpd)
   Status: "Started, listening on: port 80"
    Tasks: 213 (limit: 11264)
   Memory: 25.4M
   CGroup: /system.slice/httpd.service
           tq32166 /usr/sbin/httpd -DFOREGROUND
           tq32167 /usr/sbin/httpd -DFOREGROUND
           tq32168 /usr/sbin/httpd -DFOREGROUND
           tq32169 /usr/sbin/httpd -DFOREGROUND
           mq32170 /usr/sbin/httpd -DFOREGROUND
(以下略)

CentOS8.4のインストール直後、ファイヤーウォールの設定で、外部からのアクセスはSSHなどの基本的なサービス以外禁止されています。
なので、http通信を許可するように、設定を変更します。
firewalldの設定や詳細はここでは省略します・・・。

[root@localhost httpd]# firewall-cmd --get-default-zone ←ファイヤーウォールのデフォルトで使用するzoneを表示
public
[root@localhost httpd]# firewall-cmd --list-all --zone=public ←publicのzone設定を表示
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources:
  services: cockpit dhcpv6-client ssh ←通信が許可されているのがこれだけの状態(httpが無い状態)
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[root@localhost httpd]# firewall-cmd --add-service=http --zone=public --permanent ←publicにhttpのを受け入れるように設定追加
success
[root@localhost httpd]# firewall-cmd --reload ←ファイヤーウォールの設定をリロード
success
[root@localhost httpd]# firewall-cmd --list-all --zone=public --permanent ←現在の設定を表示
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client http ssh ←httpが追加されている
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

この状態で、さきほど設定したサーバーと同じネットワークに接続しているPCのブラウザから、「http://(サーバーのIPアドレス)」でアクセスすると、HTTP Server Test Pageといった内容のページが表示されるはずです(apacheのデフォルトのHTML)。
ちなみに、httpd.confファイルは「/etc/httpd/conf/httpd.conf」にあります。

テスト用にダミーの証明書でhttps通信を出来るようにする

まず、apacheにSSLもモジュールを追加します。
以下のコマンドを使って、インストールを行います。

[root@localhost ~]# dnf install mod_ssl ←mod_sslをインストールする
Last metadata expiration check: 16:03:52 ago on Sat 25 Dec 2021 11:47:13 PM JST.
Dependencies resolved.
================================================================================
 Package  Arch    Version                                      Repository  Size
================================================================================
Installing:
 mod_ssl  x86_64  1:2.4.37-43.module_el8.5.0+1022+b541f3b1     appstream  136 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 136 k
Installed size: 266 k
Is this ok [y/N]: ←yを入力してenterキー押下で、インストールを開始

SSLの設定ファイルは「/etc/httpd/conf.d/ssl.conf」にあります。
中を開いてみると分かりますが
SSLCertificateFile /etc/pki/tls/certs/localhost.crt (証明書のパス)
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key (秘密鍵のパス)
という設定になっているので、このパスへ、独自に作成した公開鍵・秘密鍵のファイルを配置してあげます(もちろん、名前を変更することも可能)。

手順としては
(1)秘密鍵の作成
(2)CSRの作成
(3)CRTを作成
という3ステップ必要です。
(1)と(3)で作成したファイルをSSLモジュールの設定ファイルで指定したパスに配置すれば作業完了です。

[root@localhost ~]# openssl genrsa > localhost.key ←(1)秘密鍵を作成する
Generating RSA private key, 2048 bit long modulus (2 primes)
....+++++
..............................................................+++++
e is 65537 (0x010001)
[root@localhost ~]# openssl req -new -key localhost.key > localhost.csr ←(2)CSRを作成する
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]: ←以降、住所などの入力を求められるが、テスト用なので全部enter押下でOK
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@localhost ~]# ls -l ←localhost.csrが出力されているか、確認
total 8
-rw-r--r--. 1 root root  952 Dec 26 16:39 localhost.csr ←これが今出力されたファイル
-rw-r--r--. 1 root root 1671 Dec 26 16:39 localhost.key
[root@localhost ~]# openssl x509 -days 9999 -req -sha256 -signkey localhost.key < localhost.csr > localhost.crt ←(3)CRTを作成
Signature ok
subject=C = XX, L = Default City, O = Default Company Ltd
Getting Private key
[root@localhost ~]# ls -l
total 12
-rw-r--r--. 1 root root 1115 Dec 26 16:51 localhost.crt ←これが今出力されたファイル
-rw-r--r--. 1 root root  952 Dec 26 16:39 localhost.csr
-rw-r--r--. 1 root root 1671 Dec 26 16:39 localhost.key

「/etc/httpd/conf.d/ssl.conf」の設定上
SSLCertificateFile /etc/pki/tls/certs/localhost.crt (証明書のパス)
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key (秘密鍵のパス)
といった感じになっているので、今作成したファイルを、上記パスにコピーします。
※「cp」コマンドを使ってコピーしてください。
 SELinuxが有効になっている場合、cpコマンドでコピーしたものでないと、httpdの再起動時、SELinuxから介入されてファイルが読み込めず、エラーになります。
 コピーが終わったら、元のファイルは消してもOKです。

[root@localhost ~]# cp localhost.crt /etc/pki/tls/certs/
[root@localhost ~]# cp localhost.key /etc/pki/tls/private/

そして、httpdを再起動すればhttpdの準備は完了です。

systemctl status httpd

デフォルトでは、ファイヤーウォールがhttpsのアクセスを受け付けていない状態なので、受け入れるよう設定します。
ここまで実施すれば、httpsでアクセス出来るようになっているはずです。

[root@localhost ~]# firewall-cmd --add-service=https --zone=public --permanent ←httpsの許可
success
[root@localhost ~]# firewall-cmd --reload ←firewalldの設定リロードを行う
success
[root@localhost ~]# firewall-cmd --list-all --zone=public --permanent ←現在の設定値を表示
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client http https ssh ←httpsが追加されている
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

ページの一番上へ