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

  


Post a Comment