The Sixwish project

CentOS 5 Apache Setting

Apache

ここでは、「CentOS 5 Sixwish 標準インストールマニュアル、標準最小構成化マニュアル」並びに「Xen Domain-U関連」の最小構成構築の手順に従って構築された環境であることを前提としています。
そのため、異なる方法でインストールした場合は、状況が少し異なるので読替えるなどしてください。
なお、ここでの表記は「Xen Domain-U関連」に記載されている「CentOS 5 on Xen(CnetOS5) Domain-U用最小化手順仕上げ」まで完了した状態から始めている例です。

インストール

yumを使ってインストールします。
理由としてはApacheのモジュールを多用するほどでもなく、rpmに含まれるものだけで十分という理由からです。
同時に、幾つものサーバの面倒をみることが多いので手間を減らすことが目的でもありますが……

インストールするパッケージは三つ。関連で

[root@sixwish ~]# yum -y install httpd apr apr-util
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
base                      100% |=========================| 1.1 kB    00:00
updates                   100% |=========================|  951 B    00:00
addons                    100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for apr-util to pack into transaction set.
apr-util-1.2.7-6.i386.rpm 100% |=========================| 7.3 kB    00:00
---> Package apr-util.i386 0:1.2.7-6 set to be updated
---> Downloading header for apr to pack into transaction set.
apr-1.2.7-11.i386.rpm     100% |=========================|  10 kB    00:00
---> Package apr.i386 0:1.2.7-11 set to be updated
---> Downloading header for httpd to pack into transaction set.
httpd-2.2.3-7.el5.centos. 100% |=========================|  54 kB    00:01
---> Package httpd.i386 0:2.2.3-7.el5.centos set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 apr                     i386       1.2.7-11         base              122 k
 apr-util                i386       1.2.7-6          base               75 k
 httpd                   i386       2.2.3-7.el5.centos  updates           1.1 M

Transaction Summary
=============================================================================
Install      3 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 1.3 M
Downloading Packages:
(1/3): apr-util-1.2.7-6.i 100% |=========================|  75 kB    00:00
(2/3): apr-1.2.7-11.i386. 100% |=========================| 122 kB    00:00
(3/3): httpd-2.2.3-7.el5. 100% |=========================| 1.1 MB    00:08
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: apr                          ######################### [1/3]
  Installing: apr-util                     ######################### [2/3]
  Installing: httpd                        ######################### [3/3]

Installed: apr.i386 0:1.2.7-11 apr-util.i386 0:1.2.7-6 httpd.i386 0:2.2.3-7.el5.centos
Complete!
[root@sixwish ~]#

動作確認

まずはアクセスできるかどうかを確認します。

[root@sixwish ~]# service httpd start
httpd を起動中:                                            [  OK  ]
[root@sixwish ~]# 

この状態でブラウザからのアクセスを試みます。
恐らく何も表示されないと思いますので、ファイアウォールなどの設定を確認します。

