マルチドメイン - VirtualHostの設定(初心者がさくらのVPSを立ち上げるまで - その8)
ディレクトリ構成を考える
名前の解決ができない場合の挙動
VirtualHostを設定した場合で、ドメイン名の解決ができない場合、一番最初に読み込まれたVirtualHostが表示される。
たとえば、このサーバーのIPが指定されたドメインでアクセスしてきたが、まだVirtualHostの設定が行われていない場合、一番最初に読み込まれたVirtualHost(別のドメイン)が表示されてしまうことになる。
Not Foundページを用意する
このルールを逆手に取って、VirtualHostの一番最初に読み込ませるサイトに、
"Not Found*1"とでも書いたindex.htmlを一枚だけ置いておけば良い。
これで、このサーバーに来たけれど行き先のない(名前の解決ができなかった)アクセスが、すべてこのページに集まることになる。
ディレクトリ構造
公開用のディレクトリについては、デフォルトで /var/www/html/ というディレクトリが用意されているが、今回は、このディレクトリには管理用のサブドメイン*2を当てて、一般公開できないツール類を寄せることにする。もちろん、この /html/ ディレクトリには、Digest認証(もしくはBasic認証)をあてて限定的な公開とする
また、メインのドメインやその他のドメイン・サブドメインについては、それぞれ別のディレクトリを作り、公開していくこととした。
これを図示すると、以下のようになる。
エイリアスに注意
phpMyAdminのインストール時に設定されたエイリアスなど、VirtualHostの記述の外で読み込まれたエイリアスは、VirtualHostの外枠で効力を発揮してしまう。
上の例で言うと、
admin.hoge.com/phpmyadmin/ でもアクセスできるし、
hoge.com/phpmyadmin/ や
fuga.com/phpmyadmin/ でもアクセスできてしまうのだ。
これらのエイリアスは全て削除し、アクセスできるドメインを設定したVirtualHostの記述の内側に移動しなければならない。
意外と見落としがちなのに非常に危険なので、後から青くならないためにも十分に配慮したい。
マルチドメインの管理
マルチドメインの管理を簡略にするため、notfound 以外の全てのドメインは、一つのドメイン毎に1つの設定ファイルを用意し、専用のディレクトリにまとめて保存することとした。
httpd.confの設定
#13 VirtualHostの設定をしよう (1) | さくらのVPS入門 - プログラミングならドットインストール
マルチドメインの設定 | 初心者でもわかる!さくらVPS | Sakura VPS 設定マニュアル
大枠の設定については、参考サイト通りで良いと思うが、今回は以下のように設定してみた。
参考サイトとの大きな違いは、以下の2点だ。
- Section 2 の /var/www/html/ ディレクトリ設定の削除*3
- VirtualHost用設定ファイル群の Include を追加
設定例 httpd.conf
コメント行を削除し、モジュールなども不要なものをなるべく読み込まないように削っている。*4
### Section 1: Global Environment ServerTokens Prod ServerRoot "/etc/httpd" PidFile run/httpd.pid Timeout 60 KeepAlive Off MaxKeepAliveRequests 100 KeepAliveTimeout 15 ## Server-Pool Size Regulation (MPM specific) <IfModule prefork.c> StartServers 10 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 60 MaxRequestsPerChild 1000 </IfModule> <IfModule worker.c> StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> Listen 80 Listen 443 # Dynamic Shared Object (DSO) Support 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 authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule info_module modules/mod_info.so LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so LoadModule actions_module modules/mod_actions.so LoadModule speling_module modules/mod_speling.so 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 LoadModule cgid_module modules/mod_cgid.so LoadModule dbd_module modules/mod_dbd.so LoadModule filter_module modules/mod_filter.so LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule dav_svn_module modules/mod_dav_svn.so #LoadModule authz_svn_module modules/mod_authz_svn.so #Read External Conf Include conf.d/*.conf User apache Group apache ### Section 2: 'Main' server configuration ServerAdmin root@localhost UseCanonicalName Off DocumentRoot "/var/www/html" ServerName admin.hoge.jp:80 #コントロールパネルで指定したサーバーネームを入れる #Root settings <Directory /> Options -Indexes FollowSymLinks AllowOverride None </Directory> DirectoryIndex index.html index.php index.cgi AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files> TypesConfig /etc/mime.types DefaultType text/plain HostnameLookups Off ErrorLog logs/error_log LogLevel warn LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent CustomLog logs/access_log combined ServerSignature Off Alias /icons/ "/var/www/icons/" <Directory "/var/www/icons"> Options -Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8 AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip AddIconByType (TXT,/icons/text.gif) text/* AddIconByType (IMG,/icons/image2.gif) image/* AddIconByType (SND,/icons/sound2.gif) audio/* AddIconByType (VID,/icons/movie.gif) video/* AddIcon /icons/binary.gif .bin .exe AddIcon /icons/binhex.gif .hqx AddIcon /icons/tar.gif .tar AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip AddIcon /icons/a.gif .ps .ai .eps AddIcon /icons/layout.gif .html .shtml .htm .pdf AddIcon /icons/text.gif .txt AddIcon /icons/c.gif .c AddIcon /icons/p.gif .pl .py AddIcon /icons/f.gif .for AddIcon /icons/dvi.gif .dvi AddIcon /icons/uuencoded.gif .uu AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl AddIcon /icons/tex.gif .tex AddIcon /icons/bomb.gif core AddIcon /icons/back.gif .. AddIcon /icons/hand.right.gif README AddIcon /icons/folder.gif ^^DIRECTORY^^ AddIcon /icons/blank.gif ^^BLANKICON^^ DefaultIcon /icons/unknown.gif ReadmeName README.html HeaderName HEADER.html IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t AddLanguage en .en AddLanguage ja .ja LanguagePriority ja en ForceLanguagePriority Prefer Fallback AddDefaultCharset UTF-8 AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl AddHandler cgi-script .cgi .pl AddHandler type-map var AddType text/html .shtml AddOutputFilter INCLUDES .shtml Alias /error/ "/var/www/error/" <IfModule mod_negotiation.c> <IfModule mod_include.c> <Directory "/var/www/error"> AllowOverride None Options IncludesNoExec AddOutputFilter Includes html AddHandler type-map var Order allow,deny Allow from all LanguagePriority en ForceLanguagePriority Prefer Fallback </Directory> </IfModule> </IfModule> BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0 BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully BrowserMatch "MS FrontPage" redirect-carefully BrowserMatch "^WebDrive" redirect-carefully BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully BrowserMatch "^gnome-vfs/1.0" redirect-carefully BrowserMatch "^XML Spy" redirect-carefully BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully ### Section 3: Virtual Hosts #Virtual Host NameVirtualHost *:80 NameVirtualHost *:443 # Primary Access to Virtual Host # notfound <VirtualHost *:80> DocumentRoot /var/www/notfound/public_html ServerName notfound.hoge.jp #名前解決しないアクセス用なので適当な名前で良い RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] ErrorLog logs/error_log CustomLog logs/access_log combined <Directory "/var/www/notfound/public_html"> DirectoryIndex index.html Options -Indexes FollowSymLinks Order deny,allow Allow from all </Directory> </VirtualHost> #Include Virtual Host Setting Include conf.vh/*.conf
VirtualHost用の設定を作る
VirtualHost用のconfファイルを保存するディレクトリを作成
mkdir /etc/httpd/conf.vh chmod 755 /etc/httpd/conf.vh
VirtualHost用の公開ディレクトリを作成
mkdir -p /var/www/[ドメイン名]/public_html chown -R apache:apache /var/www/[ドメイン名] chmod 775 /var/www/[ドメイン名]/public_html
confファイルの追加
vim /etc/httpd/conf.vh/[ドメイン名].conf
前出のディレクトリ名も、ここで作るファイル名も、実はなんでも良いのだが、ドメイン名にしておくとあとあとわかりやすい。
以下のテキストを貼り付けて、適当に編集する。
# ドメイン名.com <VirtualHost *:80> DocumentRoot /var/www/ドメイン名.com/public_html ServerName ドメイン名.com ServerAlias www.ドメイン名.com RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.ドメイン名\.com)(:80)? [NC] RewriteRule ^/(.*) http://ドメイン名.com/$1 [R=301,L] ErrorLog logs/error_log CustomLog logs/access_log combined <Directory "/var/www/ドメイン名.com/public_html"> DirectoryIndex index.html index.htm index.php index.cgi index.html.var Options -Indexes ExecCGI FollowSymLinks #mod_deflate設定 <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript text/css </IfModule> Order deny,allow Allow from all </Directory> </VirtualHost> # ssl ドメイン名.com <VirtualHost *:443> DocumentRoot /var/www/ドメイン名.com/public_html ServerName ドメイン名.com ServerAlias www.ドメイン名.com RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.ドメイン名\.com)(:80)? [NC] RewriteRule ^/(.*) https://ドメイン名.com/$1 [R=301,L] ErrorLog logs/error_log CustomLog logs/access_log combined SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateKeyFile /etc/httpd/conf/server.key SSLCertificateFile /etc/httpd/conf/server.crt <Directory "/var/www/ドメイン名.com/public_html"> DirectoryIndex index.html index.htm index.php index.cgi index.html.var Options -Indexes ExecCGI FollowSymLinks #mod_deflate設定 <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript text/cs# </IfModule> Order deny,allow Allow from all </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost>
サーバー証明を持ってない場合は、sslのブロックは全部削除。
admin用のファイルでは、
<Directory "/var/www/ドメイン名.com/public_html">
の部分を
<Directory "/var/www/html">
とする。
また、上記は、www無しに統一しているパターンなので、www有りにURLを統一したい場合は、該当部分を以下に差し替える。
ServerName www.[ドメイン.名] ServerAlias [ドメイン.名] RewriteEngine on RewriteCond %{HTTP_HOST} ^(ドメイン\.名)(:80)? [NC] RewriteRule ^/(.*) http://www.ドメイン.名/$1 [R=301,L] ServerName www.[ドメイン.名] ServerAlias [ドメイン.名] RewriteEngine on RewriteCond %{HTTP_HOST} ^(ドメイン\.名)(:80)? [NC] RewriteRule ^/(.*) https://www.ドメイン.名/$1 [R=301,L]
phpmyadminのエイリアスの設定
vim /etc/httpd/conf.d/phpMyAdmin.conf
設定ファイルを開いたら、エイリアスの設定をコメントアウトして無効にする。
Alias /phpMyAdmin /usr/share/phpMyAdmin ↓ #Alias /phpMyAdmin /usr/share/phpMyAdmin
admin.hoge.com用に追加した設定ファイルを開き、
Alias /phpMyAdmin /usr/share/phpMyAdmin
を追加する。なお、このときにphpMyAdmin部分をわかりづらい名前にしておくとなお良い。*5
httpd再起動
service httpd configtest service httpd restart
目次
一連の記事の目次は、以下のページにあります。
初心者がさくらのVPSを立ち上げるまで - その1