web-dev-qa-db-ja.com

HerokuインスタンスへのURL書き換えを設定するにはどうすればよいですか?

私はDevOpsの人というよりはエンジニアなので、これが非常に基本的なことである場合は失礼します。

私の状況:example.eduネットワーク上にサーバーがあるため、example.eduへのメインDNSインターフェイスを制御していません。したがって、DNSSimpleまたはZerigoを使用できるとは思いません。ただし、サーバーにはrootがあり、次の2つのホスト名があります。

foo.example.edu
bar.example.edu

私の目標は、次のことを行うようにApacheを設定することです。

  • まず、訪問者がfoo.example.eduと入力すると、静的なWebページが表示されます。

    http://foo.example.edu->静的なWebページを提供する

  • 次に、訪問者がbar.example.eduと入力すると、URL書き換えが実行され、次のように、HerokuでホストされているサイトのHTTPSバージョンが表示されます。

    http://bar.example.edu-> https://bar-example-edu.herokuapp.comhttps://bar.example.edu-> https://bar-example-edu.herokuapp.comhttps://bar.example.edu/some/url-> https://bar-example-edu.herokuapp.com/some/url

  • 特に、これはURLの書き換えである必要があるため、ブラウザのアドレスバーに、訪問者にはhttps://bar.example.edu/some/urlではなくhttps://bar-example-edu.herokuapp.com/some/urlが表示されます。

どうすればこれを行うことができますか? Apache mod_rewriteを使用し、httpd.confを編集する必要があると思います。チュートリアルを見始めたばかりですが、主な注意点は、ドメインを完全に制御できないため、正しく設定されていることを確認したいということです。

4
ramanujan

必要なすべてのApacheVirtualHostディレクティブがすでに配置されていると仮定すると、基本的に、「bar.example.com」のポート80およびポート443 VirtualHostディレクティブに以下を追加する必要があります...(いずれかを選択してください)

オプション1:書き換えルール書き換えルールを探しているとおっしゃっていたので、これを投稿しますが、以下の参照リンクに記載されているように、これを行うための最良の方法ではありません。

RewriteEngine on
RewriteRule ^(.*)$   https://bar-example-edu.herokuapp.com/$1   [P]

参照: http://httpd.Apache.org/docs/current/rewrite/flags.html#flag_p

オプション2:mod_proxyを直接使用する

ProxyPass / https://bar-example-edu.herokuapp.com/
ProxyPassReverse  / https://bar-example-edu.herokuapp.com/

参照: http://httpd.Apache.org/docs/current/mod/mod_proxy.html#proxypass

...ちなみに、herokuアプリがhttps(SSL)を使用している場合は、プロキシ構成をポート443(ssl)VirtualHostディレクティブに配置し、ポート80VirtualHostに次の行を含める必要があります。

Redirect / https://bar.example.edu/

...訪問者を開始する前にhttpsに誘導する必要があります。

2
TommyTheKid

静的サイトのApache構成は簡単です(標準の無関係な行は省略しました)

<VirtualHost *:80>
    ServerName foo.example.edu
    DocumentRoot /var/www/foo.example.edu   
</VirtualHost>

Bar.example.eduのリダイレクトは、 sslリダイレクトのApacheガイドライン に従うことができます。この単純なユースケースではmod_rewriteは必要ないため、組み込みのリダイレクトを使用します。

<VirtualHost *:80>
    ServerName bar.example.edu
    Redirect permanent / https://bar.example.edu/
 </VirtualHost>

また、Herokuへのリダイレクトには、mod_proxy_httpを使用してリダイレクトします。暗号化された仮想ホストは次のようになります

ProxyRequests Off
<Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Deny from none
</Proxy>
ProxyVia On
<VirtualHost *:443>
    ServerName bar.example.edu
    SSLEngine On 
    SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    ProxyPass / https://bar-example-edu.herokuapp.com/
    ProxyPassReverse  / https://bar-example-edu.herokuapp.com/
    ProxyPassReverseCookieDomain  / https://bar-example-edu.herokuapp.com/
 </VirtualHost>

アプリのソースコードのHeroku側では、次のコマンドを使用してアプリケーションを作成します。

 heroku create bar-example-edu

そして、それらを構成します カスタムドメインアドオン

 heroku domains:add bar.example.edu

プロキシに関して書いたドキュメントのセクション からHerokuに少し変更しました。

0
flurdy