サブサーバーを同じサーバー上の別のポートにリダイレクトするにはどうすればよいですか?


67

同じサーバー上の特定のポートにリダイレクトするサブドメインがいくつかあります。私が持っていると言う

dev.mydomain.com 

私が欲しいdev.mydomain.com透過的にリダイレクトするためにmydomain.com:8080、私は、元のサブドメイン名をブラウザのURLを保存しておきたいです。

Apache 2.2でこれを行うにはどうすればよいですか?Apache 2.2をデフォルトポートで実行しています80。これを実現するための書き込み構成がわかりません。

dev.mydomain.comDNSでに解決するように設定済みmydomain.comです。

これは、ルーティングできないIPアドレスを持つイントラネット開発サーバー用であるため、公開されているサーバーを危険にさらすエクスプロイトやセキュリティについてはあまり心配していません。

回答:


69

解決

マイルズ・エリクソンによって正しい方向に設定された後、私がついに思いついたものがここにあります。リダイレクトされたサーバーとポートではなく、リクエストの元のサブドメイン/ドメインをアドレスバーに反映させたかったのですが、彼は私にGoogleの正しい道を使ってソリューションを提供しVirtualHost、最終的にの使用を含むソリューションを見つけましたmod_proxy

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    ServerName dev.mydomain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/
</VirtualHost>

7
この回答が役に立たなかったすべての人のために、MOD mod_proxyと同様にMOD も有効にする必要があることに留意してくださいproxy_http
マテュカ

9

dev.mydomain.comをmydomain.comのIPに解決できると仮定すると、httpd.confに次を追加できます。

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>

関連するApacheドキュメント:

  1. 名前ベースの仮想ホストの作成ガイド
  2. VirtualHostおよびNameVirtualHostを含むコア
  3. リダイレクト

関連質問: ホスト名に基づいたApacheリダイレクト

(注:この回答の元のバージョンは、RedirectMatchの使用を誤って提案しました。これは、@ ChrisSが有益に指摘したように、URLのドメイン部分を解析できません。)


1
私が実際に使用したものに対する自己提供の回答を参照してください。これは、リダイレクトを行う代わりに元のホストを保持するmod_proxyを使用したVirtualHostの考え方です。これは内部サーバーであるため、mod_proxyのセキュリティやエクスプロイトについては関係ありません。

1
他にも多数の提案が見つかりましたが、最終的にはWindows Server 2008 R2 / Apache 2.2.25でこれが機能しました。
HPWD

1
このソリューションの問題は、兄弟では、最初のドメインに留まらず、302から2番目のドメインを取得することです。
Pleymor

7

ターミナルで次の行を実行します(ドメインとサブドメイン名を正しく指定します)

sudo nano /etc/apache2/sites-available/subdomain.example.com.conf 

次のコードを貼り付けて、必要に応じて変更します

<VirtualHost *:80>
        ServerAdmin admin@example.com
        ServerName subdomain.example.com
        ServerAlias subdomain.example.com
        ProxyRequests Off

        #ProxyPass / http://localhost:8080/
        <Location />
                ProxyPreserveHost On
                ProxyPass http://example.com:8080/
                ProxyPassReverse http://example.com:8080/
        </Location>
     # Uncomment the line below if your site uses SSL.
     #SSLProxyEngine On
</VirtualHost>

ターミナルで次の行を実行します(ドメインとサブドメイン名を正しく指定します)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart

3
これと受け入れられた答えの間に本質的な違いはありますか?
カスペルド

1
ほとんどの人は、追加sudo a2enmod proxy_httpするのを忘れて、適切に実行するのが困難になります。また、最初から最後まで一連のプロセスを完全に提供して、より正確に処理できるようにします。ご質問ありがとうございます。
MAKリポン

1
「ProxyRequests Off」に言及しているため+1
セバスチャン

1
これは私にはうまくいきません。「sudo a2enmod subdomain.domain.com.conf」には「エラー:モジュールxyzが存在しません!」と表示されます 「デフォルト」構成で言及する必要がありますか?
ダークシューマッハ

2
サブドメインの登録の修正 sudo a2ensite sub.yourdomain.com
Ali Azhar

5

メインのvhost設定に次の行を追加します。

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/

これにはApacheのmod_proxyが必要であることに注意してください。


これはリダイレクトではありません。接続をプロキシします。mod_proxyの有効化は、設定にあまり注意を払っていない場合、非常に簡単に悪用できます。これに対して強くお勧めします。
クリスS

4
彼のOPのように、彼はリダイレクトを望んでいません。彼は元のURLをアドレスバーに残したいと考えています。これは、mod_proxyまたはmod_rewriteのいずれかを使用することを意味します。
アダプター

4

mod_rewriteを探しています。以下に、Apacheのドキュメントへのリンクを示します。このドキュメントには、基本的構成と高度な構成の多くの例が含まれています。

ドキュメントを自分で解釈できない場合は、これをhttpd.confに追加してみてください。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]        
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]    

それが明確な例ではない場合は、mod_rewrite初心者ガイドへのリンクもあります。


1
私は共有ホスティングを利用しています。書き換えが唯一のオプションです。.htaccessファイルを作成できますが、プロキシまたは仮想ホストは作成できません。
-abalter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.