web-dev-qa-db-ja.com

複数のドメインを持つ1つのApacheサーバー上のSSLおよびServerAlias

私は2つのドメインをポイントし、両方とも異なるサイトをポイントする仮想サーバーを持っています。

例えば、 example1.com に行く /var/www/example1example2.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定義によって解釈されないことを理解しているので、これを迅速な回避策として実行しました。しかし、これを行うための最良の方法は何ですか?

5
  1. はい-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を許可するいくつかの代替手段があります。

  • ワイルドカード証明書。サーバー名は、badger.server.comとmonkey.server.comではなく、badger.comとmonkey.comなどのドメインレベルであるため、この特定の状況には適していません。

ただし サーバー名の表示を使用すると、ハンドシェイクプロセス中にサーバーに必要なホストを通知し、サーバーは正しい証明書。 サーバーはデフォルトの証明書にフォールバックするようですので、「プライマリ」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>
9
Tom H

WwwのServerAliasは完全に正常です。心配ない。凝ったものにしたい場合は、www.example.comからexample.comに、またはその逆にトラフィックを転送するようにRewriteRuleを設定できます。 SSLサポートについては、:80および:443仮想ホストに個別のVirtualHost定義を使用します。

1
MrTuttle