公開日:2026/1/25 0:00:00

AlmaLinux 10.1 セットアップメモ

Section 5.1 Webサーバー(apache)構築編 apache

About

Webサーバーの主流は nginx になっているような気はしていますが、レンタルサーバーの環境に似せたり、wordpressを構築する場合には Apache を使うことがあります。 この手順では、Webサーバーの構築、PHPのインストール、phpMyAdminのインストールまで進めます。

環境は、Section 1.1Section 1.3で作成したvirtualboxの環境で、Section 3.1 の mariaDBをインストールした環境で進めていきます。 そのため、SELinuxは有効な状態で作業を進めています。

起動後、rootアカウントになって作業を進めます。

パッケージの確認

リポジトリに登録されているものからパッケージ名とバージョンを指定してインストールすることになります。 まずは、提供されているかどうかを調べます。

[root@localhost ~]# dnf search httpd
============================================= Name Exactly Matched: httpd ==============================================
httpd.x86_64 : Apache HTTP Server
(略)
[root@localhost ~]# dnf repoquery httpd
httpd-0:2.4.63-4.el10.x86_64
httpd-0:2.4.63-4.el10_1.2.x86_64
httpd-0:2.4.63-4.el10_1.3.x86_64
[root@localhost ~]#

特に変わったものは登録されていないようなので、インストールを進めます。

インストール

httpd 本体と、SSL通信用のモジュールをインストールします。 開発用として建てる場合でも、本番環境で必要になるものも入れておくとよいでしょう。 mod_md(ACME protocol用のモジュール)は、ローカルだと意味がないので入れないと思うけれど……

[root@localhost ~]# dnf -y install httpd mod_ssl
Dependencies resolved.
========================================================================================================================
 Package                            Architecture        Version                            Repository              Size
========================================================================================================================
Installing:
 httpd                              x86_64              2.4.63-4.el10_1.3                  appstream               47 k
 mod_ssl                            x86_64              1:2.4.63-4.el10_1.3                appstream              108 k
Installing dependencies:
 almalinux-logos-httpd              noarch              100.3-3.el10_0                     appstream               18 k
 apr                                x86_64              1.7.5-2.el10                       appstream              128 k
 apr-util                           x86_64              1.6.3-21.el10                      appstream               98 k
 apr-util-lmdb                      x86_64              1.6.3-21.el10                      appstream               14 k
 httpd-core                         x86_64              2.4.63-4.el10_1.3                  appstream              1.4 M
 httpd-filesystem                   noarch              2.4.63-4.el10_1.3                  appstream               13 k
 httpd-tools                        x86_64              2.4.63-4.el10_1.3                  appstream               81 k
 libpath_utils                      x86_64              0.2.1-58.el10                      baseos                  29 k
 libtalloc                          x86_64              2.4.3-100.el10                     baseos                  34 k
 lmdb-libs                          x86_64              0.9.32-4.el10                      baseos                  62 k
 mailcap                            noarch              2.1.54-8.el10                      baseos                  34 k
 sscg                               x86_64              3.0.5-12.el10                      appstream               46 k
Installing weak dependencies:
 apr-util-openssl                   x86_64              1.6.3-21.el10                      appstream               16 k
 mod_http2                          x86_64              2.0.29-3.el10                      appstream              161 k
 mod_lua                            x86_64              2.4.63-4.el10_1.3                  appstream               59 k

Transaction Summary
========================================================================================================================
Install  17 Packages

(中略)

Complete!
[root@localhost ~]#

まずはインストールが終わったら、念のため、htmlなどを配置する場所があるかを確認しましょう。

[root@localhost ~]# ls -laZ /var/www/
total 4
drwxr-xr-x.  4 root root system_u:object_r:httpd_sys_content_t:s0       33 MMM dd hh:ii .
drwxr-xr-x. 20 root root system_u:object_r:var_t:s0                   4096 MMM dd hh:ii ..
drwxr-xr-x.  2 root root system_u:object_r:httpd_sys_script_exec_t:s0    6 MMM dd hh:ii cgi-bin
drwxr-xr-x.  2 root root system_u:object_r:httpd_sys_content_t:s0        6 MMM dd hh:ii html
[root@localhost ~]#

SELinuxのコンテキストも設定された状態であることが確認できました。

Apache の設定変更

Apache の設定を書き換えます。

オプション名uncomment元の内容変更後の内容
ServerAdminroot@localhostwebmaster@localhost.example.com
ServerName
EnableSendfileOnOff

これらに加えて、Document Root の AllowOverride を None から All に変えます。こうしないと .htaccess を置いても効果が出ないためです。

