公開日:2011/10/25 0:00:00

CentOS 6

Apache Setting

About

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

インストール

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

[root@sixwish ~]# yum -y install httpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-5.el6.centos set to be updated
--> Processing Dependency: httpd-tools = 2.2.15-5.el6.centos for package: httpd-2.2.15-5.el6.centos.i686
--> Processing Dependency: /etc/mime.types for package: httpd-2.2.15-5.el6.centos.i686
--> Processing Dependency: libaprutil-1.so.0 for package: httpd-2.2.15-5.el6.centos.i686
--> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-5.el6.centos.i686
--> Processing Dependency: libapr-1.so.0 for package: httpd-2.2.15-5.el6.centos.i686
--> Running transaction check
---> Package apr.i686 0:1.3.9-3.el6_0.1 set to be updated
---> Package apr-util.i686 0:1.3.9-3.el6_0.1 set to be updated
---> Package apr-util-ldap.i686 0:1.3.9-3.el6_0.1 set to be updated
---> Package httpd-tools.i686 0:2.2.15-5.el6.centos set to be updated
---> Package mailcap.noarch 0:2.1.31-1.1.el6 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================
 Package               Arch           Version                       Repository       Size
==========================================================================================
Installing:
 httpd                 i686           2.2.15-5.el6.centos           base            813 k
Installing for dependencies:
 apr                   i686           1.3.9-3.el6_0.1               updates         129 k
 apr-util              i686           1.3.9-3.el6_0.1               updates          89 k
 apr-util-ldap         i686           1.3.9-3.el6_0.1               updates          15 k
 httpd-tools           i686           2.2.15-5.el6.centos           base             68 k
 mailcap               noarch         2.1.31-1.1.el6                base             27 k

Transaction Summary
==========================================================================================
Install       6 Package(s)
Upgrade       0 Package(s)

Total download size: 1.1 M
Installed size: 3.4 M
Is this ok [y/N]: 
Downloading Packages:
(1/6): apr-1.3.9-3.el6_0.1.i686.rpm                                | 129 kB     00:00
(2/6): apr-util-1.3.9-3.el6_0.1.i686.rpm                           |  89 kB     00:00
(3/6): apr-util-ldap-1.3.9-3.el6_0.1.i686.rpm                      |  15 kB     00:00
(4/6): httpd-2.2.15-5.el6.centos.i686.rpm                          | 813 kB     00:00
(5/6): httpd-tools-2.2.15-5.el6.centos.i686.rpm                    |  68 kB     00:00
(6/6): mailcap-2.1.31-1.1.el6.noarch.rpm                           |  27 kB     00:00
------------------------------------------------------------------------------------------
Total                                                     525 kB/s | 1.1 MB     00:02
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : apr-1.3.9-3.el6_0.1.i686                                           1/6
  Installing     : mailcap-2.1.31-1.1.el6.noarch                                      2/6
  Installing     : apr-util-1.3.9-3.el6_0.1.i686                                      3/6
  Installing     : apr-util-ldap-1.3.9-3.el6_0.1.i686                                 4/6
  Installing     : httpd-tools-2.2.15-5.el6.centos.i686                               5/6
  Installing     : httpd-2.2.15-5.el6.centos.i686                                     6/6

Installed:
  httpd.i686 0:2.2.15-5.el6.centos

Dependency Installed:
  apr.i686 0:1.3.9-3.el6_0.1                 apr-util.i686 0:1.3.9-3.el6_0.1
  apr-util-ldap.i686 0:1.3.9-3.el6_0.1       httpd-tools.i686 0:2.2.15-5.el6.centos
  mailcap.noarch 0:2.1.31-1.1.el6

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
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:67
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
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

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24    state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           PHYSDEV match --physdev-is-bridged
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destinationd
[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
***************
*** 10,14 ****
--- 10,16 ----
        -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
+       -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
+       -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
        -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
        -A INPUT -j REJECT --reject-with icmp-host-prohibited
        -A FORWARD -j REJECT --reject-with icmp-host-prohibited
        COMMIT
[root@sixwish ~]# 

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

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

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

設定

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

設定で行なう事は、まず、利用モジュールの選別。
Basic認証は個人的に使うことが無いので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 hh:ii:ss.000000000 +0900
--- /etc/httpd/conf/httpd.conf  YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 147,167 ****
  # 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
--- 147,167 ----
  # 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
***************
*** 174,184 ****
  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
--- 174,184 ----
  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
***************
*** 188,201 ****
  LoadModule alias_module modules/mod_alias.so
  LoadModule substitute_module modules/mod_substitute.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_ajp_module modules/mod_proxy_ajp.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 cgi_module modules/mod_cgi.so
  LoadModule version_module modules/mod_version.so
--- 188,201 ----
  LoadModule alias_module modules/mod_alias.so
  LoadModule substitute_module modules/mod_substitute.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_ajp_module modules/mod_proxy_ajp.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 cgi_module modules/mod_cgi.so
  LoadModule version_module modules/mod_version.so
***************
*** 259,265 ****
  # 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.
--- 259,265 ----
  # e-mailed.  This address appears on some server-generated pages, such
  # as error documents.  e.g. admin@your-domain.com
  #
! ServerAdmin <em>管理者のメールアドレス</em>

  #
  # ServerName gives the name and port that the server uses to identify itself.
***************
*** 273,279 ****
  # 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
--- 273,279 ----
  # You will have to access it by its address anyway, and this will make
  # redirections work in a sensible way.
  #
! ServerName <em>サーバーのドメイン名</em>p:80

  #
  # UseCanonicalName: Determines how Apache constructs self-referencing
***************
*** 453,459 ****
  # 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
--- 453,459 ----
  # 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
***************
*** 533,539 ****
  # 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
--- 533,539 ----
  # 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
***************
*** 573,590 ****
  # 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
--- 573,590 ----
  # 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
***************
*** 740,746 ****
  # 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
--- 740,746 ----
  # 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]# 

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

[root@sixwish conf]# service httpd configtest
Syntax OK
[root@sixwish conf]# chkconfig httpd on
[root@sixwish conf]# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
[root@sixwish conf]# 

これで完了です。エラーが出た場合は行数が表示されるのでその行を確認してください。
後はサービスを再起動して終わりです。

コンテンツファイル

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

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

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

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

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

また、この措置は一時的なもので、再起動などをかけると初期化されて元に戻ってしまうので注意してください。
この設定を永続化するにはSELinuxの設定を書きなおす必要がありますが検証が終わっていないので他のサイト等を参考にしてください。