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/を参照してください。