私は2つのドメインをポイントし、両方とも異なるサイトをポイントする仮想サーバーを持っています。
例えば、 example1.com
に行く /var/www/example1
。 example2.com
に行く /var/www/example2
。
VirtualHostsでこれをうまく実行できます。
<VirtualHost *:80>
ServerName example1.com
DocumentRoot "/var/www/example1"
</VirtualHost>
<VirtualHost *:80>
ServerName example2.com
DocumentRoot "/var/www/example2"
</VirtualHost>
私の最初の質問は、先頭のwww
に関するものです。 www
のサポートを有効にするために、ServerAlias
を追加しました。
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot "/var/www/example1"
</VirtualHost>
これはこれを行うための最良の方法ですか?
2番目の質問はSSLに関するものです。 example2.com
SSL経由でアクセスする場合:https://example2.com
。証明書などを発行しましたが、httpd.conf
ファイル?現時点では、一時的な回避策があります。これを指すようにサーバーのメインDocumentRoot
を変更しました/var/www/example2
。 SSLは別のポートにあるため、VirtualHost定義によって解釈されないことを理解しているので、これを迅速な回避策として実行しました。しかし、これを行うための最良の方法は何ですか?
はい-ServerAliasはそれを実現する標準的な方法です。 www.myserver.comを「最も好ましい」IDとして選択し、「myserver.com」をエイリアスとして持つことが望ましい場合がありますが、ある時点でURLを正規化(リンクを優先リンクに変換)しない限り、違いはありません。 。
2。
編集:私はOPの質問を誤解しているようですので、これはほとんど無関係です
短い回答(1つのApacheサーバーで複数のSSLサイトをホストする場合)
最も簡単なソリューションは、IPベースの仮想ホストです...すべてのブラウザーをサポートします-ISPに2番目のIPアドレスを要求します。したがって、SSL証明書ごとに1つのIPがあります。設定例については、以下を参照してください。
サーバー名の表示-XPまたは古いサファリではない、または古いAndroid-1つのIPでのみ機能する- http://wiki.Apache。 org/httpd/NameBasedSSLVHostsWithSNI
長い回答(そして私がこの回答に夢中になってしまった少年... ;-)これがSSLと名前の仮想ホスティングの簡単な入門書です。 ..
名前ベースの仮想ホスティングは、クライアント(つまり、Webブラウザーなど)によって提示される「ホスト」ヘッダーに基づいて、Webサイト間でWebサーバーを共有する戦略です。
これはHTTP 1.1拡張であり、これを使用するためにApacheはリクエストのコンテンツを読み取り、ヘッダーを解析します。つまり、次のようになります。
GET /index.htm HTTP/1.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0
Host: www.google.co.uk <-- Apache checks this value
ただし、SSL接続で TLSハンドシェイク を使用すると、SSL証明書の「共通名」フィールドを使用して、ホストヘッダーが送信される前にサーバーが自身を識別します。
したがって、(従来の... SSL v1、古いブラウザなど、Windows XPを使用して)サーバーが最初に行うことはそれ自体をwww.Amazon.comと識別し、変更できないため、IPアドレスごとに1つのSSL IDしかありませんその後...
基本的に違いはそのようです、通常の http://myserver.com リクエストでは
client: hello server
server: hello client
client: please give me web XXX
server: here is websiteXXX
しかし、https://リクエストの場合は、次のようになります。
client: hello server
server: I am website XXX
client: ok, go ahead and give me website XXX
server: here is websiteXXX
つまり、基本的に、古いブラウザのソリューションを含む「すべてのブラウザをサポートする」ためにISPに別のパブリックIPアドレスを要求し、2番目の仮想ホストを2番目のホストにバインドする必要があります。最初の代わりにIP ...
ただし、SNIやワイルドカード証明書など、最新のほとんどのブラウザで機能する単一のIPアドレスで複数のSSL IDを許可するいくつかの代替手段があります。
ただし サーバー名の表示を使用すると、ハンドシェイクプロセス中にサーバーに必要なホストを通知し、サーバーは正しい証明書。 サーバーはデフォルトの証明書にフォールバックするようですので、「プライマリ」SSLサイトがあり、ユーザーリクエストの損失を受け入れることができる重要なもの。
基本的に、SSL仮想ホストを追加するためのディレクティブは似ていますが、NameVirtualHostsではなくプレーン仮想ホストのみを追加する点が異なります。
#if not done elsewhere in httpd.conf incldue these
Listen 443
LoadModule ssl_module modules/mod_ssl.so
#this does work for wildcard SSL certs like *.myserver.com (and SNI???)
NameVirtualHost *:443
<VirtualHost 1.1.1.1:443>
SSLEngine On
ServerName address1.com
DocumentRoot /var/www/adderss2
SSLCertificateFile /etc/httpd/conf/domaina_ssl/zimbra.zmb.moc.crt
</VirtualHost>
<VirtualHost 1.1.1.2:443>
SSLEngine on
ServerName address2.com
DocumentRoot /var/www/adderss2
SSLCertificateFile /etc/Apache2/ssl/Apache.pem
</VirtualHost>
WwwのServerAliasは完全に正常です。心配ない。凝ったものにしたい場合は、www.example.comからexample.comに、またはその逆にトラフィックを転送するようにRewriteRuleを設定できます。 SSLサポートについては、:80および:443仮想ホストに個別のVirtualHost定義を使用します。