[root@sixwish ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0
ACCEPT     udp  --  0.0.0.0/0            224.0.0.251         udp dpt:5353
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:631
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:631
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
[root@sixwish ~]# 

特に何かの設定を行なっていないのであれば、このような感じで表示されると思います。
みたところ、tcp 80(http)、tcp 443(https)へのアクセスも拒否しているようなので、そこを追加します。

[root@sixwish ~]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables-`date -I`
[root@sixwish ~]# vi /etc/sysconfig/iptables
*** /etc/sysconfig/iptables-YYYY-mm-dd  YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /etc/sysconfig/iptables     YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 16,20 ****
--- 16,22 ----
        -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
        -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
+       -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
+       -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8880 -j ACCEPT
        -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
        COMMIT
[root@sixwish ~]# 

二行ほど追加してください。
編集できたら、iptablesを再ロードします。

[root@sixwish ~]# service iptables restart
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns     [  OK  ]
[root@sixwish ~]# 

再起動が完了したらブラウザでアクセスしてみてください。
これで接続できます。

設定

設定関連ファイルは/etc/httpd配下にあります。
PORXY関連は使用する予定が無いのでそのあたりの設定を変更します。

行なう事は、auth系、WebDAV、proxyのモジュール切り離し、その他必要なことを幾つか……

[root@sixwish ~]# cd /etc/httpd/conf
[root@sixwish conf]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.`date -I`
[root@sixwish conf]# vi /etc/httpd/conf/httpd.conf
*** /etc/httpd/conf/httpd.conf.YYYY-mm-dd       YYYY-mm-dd --:--:--.000000000 +0900
--- /etc/httpd/conf/httpd.conf  YYYY-mm-dd --:--:--.000000000 +0900
***************
*** 145,165 ****
        # Example:
        # LoadModule foo_module modules/mod_foo.so
        #
!       LoadModule auth_basic_module modules/mod_auth_basic.so
!       LoadModule auth_digest_module modules/mod_auth_digest.so
!       LoadModule authn_file_module modules/mod_authn_file.so
!       LoadModule authn_alias_module modules/mod_authn_alias.so
!       LoadModule authn_anon_module modules/mod_authn_anon.so
!       LoadModule authn_dbm_module modules/mod_authn_dbm.so
!       LoadModule authn_default_module modules/mod_authn_default.so
!       LoadModule authz_host_module modules/mod_authz_host.so
!       LoadModule authz_user_module modules/mod_authz_user.so
!       LoadModule authz_owner_module modules/mod_authz_owner.so
!       LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
!       LoadModule authz_dbm_module modules/mod_authz_dbm.so
!       LoadModule authz_default_module modules/mod_authz_default.so
!       LoadModule ldap_module modules/mod_ldap.so
!       LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
        LoadModule include_module modules/mod_include.so
        LoadModule log_config_module modules/mod_log_config.so
        LoadModule logio_module modules/mod_logio.so
--- 145,165 ----
        # Example:
        # LoadModule foo_module modules/mod_foo.so
        #
!       #LoadModule auth_basic_module modules/mod_auth_basic.so
!       #LoadModule auth_digest_module modules/mod_auth_digest.so
!       #LoadModule authn_file_module modules/mod_authn_file.so
!       #LoadModule authn_alias_module modules/mod_authn_alias.so
!       #LoadModule authn_anon_module modules/mod_authn_anon.so
!       #LoadModule authn_dbm_module modules/mod_authn_dbm.so
!       #LoadModule authn_default_module modules/mod_authn_default.so
        LoadModule authz_host_module modules/mod_authz_host.so
        LoadModule authz_user_module modules/mod_authz_user.so
        LoadModule authz_owner_module modules/mod_authz_owner.so
        LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
!       #LoadModule authz_dbm_module modules/mod_authz_dbm.so
        LoadModule authz_default_module modules/mod_authz_default.so
!       #LoadModule ldap_module modules/mod_ldap.so
!       #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
        LoadModule include_module modules/mod_include.so
        LoadModule log_config_module modules/mod_log_config.so
        LoadModule logio_module modules/mod_logio.so
***************
*** 172,182 ****
        LoadModule usertrack_module modules/mod_usertrack.so
        LoadModule setenvif_module modules/mod_setenvif.so
        LoadModule mime_module modules/mod_mime.so
!       LoadModule dav_module modules/mod_dav.so
        LoadModule status_module modules/mod_status.so
        LoadModule autoindex_module modules/mod_autoindex.so
        LoadModule info_module modules/mod_info.so
!       LoadModule dav_fs_module modules/mod_dav_fs.so
        LoadModule vhost_alias_module modules/mod_vhost_alias.so
        LoadModule negotiation_module modules/mod_negotiation.so
        LoadModule dir_module modules/mod_dir.so
--- 172,182 ----
        LoadModule usertrack_module modules/mod_usertrack.so
        LoadModule setenvif_module modules/mod_setenvif.so
        LoadModule mime_module modules/mod_mime.so
!       #LoadModule dav_module modules/mod_dav.so
        LoadModule status_module modules/mod_status.so
        LoadModule autoindex_module modules/mod_autoindex.so
        LoadModule info_module modules/mod_info.so
!       #LoadModule dav_fs_module modules/mod_dav_fs.so
        LoadModule vhost_alias_module modules/mod_vhost_alias.so
        LoadModule negotiation_module modules/mod_negotiation.so
        LoadModule dir_module modules/mod_dir.so
***************
*** 185,197 ****
        LoadModule userdir_module modules/mod_userdir.so
        LoadModule alias_module modules/mod_alias.so
        LoadModule rewrite_module modules/mod_rewrite.so
!       LoadModule proxy_module modules/mod_proxy.so
!       LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
!       LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
!       LoadModule proxy_http_module modules/mod_proxy_http.so
!       LoadModule proxy_connect_module modules/mod_proxy_connect.so
        LoadModule cache_module modules/mod_cache.so
!       LoadModule suexec_module modules/mod_suexec.so
        LoadModule disk_cache_module modules/mod_disk_cache.so
        LoadModule file_cache_module modules/mod_file_cache.so
        LoadModule mem_cache_module modules/mod_mem_cache.so
--- 185,197 ----
        LoadModule userdir_module modules/mod_userdir.so
        LoadModule alias_module modules/mod_alias.so
        LoadModule rewrite_module modules/mod_rewrite.so
!       #LoadModule proxy_module modules/mod_proxy.so
!       #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
!       #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
!       #LoadModule proxy_http_module modules/mod_proxy_http.so
!       #LoadModule proxy_connect_module modules/mod_proxy_connect.so
        LoadModule cache_module modules/mod_cache.so
!       #LoadModule suexec_module modules/mod_suexec.so
        LoadModule disk_cache_module modules/mod_disk_cache.so
        LoadModule file_cache_module modules/mod_file_cache.so
        LoadModule mem_cache_module modules/mod_mem_cache.so
***************
*** 247,253 ****
        # e-mailed.  This address appears on some server-generated pages, such
        # as error documents.  e.g. admin@your-domain.com
        #
!       ServerAdmin root@localhost

        #
        # ServerName gives the name and port that the server uses to identify itself.
--- 247,253 ----
        # e-mailed.  This address appears on some server-generated pages, such
        # as error documents.  e.g. admin@your-domain.com
        #
!       ServerAdmin rokubou@sixwish.jp

        #
        # ServerName gives the name and port that the server uses to identify itself.
***************
*** 261,267 ****
        # You will have to access it by its address anyway, and this will make
        # redirections work in a sensible way.
        #
!       #ServerName www.example.com:80

        #
        # UseCanonicalName: Determines how Apache constructs self-referencing
--- 261,267 ----
        # You will have to access it by its address anyway, and this will make
        # redirections work in a sensible way.
        #
!       ServerName sixwish.jp:80

        #
        # UseCanonicalName: Determines how Apache constructs self-referencing
***************
*** 440,446 ****
        # each client request will result in AT LEAST one lookup request to the
        # nameserver.
        #
!       HostnameLookups Off

        #
        # EnableMMAP: Control whether memory-mapping is used to deliver
--- 440,446 ----
        # each client request will result in AT LEAST one lookup request to the
        # nameserver.
        #
!       HostnameLookups On

        #
        # EnableMMAP: Control whether memory-mapping is used to deliver
***************
*** 520,526 ****
        # Set to "EMail" to also include a mailto: link to the ServerAdmin.
        # Set to one of:  On | Off | EMail
        #
!       ServerSignature On

        #
        # Aliases: Add here as many aliases as you need (with no limit). The format is
--- 520,526 ----
        # Set to "EMail" to also include a mailto: link to the ServerAdmin.
        # Set to one of:  On | Off | EMail
        #
!       ServerSignature Off

        #
        # Aliases: Add here as many aliases as you need (with no limit). The format is
***************
*** 560,577 ****
        # The same rules about trailing "/" apply to ScriptAlias directives as to
        # Alias.
        #
!       ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

        #
        # "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
        # CGI directory exists, if you have that configured.
        #
!       <Directory "/var/www/cgi-bin">
!           AllowOverride None
!           Options None
!           Order allow,deny
!           Allow from all
!       </Directory>

        #
        # Redirect allows you to tell clients about documents which used to exist in
--- 560,577 ----
        # The same rules about trailing "/" apply to ScriptAlias directives as to
        # Alias.
        #
!       #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

        #
        # "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
        # CGI directory exists, if you have that configured.
        #
!       #<Directory "/var/www/cgi-bin">
!       #    AllowOverride None
!       #    Options None
!       #    Order allow,deny
!       #    Allow from all
!       #</Directory>

        #
        # Redirect allows you to tell clients about documents which used to exist in
***************
*** 727,733 ****
        # Just list the languages in decreasing order of preference. We have
        # more or less alphabetized them here. You probably want to change this.
        #
!       LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

        #
        # ForceLanguagePriority allows you to serve a result page rather than
--- 727,733 ----
        # Just list the languages in decreasing order of preference. We have
        # more or less alphabetized them here. You probably want to change this.
        #
!       LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

        #
        # ForceLanguagePriority allows you to serve a result page rather than

[root@sixwish conf.d]# 

続いて、Proxyのオプション設定ファイルを修正します。

[root@sixwish conf]# cd ../conf.d/
[root@sixwish conf.d]# cp /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.`date -I`
[root@sixwish conf.d]# vi /etc/httpd/conf.d/proxy_ajp.conf
*** /etc/httpd/conf.d/proxy_ajp.conf.YYYY-mm-dd       YYYY-mm-dd --:--:--.000000000 +0900
--- /etc/httpd/conf.d/proxy_ajp.conf  YYYY-mm-dd --:--:--.000000000 +0900
***************
*** 1,5 ****

!       LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

        #
        # When loaded, the mod_proxy_ajp module adds support for
--- 1,5 ----

!       #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

        #
        # When loaded, the mod_proxy_ajp module adds support for
[root@sixwish conf.d]# 

変更できたら、設定ファイルをチェックします。

[root@sixwish conf.d]# service httpd configtest
Syntax OK
[root@sixwish conf.d]# chkconfig httpd on
[root@sixwish conf.d]# service httpd start
[root@sixwish conf.d]# 

これで完了。
後はサービスを再起動して終わりです。

コンテンツファイル

/var/www配下に置いてください。
それ以外の場所はSELinuxの影響でほとんどが Permission Denied になります。

もし、DocumetRootなどを変更したい場合や、他のディレクトリからファイルを移動(mvコマンド使用)した場合は以下の方法で対処する事が出来ます。
但し、全ての場合とは言い切れないので注意してください。

とりあえず、/home/httpd/htmlにコンテンツを置こうと思った場合の例です。

[root@sixwish ~]# cd /home/httpd/
[root@sixwish ~]# ls -lZ
drwxr-xr-x  root root user_u:object_r:user_home_t      html
[root@sixwish ~]# chcon -R -v --reference /var/www/html ./html
context of ./html changed to system_u:object_r:httpd_sys_content_t
[root@sixwish ~]# ls -lZ
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t html
[root@sixwish ~]# 

SELinuxのラベルの最後がhttpd_sys_content_tになっていれば問題ないのです。
なお、cgiなどを置くディレクトリの場合は、--referenceの先を /var/www/cgi-binにすることで回避できる事もあります。

また、この措置は一時的なもので、再起動などをかけると初期化されて元に戻る事もあるので注意してください。
回避方法はまた別のメモで。