Memo

メモ > サーバ > 各論: エトセトラ > Apacheでバーチャルホスト

■Apacheでバーチャルホスト
※一つのサーバに複数のドメイン・サブドメインを割り当てて使用する サーバリソースの有効活用ができる ※バーチャルホストの作成場所は任意だが、 /var/www/html 内に作ると、各バーチャルホスト用に非公開ディレクトリを設けられないので避ける(/var/www/html 自体が公開ディレクトリのため) ここでは /var/www/vhosts 内に作成するものとする。その際の各ディレクトリ名を /var/www/vhosts/example.com/ /var/www/vhosts/pre.example.com/ のようにすると、ドメインが未決定の場合に問題になる また、ドメインが変更される可能性もあるし、複数ドメインが割り当てられる可能性もある よって /var/www/vhosts/example/ /var/www/vhosts/pre_example/ のように作成するほうが良さそう 複数サイトを管理しないのなら、単に product や staging や develop でいいかもしれない が、後から他サイトがつかされる可能性はあるので、案件名が判る文字をディレクトリ名に含めておく方が無難 ※IPアドレスでアクセスしたときはIPアドレスもしくはサーバ名だけが表示されるページにアクセス、 ドメインを指定してアクセスしたら対応するページにアクセス。 とすると管理しやすいかも ※バーチャルホストが不要な案件でも、後々検収環境が追加されたりを想定して、常にバーチャルホストにしておくといいかも ※SSL用の設定は丸ごと移行させないと、デフォルト値が上書きされない状態で反映されるかも?要検証 名前ベースの仮想ホスト http://www.adminweb.jp/apache/virtual/index2.html バーチャルホスト設定(Apache) http://centossrv.com/apache-virtualhost.shtml
# mkdir -p /var/www/vhosts/main/html … バーチャルホスト用ドキュメントルートディレクトリ作成 # vi /etc/httpd/conf/httpd.conf … Apache設定ファイル編集
# # Use name-based virtual hosting. # NameVirtualHost *:80 … コメント解除(バーチャルホスト有効化) # # NOTE: NameVirtualHost cannot be used without a port specifier # (e.g. :80) if mod_ssl is being used, due to the nature of the # SSL protocol. #
# vi /etc/httpd/conf.d/virtualhost.conf … バーチャルホスト設定ファイル作成
<VirtualHost *:80> … httpアクセス ServerName any … デフォルトのアクセスを指定 DocumentRoot /var/www/html </VirtualHost> <VirtualHost *:80> … httpアクセス ServerName refirio.net … refirio.net でアクセスされた場合 DocumentRoot /var/www/vhosts/main/html … /var/www/vhosts/main/html をドキュメントルートとする <Directory "/var/www/vhosts/main/html"> Options Includes ExecCGI FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
最低限、以下の記述だけで動作する。Directoryの指定は一箇所にまとめておくとメンテナンスしやすそう
<VirtualHost *:80> ServerName refirio.net DocumentRoot /var/www/vhosts/main/html </VirtualHost>
■SSL(必要に応じて) 続いて、必要に応じてSSL用の設定を行う apacheで複数のSSL設定を行う http://y-stream.blogspot.jp/2011/09/apachessl.html Apache2.2 の VirtualHost を SSL を使うサイトにも適用 http://qiita.com/da0shi/items/70572e1da228795e0d4b vi http://ext.omo3.com/vi/index.html ApacheでSSL(https)で複数のバーチャルホストの設定 http://istks.net/2322 なおApache 2.2.12以降ならSNIに対応しているので、バーチャルホストで複数のSSL証明書を利用できる 詳細は後述の「1サーバに複数のSSL証明書を設定する」を参照
# vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 NameVirtualHost *:443 … 追加する
# vi /etc/httpd/conf.d/ssl.conf … ApacheSSL設定ファイル編集
<VirtualHost _default_:443> の項目をすべてコメントアウトする (「<VirtualHost _default_:443>」と「</VirtualHost>」の行も含めてコメントアウトする) たとえ内容がカラでも、後で設定する「<VirtualHost *:443> 〜 </VirtualHost>」が反映されないため
# vi /etc/httpd/conf.d/virtualhost.conf … バーチャルホスト設定ファイル編集
<VirtualHost *:443> … httpsアクセス ServerName refirio.net … refirio.net でアクセスされた場合 DocumentRoot /var/www/vhosts/main/html … /var/www/vhosts/main/html をドキュメントルートとする ErrorLog logs/ssl_error_log … 以降はSSL用の設定 TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:!RC4:!3DES:!RSA SSLCertificateFile /etc/httpd/conf/ssl.crt/refirio.net.20170410.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/refirio.net.20170410.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/ica.refirio.net.20170410.crt </VirtualHost>
もともと ssl.conf の VirtualHost 内にあった設定を記載し、 さらに ServerName や SSLCertificateFile の設定を追加している ■動作確認
# chown refirio. /var/www/vhosts/main/html/ … ドキュメントルートの所有者を「refirio」に変更 # ll /var/www/ … ドキュメントルートの所有者を確認 合計 24 drwxr-xr-x 2 root root 4096 10月 5 11:45 cgi-bin drwxr-xr-x 3 root root 4096 10月 9 00:19 error drwxr-xr-x 5 refirio refirio 4096 9月 27 17:43 html drwxr-xr-x 3 root root 4096 9月 27 09:29 icons # service httpd configtest … 設定ファイルの構文をチェック # service httpd restart … httpdを再起動 httpd を起動中: [ OK ] # vi /var/www/vhosts/main/html/index.html … テストページ作成
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>テスト / main</title> </head> <body> <p>テスト / main</p> </body> </html>
■サブドメインなしでのアクセス refirio.net で /var/www/html を表示し、 test.refirio.net で /var/www/vhosts/test/html を表示するような場合、 上の設定を行うと /var/www/html へアクセスできなくなる可能性がある。 その場合、以下のように /var/www/html へのアクセスを明示的に設定する。
<VirtualHost *:80> ServerName refirio.net DocumentRoot /var/www/html </VirtualHost>
IPアドレス経由でのアクセスなら、以下のように設定できる。
<VirtualHost *:80> ServerName 203.0.113.1 DocumentRoot /var/www/html </VirtualHost>
もしくは以下のように、最初に any を定義しておくとデフォルトのアクセスを指定できる
<VirtualHost *:80> ServerName any DocumentRoot /var/www/html </VirtualHost>
一つのApacheサーバーで複数ドメインのサイトを公開する方法 | 技術系のメモ https://humble-mumble.com/apache-multiple-sites/ ■エイリアスの指定 ※未検証 同じディレクトリに複数のドメインを割り当てる場合、 ServerName のセットをいくつも並べなくても ServerAlias で対応できる mod_rewrite と組み合わせれば、ドメイン統一のためのリダイレクトも対応できる バーチャルホストのサーバ名別名でVirtualHost設定を簡素に - Qiita https://qiita.com/Vit-Symty/items/eb7d98a1576e93b3b130 ■ログでバーチャルホストを区別 バーチャルホスト https://httpd.apache.org/docs/2.0/ja/logs.html#virtualhosts バーチャルホストごとにApacheログを分けない場合、どのアクセスがどのバーチャルホストに対してのアクセスなのか区別できなくなる /etc/httpd/conf/httpd.conf のLogFormatに「%v」と書いておくと test.refirio.net のような値として記録されるので、必要なら調整する 以下は設定例
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %{X-Forwarded-For}i %{X-Forwarded-Proto}i %v" combined
test.refirio.net のような値ではなく、例えばサブドメイン「test」でアクセスした際に「test」と記録したい場合、以下のように設定する 「combined_test」の部分は、他のログ設定と重複しない値にする 以下は設定例
<VirtualHost *:80> ServerName test.refirio.net DocumentRoot /var/www/test LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %{X-Forwarded-For}i %{X-Forwarded-Proto}i test" combined_test CustomLog logs/access_log combined_terraport env=!no_log </VirtualHost>
ただしバーチャルホストが増えると管理しづらいので、前に挙げた方法を推奨 ■ワイルドカード http://203.0.113.1/ http://refirio.work/ http://www.refirio.work/ http://test1.refirio.work/ http://test2.refirio.work/ のようなURLでアクセスできるようにする サブドメインに応じたディレクトリを参照するようにし、サブドメインの追加はディレクトリの追加のみでできるようにする
名前 種別 内容 A 203.0.113.1 * A 203.0.113.1
以下のように設定する
# mkdir -p /var/www/vhosts/203.0.113.1/html # echo "refirio.work" > /var/www/vhosts/203.0.113.1/html/index.html # mkdir -p /var/www/vhosts/refirio.work/html # echo "refirio.work" > /var/www/vhosts/refirio.work/html/index.html # mkdir -p /var/www/vhosts/www.refirio.work/html # echo "www.refirio.work" > /var/www/vhosts/www.refirio.work/html/index.html # mkdir -p /var/www/vhosts/test1.refirio.work/html # echo "test1.refirio.work" > /var/www/vhosts/test1.refirio.work/html/index.html # mkdir -p /var/www/vhosts/test2.refirio.work/html # echo "test2.refirio.work" > /var/www/vhosts/test2.refirio.work/html/index.html # vi /etc/httpd/conf.d/virtualhost.conf
<VirtualHost *:80> ServerName refirio.work ServerAlias *.refirio.work … ワイルドカードでアクセスできるようにする VirtualDocumentRoot "/var/www/vhosts/%0/html" … 「%0」には「203.0.113.1」「refirio.work」「www.refirio.work」のような値が入る <Directory "/var/www/vhosts/*/html"> … すべてのディレクトリに対して設定 Options Includes ExecCGI FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
# service httpd restart
なお、常に同じディレクトリを参照させるなら、以下の指定のみで対応できる
# vi /etc/httpd/conf.d/virtualhost.conf
<VirtualHost *:80> ServerName refirio.work ServerAlias *.refirio.work DocumentRoot /var/www/html <Directory "/var/www/html"> Options Includes ExecCGI FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
ムームーDNSでワイルドカードをご利用いただけるようになりました! | ムームードメイン https://muumuu-domain.com/?mode=info&id=3039 VirtualDocumentRootを使って複数ドメインをスッキリ管理(Apache) - y-kawazの日記 http://d.hatena.ne.jp/y-kawaz/20110725/1311610727 【apache】VirtualDocumentRootで、ディレクトリを作るだけでサブドメインが作れる at softelメモ https://www.softel.co.jp/blogs/tech/archives/2189

Advertisement