VirtualHostの設定にかかわる個人的メモ
November 23, 2016 – 12:32 pm前回書いたScientific Linux7.2でのサーバー構築作業のなかでapacheのVirtualHost設定にかかわり、多少てこずった部分があった。今後に備えて、以下メモを残しておいた。
VirtualHostの利用に必要な設定:
Scientific Linux7.2上のサーバー構築作業で、httpdを最新版(version2.4.6)にした。これに伴い、VirtualHostの利用にかかわる部分でhttpd.confの設定法が変わっていた。以下、関連部分をメモしておいた。
Apacheの(日本語)公式マニュアルでveriosn2.4の(名前ベースの)VirtualHostの利用にかかわる記述のうち大切と感じた部分を以下転載:
メインホストはなくなります
既にあるウェブサーバにバーチャルホストを追加する場合、既存のウェブサーバに対しても<VirtualHost>ブロックを作らなくてはなりません。このバーチャルホストのServernameとDocumentRootは、グローバルなServerNameとDocumentRootと同じものにします。また、このバーチャルホストを設定ファイルの中で先頭に置いて、デフォルトホストとして動作するようにします。
<VirtualHost>ブロック以外には、グローバルなServerName、DocumentRootを設定する必要はなさそうだ。
WordPressのPermalinkカスタマイズに必要な設定:
本ブログのようにWordPressのPermalinkをカスタマイズ形式のURLを用いようとする、即ちディフォルトのURL
https://memorandum.yamasnet.com/?p=123
から、カスタマイズしたURL
https://memorandum.yamasnet.com/archives/Post-3456.html
に書き直す際には、httpのモジュールmod_rewwite.cを用いて、書き換えの手続きをしておかねばならない。本ブログのサイトを実現するための<VirtualHost>ブロックの設定を以下に示す:
<VirtualHost *:80> ServerName memorandum.yamasnet.com ServerAdmin webmaster@yamasnet.com DocumentRoot /var/www/memorandum <Directory "/var/www/memorandum"> AllowOverride All Require all granted <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule> </Directory> </VirtualHost>
内部アドレスから公開アドレスにマッピングするProxyの設定:
mod-proxyを利用して、Proxyを立てると、内部アドレス(localhost:<port>)を外部の公開サーバのアドレスにマッピングすることができる。
この手続き、node.jsでたてたServerを外部に公開する際に有効である。しかし、この手続きを実行しようとすると、SELinuxのアクセス制限が働らき正常に動作しない。SELinuxの機能全てを無効にしてしまえば動作することになるが、セキュリティ上好ましくない。SELinuxの一部の制約を取り除くことが望ましい。
まず、Proxyサーバをたてるための<VirtualHost>ブロックの設定を以下に示す:
<VirtualHost *:80> ServerName node_test.yamasnet.com ProxyRequests Off ProxyVia Off <Proxy *> Require all granted </Proxy> ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
ここで示した<VirtualHost>ブロックにより、
http://localhost:8080/
は、
http://node_test.yamasnet.com/
にマップされる。
これでブラウザを開こうとすると、たとえサーバサイドが正常に動作していても、503 Service Unavailable エラーではじかれ、ブラウザ上には次のようなメッセージが表示される。
Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
この不具合は、SELinuxポリシーが機能し、上述したような形式でProxyサーバでのWebサイトのマッピングが行えないことに起因する(こうした事態が発生した際に、これがSELinuxポリシーが原因かどうかを調べるにはSELinuxを一時的に無効にし、正常に動作することを確認すればよい)。
SELinuxポリシーの一部の変更はブール値の設定を変えることによって行うことができる。ここで問題としているProxyサーバによるWebサイトのマッピングは、以下のコマンドに示すように、ブール値のhttpd_can_network_connectを on にすればよい。
setsebool -P httpd_can_network_connect on