5 Apache HTTP Webサービスの構成
警告:
Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。
できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。
この章では、基本的なHTTPサーバーの構成方法について説明します。
Apache HTTP Serverについて
Oracle Linuxには、Apache Software Foundationによって開発されたオープン・ソースWebサーバーであるApache HTTPサーバーが用意されています。ApacheサーバーはWebコンテンツをホストし、FirefoxなどのWebブラウザからこのコンテンツに対するリクエストに応答します。
Apache HTTPサーバーのインストール
Apache HTTPサーバーをインストールするには:
-
次のコマンドを入力します。
sudo yum install httpd
-
サーバーを起動し、システムの再起動後に起動するように構成します。
sudo apachectl start sudo systemctl enable httpd
-
構成エラーをチェックします。
sudo apachectl configtest
-
HTTPサーバーがリスニングするポートへのアクセスを許可するファイアウォール・ルールを作成します。たとえば:
sudo firewall-cmd --zone=zone --add-service=http sudo firewall-cmd --permanent --zone=zone --add-service=http
Apache HTTPサーバーの構成
ノート:
Apache HTTPサーバーの構成に適用した変更は、サーバーを再起動するまでは有効になりません。
sudo apachectl restart
Apache HTTPサーバーのメイン構成ファイルは/etc/httpd/conf/httpd.conf
です。このファイルのディレクティブを変更し、ユーザーの環境にあわせてApacheをカスタマイズできます。
次のディレクティブがあります。
-
Allow from client [client ...] | all
-
コンテンツにアクセスできるクライアントのリストを指定するか、
all
を指定してあらゆるクライアントにコンテンツを供給します。Order
ディレクティブにより、httpd
がAllow
ディレクティブとDeny
ディレクティブを評価する順序が決まります。 -
Deny from client [client ...] | all
-
コンテンツにアクセスできないクライアントのリストを指定するか、
all
を指定してすべてのクライアントを禁止します。Order
ディレクティブにより、httpd
がAllow
ディレクティブとDeny
ディレクティブを評価する順序が決まります。 -
DocumentRoot directory-path
-
Apacheサーバー・コンテンツの最上位レベルのディレクトリ。
apache
ユーザーには、ファイルの読取りアクセス権と、ディレクトリおよびそのサブディレクトリへの読取りおよび実行アクセス権が必要です。ディレクトリ・パスの最後にはスラッシュを付けないでください。次に例を示します。
DocumentRoot /var/www/html
/var/www/html
の下にはない別のドキュメント・ルートまたはコンテンツへのリンクを指定し、SELinuxがシステム上で強制モードで有効になっている場合、コンテンツを含むディレクトリ階層のデフォルト・ファイル・タイプをhttpd_sys_content_t
に変更します。-
semanageコマンドを使用して、コンテンツ・ディレクトリのデフォルト・ファイル・タイプを
httpd_sys_content_t
として定義します。sudo /usr/sbin/semanage fcontext -a -t httpd_sys_content_t " content_dir (/.*)?"
-
restoreconコマンドを使用して、コンテンツ・ディレクトリ階層全体にファイル・タイプを適用します。
sudo /sbin/restorecon -R -v content_dir
-
-
ErrorLog filename | syslog[:facility]
-
ファイル名に設定する場合は、
httpd
がエラー・メッセージを送信する宛先であるServerRoot
に相対的にファイルを指定します。syslog
に設定する場合は、httpd
がエラーをrsyslogd
に送信するように指定します。facility引数で、rsyslogd
ファシリティを指定します。デフォルトのファシリティはlocal7
です。次に例を示します。
ErrorLog logs/error_log
-
Listen [IP_address:]port
-
指定されたポート、またはIPアドレスとポートの組合せで着信リクエストを受け入れます。デフォルトでは、
httpd
サーバーは、すべてのネットワーク・インタフェースについてポート80でリクエストを受け入れます。80以外のポート番号では、サーバーに対するHTTPリクエストにポート番号を含める必要があります。次に例を示します。
Listen 80 Listen 192.168.2.1:8080
-
LoadModule module path
-
Apache HTTPサーバーは、外部モジュール(動的共有オブジェクトまたはDSO)をロードして機能を拡張できます。module引数はDSOの名前で、
filename
はServerRoot
へのモジュールの相対パス名です。次に例を示します。
LoadModule auth_basic_module modules/mod_auth_basic.so
-
Order deny,allow | allow,deny
-
httpd
がAllowおよびDenyディレクティブを評価する順序を指定します。たとえば、
mydom.com
ドメインからのクライアントにのみアクセスを許可します:Order deny,allow Deny from all Allow from .mydom.com
次のディレクティブでは、クライアントによるアクセスは許可されません。
Order allow,deny Deny from all Allow from .mydom.com
-
ServerName FQDN[:port]
-
httpd
サーバーの完全修飾ドメイン名またはIPアドレス、およびサーバーがリスニングするポート(オプション)を指定します。FQDNをIPアドレスに解決する必要があります。FQDNを指定しなかった場合は、IPアドレスに対する逆引き名前参照がサーバーで実行されます。ポートを指定しなかった場合は、着信リクエストに相当するポートがサーバーで使用されます。次に例を示します。
ServerName www.mydom.com:80
-
ServerRoot directory-path
-
httpd
サーバーがその構成ファイル、エラー・ファイルおよびログ・ファイルを保持するディレクトリ階層の最上位。ディレクトリ・パスの最後にはスラッシュを付けないでください。次に例を示します。
ServerRoot /etc/httpd
-
Timeout seconds
-
タイムアウト・エラーを報告するまでに、
httpd
がネットワーク操作の終了を待機する秒数を指定します。デフォルト値は60秒です。 -
UserDir directory-path ... | disabled [user ...] | enabled user ...
-
disabled
に設定すると、スペースで区切ったuser引数で特定されたユーザーは、各自のホーム・ディレクトリからコンテンツを公開できません。ユーザーを指定しないと、すべてのユーザーが禁止されます。enabled
に設定すると、スペースで区切ったuser引数で特定されたユーザーは、引数がdisabled
に指定されていないかぎり、各自のホーム・ディレクトリからコンテンツを公開できます。directory-pathは、
httpd
がコンテンツを公開するディレクトリの名前です。相対パスは、ユーザーのホーム・ディレクトリに対する相対パスとみなされます。複数のディレクトリ・パスを指定すると、Webページが見つかるまで各選択肢がhttpd
により順番に試みられます。directory-pathを定義しなかった場合、デフォルトは$HOME/public_htmlとなります。ディレクトリ・パスの最後にはスラッシュを付けないでください。次に例を示します。
UserDir disabled root guest UserDir enabled oracle alice UserDir www http://www.mydom.com/
root
およびguest
ユーザーはコンテンツを公開できません。ServerName
がwww.mydom.com
に設定されたと仮定した場合、http://www.example.com/~alice
を参照すると、alice
のWebページが表示され、この場合、このページは~alice/www
またはhttp://www.example.com/alice
(つまり、ServerRoot
と相対的なalice
ディレクトリ)に位置している必要があります。ノート:
ユーザーにユーザー・コンテンツの公開を許可するには、通常は
<IfModule mod_userdir.c>
コンテナで設定を変更することになります。
詳細は、https://httpd.apache.org/docs/current/mod/directives.htmlを参照してください。
Apache HTTPサーバーのテスト
Apache HTTPサーバーが機能していることをテストするには:
-
ローカル・システムから、
http://localhost
をローカル・システムのブラウザに入力します。 -
リモート・システムから、
http://
に続けて構成ファイル(/etc/httpd/conf/httpd.conf
)に指定されているServerName
ディレクティブの値をブラウザに入力します。
ブラウザにApache 2のテスト・ページが表示された場合は、サーバーが正常に機能しています。
サーバーがコンテンツを配信できることをテストするには、DocumentRoot
ディレクティブに指定されたディレクトリ(デフォルトでは/var/www/html
)に、index.html
というHTMLファイルを作成します。ページをリロードすると、ブラウザには、このHTMLファイルがApache 2のテスト・ページにかわって表示されます。
Apacheコンテナの構成
Apacheコンテナは他のディレクティブをグループ化する特別なディレクティブであり、多くの場合、特性が異なる個別のWebディレクトリ階層を作成します。コンテナは、<type>
と</type>
(typeはコンテナ・タイプ)のXML形式のタグで区切られます。
次にコンテナ・タイプの例を示します。
-
<Directory directory-path>
-
指定されたディレクティブをdirectory-pathの下のディレクトリに適用します。次の例では、
Deny
、Allow
およびAllowOverride
のディレクティブを/var/www/html/sandbox
の下のすべてのファイルおよびディレクトリに適用します。<Directory /var/www/html/sandbox> Deny from all Allow from 192.168.2. AllowOverride All </Directory>
AllowOverride
ディレクティブはDirectory
コンテナでのみ使用され、.htaccess
ファイルで許可されているディレクティブのクラスを指定します。(.htaccess
構成ファイルには、通常、Webディレクトリのユーザー認証ディレクティブが格納されます。)ディレクティブ・クラスは、認証、クライアントのアクセス、ディレクトリの索引付けなどの側面を制御します。.htaccess
ファイルのすべてのディレクティブ・クラスを許可する場合はAll
引数を指定し、特定のクラスのみを許可する場合はディレクティブ・クラスをスペースで区切ったリストを指定し、サーバーが.htaccess
ファイルを完全に無視するようにする場合はNone
を指定します。ノート:
システムでSELinuxが有効になっており、
<Directory>
で指定されたファイル・システム階層が/var/www/html
にない場合は、デフォルトのファイル・タイプを変更する必要があります。 -
<IfModule [!]module>
-
指定のモジュールがロードされた場合に、あるいは感嘆符(
!
)が指定されたときは指定のモジュールがロードされていない場合に、ディレクティブを適用します。次の例は、
mod_userdir.c
がロードされた場合に、ユーザーによるコンテンツの公開を禁止します。<IfModule mod_userdir.c> UserDir disabled </IfModule>
-
<Limit method ...>
-
Uniform Resource Identifier (URI)の操作に対して、指定のHTTPメソッドのみ(GET、OPTIONS、POST、PUTなど)を使用するように制限します。
次の例は、HTTPのダウンロードおよびアップロードの実行に
GET
メソッドとPUT
メソッドのみを使用するように、mydom.com
のシステムを制限します。<Limit GET PUT> Order deny,allow Deny from all Allow from .example.com </Limit>
mydom.com
外部のシステムでは、GET
およびPUT
を使用してURIを操作できません。 -
<LimitExcept method ...>
-
Uniform Resource Identifier (URI)の操作に対して、指定のHTTPメソッドを除くすべてを制限します。
次の例は、すべてのシステムが
GET
およびPOST
以外のメソッドを使用できないようにします。<LimitExcept GET POST> Order deny,allow Deny from all </Limit>
-
VirtualHost IP_address:port ...
-
仮想ホストのコンテナを定義するディレクティブのグループを指定します。Apache仮想ホストの構成を参照してください。
ネストしたコンテナについて
次の例に、GET
、POST
およびOPTIONS
を使用して/home/*/public_html
にあるユーザー・ディレクトリを操作できるように、<Limit>
および<LimitExcept>
コンテナを使用してコンテナをネストする方法を示します。
<Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch \ IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory>
この例では、次のディレクティブ・クラスがAllowOverride
ディレクティブで指定されています。
-
AuthConfig
-
認証ディレクティブの使用を許可します。
-
FileInfo
-
ドキュメント・タイプを制御するディレクティブの使用を許可します。
-
Limit
-
ホスト・アクセスを制御するディレクティブの使用を許可します。
Options
ディレクティブは、ディレクトリ階層に対するサーバーの機能を制御します。たとえば:
-
FollowSymLinks
-
ディレクトリ階層でシンボリック・リンクを追跡します。
-
Includes
-
サーバーサイド・インクルードを許可します。
-
IncludesNoExec
-
#exec cmd
および#exec cgi
のサーバーサイド・インクルードの実行を防止します。 -
Indexes
-
DirectoryIndex
ディレクティブが設定されていない場合は、Webディレクトリの一覧を生成します。 -
MultiViews
-
拡張子が異なる複数のバージョンのファイルがある場合は、MIMEに基づいてクライアントの要件に最も適したファイルを使用するようにサーバーで判断することを許可します。
-
SymLinksIfOwnerMatch
-
シンボリック・リンクの参照先ファイルまたはディレクトリの所有者がシンボリック・リンクの所有者と同じ場合は、サーバーによるシンボリック・リンクの追跡を許可します。
詳細は、https://httpd.apache.org/docs/current/mod/directives.htmlを参照してください。
Apache仮想ホストの構成
Apache HTTPサーバーは仮想ホストをサポートしており、これは、同じホスト・マシンに対応する複数のIPアドレスまたはホスト名に転送されたリクエストに応答できることを意味します。各仮想ホストは、異なるコンテンツを提供したり、異なる動作をするように構成できます。
仮想ホストは次の2つの方法で構成できます。
-
IPベースの仮想ホスト(host-by-IP)
各仮想ホストには、IPアドレスとポートの独自の組合せがあります。サーバーは、IPアドレスに応答してホスト名を解決します。SSL (Secure Sockets Layer)プロトコルでの制限があるため、サーバーのHTTPSリクエストに対してHost-by-IPが必要です。
-
名前ベースの仮想ホスト(host-by-name)
すべての仮想ホストが1つの共通IPアドレスを共有します。Apacheは、リクエスト内のホスト名を、構成ファイル内の仮想ホストの
ServerName
およびServerAlias
ディレクティブにマップして、リクエストに応答します。
仮想ホストを構成するには、<VirtualHost hostname>
コンテナを使用します。また、構成した仮想ホスト間で、提供されたすべてのコンテンツを分割する必要があります。
次に、2つの仮想ホストに対する単純な名前ベース構成の例を示します。
NameVirtualHost *:80 <VirtualHost *:80> ServerName websvr1.mydom.com ServerAlias www.mydom-1.com DocumentRoot /var/www/http/websvr1 ErrorLog websvr1.error_log </VirtualHost> <VirtualHost *:80> ServerName websvr2.mydom.com ServerAlias www.mydom-2.com DocumentRoot /var/www/http/sebsvr2 ErrorLog websvr2.error_log </VirtualHost>
詳細は、https://httpd.apache.org/docs/2.2/vhosts/を参照してください。