[root@localhost ~]# cp --preserve=context /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
[root@localhost ~]# cat /etc/httpd/conf/httpd.conf.org \
| sed -E "s/^(ServerAdmin )(.*$)/\1webmaster@localhost.example.com/" \
| sed -E "s/#(ServerName .*$)/\1/" \
| sed -E "/# AllowOverride.*/,/AllowOverride None/ s/(AllowOverride) None/\1 All/" \
| sed -E "s/^(EnableSendfile )(.*$)/\1off/" \
> /etc/httpd/conf/httpd.conf
[root@localhost ~]# diff -cT /etc/httpd/conf/httpd.conf.org /etc/httpd/conf/httpd.conf

diff まで実行して書き換わったところを確認してください。

サービスの登録 と firewall 設定

サービスを有効化して起動します。

[root@localhost ~]# systemctl enable httpd
Created symlink '/etc/systemd/system/multi-user.target.wants/httpd.service' → '/usr/lib/syst//system/httpd.service'.
[root@localhost ~]# systemctl start httpd
[root@localhost ~]#

このままでは、firewallによってアクセスできないようにされているので、そちらも開放します。

[root@localhost ~]# firewall-cmd --zone=public --add-service=http --permanent
success
[root@localhost ~]# firewall-cmd --zone=public --add-service=https --permanent
success
[root@localhost ~]# systemctl reload firewalld
[root@localhost ~]# firewall-cmd --list-all
public (default, active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: cockpit dhcpv6-client http https ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[root@localhost ~]#

OSのFirewallはポートを開けましたが、仮想マシン側は閉じたままです。 ホストマシンのブラウザからアクセスするためには、Vagrantfile の forwarded port の設定を変える必要があります。 1024より小さいポートにマッピングすると Vagrant up 中に警告が出ますが、複数起動したり、ホストマシンでWebサーバーを起動しなければ問題はないでしょう。

  config.vm.network "forwarded_port", guest: 80, host: 80
  config.vm.network "forwarded_port", guest: 443, host: 443

設定を修正後に、仮想マシンを再起動すれば、ネットワーク的に問題が無ければブラウザでアクセスできると思います。

コンテンツ配置とSELinux

基本的に、/var/www/html にファイルを配置するわけですが、コンテキストが異なっていると Permission error になってしまいます。 どこにどういうコンテキストが適応されるかという標準設定は /etc/selinux/targeted/contexts/files/file_contexts に記載されているので、www あたりで検索すれば標準ならどのように配置するかがわかります。

ということで、よくハマる事例を少し試してみましょう。

まずは、 /home/root に適当なファイルを二つ作成します。

[root@localhost ~]# echo 'COPY' > ~/copy_file.html
[root@localhost ~]# echo 'MOVE' > ~/move_file.html

次にファイル名通り、それぞれのファイルを copy と mv で /var/www/html に持っていきます。

[root@localhost ~]# cp ~/copy_file.html /var/www/html/
[root@localhost ~]# mv ~/move_file.html /var/www/html/

どうなっているか確認してみましょう。

[root@localhost ~]# ls -lZ /var/www/html/
total 8
-rw-r--r--. 1 root  root  unconfined_u:object_r:httpd_sys_content_t:s0  5 MMM dd hh:mm copy_file.html
-rw-r--r--. 1 root  root  unconfined_u:object_r:admin_home_t:s0         5 MMM dd hh:mm move_file.html
[root@localhost ~]#

SELinuxコンテキストのタイプがそれぞれ異なっていることが分かると思います。それぞれのファイルに対してブラウザなどからアクセスしてみましょう。

おそらく、move_file.html のほうは、403 Forbidden になってしまうと思います。この辺りがSELinuxのパーミッション問題です。 コピーならディレクトリに設定されているコンテキストが引き継がれますが、移動になると元のものが使われてしまうという問題がでます。

こうなってしまった場合は、restorecon を使用してコンテキストをOS標準の状態に復元するという方法で変更するのが簡単な方法で正しいやり方となります。

[root@localhost ~]# restorecon -v -r /var/www/html
Relabeled /var/www/html/move_file.html from unconfined_u:object_r:admin_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
[root@localhost ~]#

tar等で圧縮したファイル群を、適当な src あたりで展開して、それを移動させる……という運用があると思いますが、こういう罠が待っています。 基本的には移動は、コピーして元のファイルを削除するという運用に切り替えると何かと幸せです。

なお、FTP/SFTPでアップロードする場合はコピーと同じ効果を発揮するので、気にしなくて済みます。