2

私はまだ Apache の設定の専門家ではないので、テスト サーバーをセットアップしようと努力したにも関わらず、何か簡単なことを見逃していたらすみません。

バックグラウンド

2 つの要件があります。

  1. のリクエストsubdomain.domain.comは、/var/www/html/subdomain
  2. のリクエストは、同じシステム上のcode.domain.com別のサーバーで別のポートで処理する必要があります。最初の要件と同じルールの下で処理されるべきではない固定サブドメインであることに注意してください。別の言い方をすれば、から提供する必要があり、から提供する必要がありますが、まったく異なる方法で処理されます。codemysite.domain.com/var/www/html/mysitexyz.domain.com/var/www/html/xyzcode.domain.com

試したこと

#1を行うには、を使用しますVirtualDocumentRoot /var/www/html/%1。#2については、codeサブドメインだけで、およびを使用してポート5000の同じシステム上の別のサーバーにトラフィックをリダイレクトするまったく異なる構成を使用する必要がProxyPassありProxyPassReverseます。

結果

<VirtualHost>使用されるサブドメインが NOT であっても、すべてのリクエストは最初のコンテナに従って Proxy ディレクティブを介してリダイレクトされcodeます。

codevhost は設定の最初にありますが、サブドメインが NOT の場合は使用しないでください。codeクライアントによって要求された ServerName が ではないためcode.domain.comです。

質問

1 つの特定のサブドメインが 1 つの仮想ホストを使用し、他のサブドメインが別の仮想ホストを使用するように、これら 2 つの構成を調整するにはどうすればよいですか?

構成

<VirtualHost *:80>
    ServerName code.domain.com
    ServerAlias code.local
    ServerAdmin foo@domain.com
    DocumentRoot /var/www/repos
    ErrorLog logs/code.domain.com
    CustomLog logs/code-access common
    ProxyPass / http://localhost:5000/
    ProxyPassReverse / http://localhost:5000/
    <Directory "/var/www/repos">
       DAV On
       Options +Indexes +FollowSymLinks
       AllowOverride All
       Allow from all
       Order allow, deny
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    UseCanonicalName Off
    VirtualDocumentRoot /var/www/html/%1
    VirtualScriptAlias /var/www/html/%1/cgi-bin
    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog logs/access_log vcommon
    ServerName domain.com
    ServerAlias localhost
    ServerAdmin foo@domain.com
</VirtualHost>
4

2 に答える 2

0

私にとって美しく機能する構成を見つけました。vhost構成全体を削除し、次のように置き換えました。

<VirtualHost *:80>
    ServerAdmin foo@domain.com
    VirtualDocumentRoot /var/www/html/%-3+
    ServerName domain.com
    ServerAlias localhost
    CustomLog logs/domain.com-access "%V -> %u@%h (%t): %Bb %Dmu"
    ErrorLog logs/error_log
</VirtualHost>

/var/www/html/code/.htaccessで、mod_rewriteのPフラグを使用して、必要に応じてトラフィックをプロキシします。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ http://localhost:5000/$1 [L,P]
</IfModule>

%-3+inVirtualDocumentRootを使用すると、URLに複数のドットを使用して、名前にドットが含まれるディレクトリにアクセスすることもできます。たとえば、のテストサーバーにはを使用しanothersite.comてアクセスできanothersite.com.domain.com、ファイルはから提供され/var/www/html/anothersite.comます。

2つのキャッチがあります:

  1. これは、ワイルドカードCNAMEレコードでのみ機能します。
  2. www.domain.comdomain.comリクエストの動作は異なります。
于 2012-12-18T04:02:57.957 に答える
0

あなたの問題を解決するのは、難しすぎてはいけません。

最初に両方の仮想ホストを交換します。最初のものは毎回デフォルトのものです。そのため、一致するルールがない場合、すべての呼び出しがこの仮想ホストとして処理されます。

次に mod rewrite でリクエストを正しいディレクトリに移動するか、有効なドメインごとに仮想ホストを作成します。後者ははるかに単純で、個別のログ ファイルを持つことができます。

于 2012-12-15T06:43:31.873 に答える