2016-06-28 10 views
0

私はどのように対処するのか本当にわからないという課題がありました。私が求めていることは、CloudFrontにカスタムヘッダーを追加し、このカスタムヘッダーを使用してサイトを提供することです。私はまた、ヘッダーが設定されていないときに通常の使用にフォールバックする必要があります。Apache virtualhostのCloudFrontからカスタムヘッダーを使用する方法

私は私のメインのウェブサイトがあります。www.domain.comprod.domain.comに設定原点とCloudFrontは上の設定です。サイトはwww.domain.com(これは変更できません)

として設定されています。私がしたいのは、サイト名を定義し、このヘッダーを私のvirtualhostで使用するCloudFrontのカスタムヘッダーを設定します。正しいサイトを読み込む。例のため

、私はヘッダーを追加しました:会社ホスト名www.domain.comに値を設定します。 CloudFrontの起点はprod.domain.comであり、この新しいドメインのサーバーIPを指すようにDNSを更新しました。これまでのところ良いですが、これでサーバからprod.domain.comをロードしようとしています。

私がしたいことは、Apacheがこれを処理するデフォルトの方法の代わりにカスタムヘッダーを使用してサイトを読み込むことです。ヘッダーが設定されていない場合、私はまだフォールバックが必要です。私は単にこのヘッダーをHOSTヘッダーに設定するだけで十分だと思います。

私のサーバー仕様:

# cat /etc/centos-release 
CentOS release 6.8 (Final) 

# httpd -v 
Server version: Apache/2.2.15 (Unix) 
Server built: May 11 2016 19:28:33 

私はまた、Apacheの2.4でこれを行う方法を知っておく必要がありますが、今2.2のために不可欠であるだろう。

私は、ヘッダーで遊んでみました、私はカスタムヘッダー値を持つホストヘッダーを上書きするために期待していた私のhttp.conf

<IfModule mod_headers.c> 
<IfDefine company_host_name> 
    Header set Host "%{company_host_name}e" 
</IfDefine> 
</ifModule> 

にこれを追加しました。私はこれで十分であると思うが、私はこれを働かせるように見えない。

多分私はそれを複雑にしており、一歩前に戻る必要があります。だから私は、あまりにも難しいとは思っていなかったことについて助けを求めています。

ご協力いただきありがとうございます。あなたの問題の説明から

のVirtualHost

<VirtualHost *:80> 
    ServerName www.domain.com 
    ServerAlias prod.domain.com 

    RequestHeader set Host "www.domain.com" 

    DocumentRoot /var/www/vhosts/domain.com/public_html 

    <Directory /var/www/vhosts/domain.com/public_html> 
    Options -Indexes +FollowSymLinks -MultiViews 
    AllowOverride All 
    </Directory> 

    ErrorLog /var/www/vhosts/domain.com/logs/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog /var/www/vhosts/domain.com/logs/access.log combined 

    <IfModule mod_php5.c> 
    php_value error_log /var/www/vhosts/domain.com/logs/php_error.log 
    php_value newrelic.appname "domain.com - PHP" 
    </IfModule> 

    <IfModule mod_headers.c> 
     Header set Access-Control-Allow-Origin "*" 
    </IfModule> 


    #INCLUDES 

</VirtualHost> 
+0

あなたはオリジンサーバ上の2つの仮想ホスト、 'www.domain.com'のための' prod.domain.com'および他のための1つを持っていますか?両方の仮想ホストが異なる 'DocumentRoot'からのコンテンツを提供していますか? – nidhi

+0

私は現在、サーバに約12個の仮想ホストを持っています。この作業では、私が焦点を当てる必要があるwww.domain.comがあります。これはすでに自分自身の仮想ホストです。 prod.domain.comはありません...私は、クラウドフロントがサーバーにIPを取得させる手段としてprod.domain.comを使用しています(DNSのみ)。私はカスタムヘッダーを使用して、デフォルトのホストの代わりにサイトをロードすることを望んでいます(ヘッダーが定義されていない場合はホストへのフォールバックを使用します)。ここの問題はサイトがwww.domain.comとしてしか動くことができないので、prod.domain.comを追加してディレクトリにマッピングするとうまくいきません... – Jeremy

答えて

1

私はあなたがオリジンサーバprod.domain.comwww.domain.com.
ApacheはServerName]を比較することにより、コンテンツを配信するために、正しいのDocumentRootを選択のためのコンテンツを提供することができるようにしたいことを理解し/ ServerAliasの値は、要求でクライアントによって送信された "Host" Request HeaderでそれぞれのVirtualHostブロックに格納されます。 CloudFrontは常にオリジンサーバーのエンドユーザーとして機能し、オリジンサーバーに常にホストヘッダーとしてprod.domain.comを送信します。

ホスト:CloudFrontは、要求されたオブジェクトに関連付けられた であるオリジンのドメイン名に値を設定します。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#request-custom-headers-behavior

ので、CloudFrontのからの要求を処理できるオリジンサーバ上prod.domain.comのための1つのVirtualHostブロックがあるはずです。 しかし、ウェブサイトはwww.domain.comとしてしか実行できないと述べているので、両方のドメインが同じVirtualHostブロックによってサービスされる必要があります。ここでは、アプリケーションが "Host"ヘッダー値 "www.domain.com"を使用してコンテンツを生成すると仮定しています。

ので、www.domain.comための既存のVirtualHostで、にServerAliasを追加し、次のようにRequestHeaderディレクティブを設定します。にServerAliasがprod.domain.comあるとして、CloudFrontをからの要求がから提供され、

<VirtualHost *:80> 

    ServerName www.domain.com 
    ServerAlias prod.domain.com 

    RequestHeader set Host "www.domain.com" 

    DocumentRoot /path/to/webserver 
    .. 
</VirtualHost> 

今このDocumentRoot。 また、ホストリクエストヘッダーは常にwww.domain.comに上書きされるため、アプリケーションでコンテンツを生成できる必要があります。

あなたは、CloudFrontのを使用してカスタムヘッダーを追加する必要はありませんが、次のように質問に尋ねただけbeacuse、それは行うことができます。

AWSコンソールで、[CloudFrontをして、「ウェブを選択問題の「流通」上部のタブから、[配布設定]を選択します。 次へ「Origins」タブを選択し、「Edit」をクリックします。 カスタムヘッダーcompany-host-nameを「オリジナルカスタムヘッダー」、「ヘッダー名」フィールドに追加し、「ヘッダー値」フィールドに値www.domain.comを追加します。それはすべての要求と一緒に原点に送られます。

enter image description here

+0

これは前に試したことに似ていますが、 RequestHeader set Host "www.domain.com"私が今問題にしているのは、prodからwwwへの無限リダイレクト(301)です。これはprod.domain.comにのみあります。 www.domain.comは期待どおりに動作します。それではまだ動作していません:( – Jeremy

+0

あなたは上記の設定を正確に使い、リダイレクトループを持っていますか? – nidhi

+0

VirtualHostブロックをあなたの質問に貼り付けられますか? – nidhi

関連する問題