Apacheが別のポートにリダイレクトする


151

私はしばらくこれに苦労してきて、間違いなく何か間違ったことをしています。

同じマシン上にApacheサーバーとJBossサーバーがあります。mydomain.comのトラフィックをJBoss localhost:8080 / exampleにリダイレクトしたいと思います。DNSは現在mydomain.com用に設定されており、ブラウザに入力するとポート80に直接移動します。

私の質問は、特定のドメイン名(この場合は「mydomain.com」)がApacheに到達したときに、どのようにして別のポートにリダイレクトするのですか?

<VirtualHost ip.addr.is.here> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

提案付きで更新 -ポート8080にまだ転送されない

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

よさそうですね。あなたの症状は何ですか?
Martin Vilcans、2011

Sympotmsは、ブラウザにwww.mydomain.comを配置したものの、Apacheルートディレクトリに移動します。代わりに、jbossサブディレクトリlocalhost:8080 / subdirにリダイレクトするようにします。現在、さまざまなドメインをポート80に直接リダイレクトするために機能していますが、別のポートに移動することはできません。
agentcurry 2011

まったく同じリクエストがあります。解決策は見つかりましたか?
Cystack

1
@Cystack-私はそれをうまく機能させることができませんでした。非常に多くのバリエーションの構成を試してみましたが、気が狂いました。私はそれをあきらめました= /解決策を見つけたら、ここに投稿してください。これを機能させる方法を教えてください。幸運を、我が友よ!
agentcurry

これが私の仕事:serverfault.com/a/195831/111707
jjrv

回答:


224

http://example.comProxyPassおよびProxyPassReverseのドメインは除外し、そのままにしておきます/。さらに、リダイレクト先/の末尾にexample/を残す必要があります。また、http://example.comvs。で問題が発生しhttp://www.example.comました。ServerNameをwww.example.com、ServerAlias example.comにするまで、wwwのみが機能しました。次のことを試してください。

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.example.com
  ServerAlias example.com
  ProxyPass / http://localhost:8080/example/
  ProxyPassReverse / http://localhost:8080/example/
</VirtualHost> 

これらの変更を行った後、必要なモジュールを追加してApacheを再起動します

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

9
Apacheを再起動する前に、Apacheのモジュールを有効にする- digitalocean.com/community/tutorials/...
Pradyutバッタチャリヤ

1
これはCentOSサーバーでも同じですか?(私はなぜそうでないのか分かりません、ただ確認しています)。そして、これはどのような構成ファイルですか?(/ etc / httpd / confのどこかにあると思います...)
Jeremy

1
動作しましたが、アプリケーションのウェルカムページでcssが読み込まれていませんでした(以前はexample.com:8080/exampleで動作していました)。また、いくつかの例外が発生しました。私が何を欠いているのか?
Rajarshee Mitra、2015

1
私がやったまでこれが私のhttpdのエラー「サービスが利用できない」原因/usr/sbin/setsebool -P httpd_can_network_connect 1
vladkras

@vladkrasそのヒントをありがとう、とても役に立ちました!
2016年

28

この問題を次のコードで解決しました:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName myhost.com
ServerAlias ww.myhost.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

私も使用しました:

a2enmod proxy_http

10

ルートドメインからJenkinsにアクセスできるように、これを正確に実行したかったのです。

これを機能させるには、デフォルトのサイトを無効にする必要があることがわかりました。これがまさに私がしたことです。

$ sudo vi /etc/apache2/sites-available/jenkins

そして、これをファイルに挿入します:

<VirtualHost *:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias mydomain
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
  <Proxy *>
        Order deny,allow
        Allow from all
  </Proxy>
</VirtualHost>

次に、適切なサイトを有効/無効にする必要があります:

$ sudo a2ensite jenkins
$ sudo a2dissite default
$ sudo service apache2 reload

それが誰かを助けることを願っています。


@Louthに貢献してくれてありがとう。私はこれをあきらめて久しく、もはやサーバーを持っていません。それでも機能しないので、迷惑です。もう一度テストするためだけに新しいサーバーを起動する場合があります。再度ありがとうございます。これをもう一度試す場合は、必ず更新します。
agentcurry 2013

Jenkins wikiは、Apacheの背後でJenkinsを実行する方法を説明しています。wiki.jenkins
ci.org

6

試行錯誤でこれを発見しました。構成にServerNameが指定されている場合、VirtualHostディレクティブも同じようにする必要があります。次の例では、awesome.example.comとamazing.example.comの両方が、ポート4567で実行されているローカルサービスに転送されます。

ServerName example.com:80

<VirtualHost example.com:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName awesome.example.com
  ServerAlias amazing.example.com
  ProxyPass / http://localhost:4567/
  ProxyPassReverse / http://localhost:4567/
</VirtualHost>

これで問題が完全に解決するわけではないことはわかっていますが、ここではApacheポートフォワーディングの上位の検索結果であるため、ここで説明します。だから私はそれがいつか誰かを助けると思います。


これは私のために働いた唯一のものです。の*:80代わりにexample.com:80を使用すると、ポートはリダイレクトされません。
Seb123 2016

4

サーバーでプロキシが有効になっていることを確認する必要があります。これを行うには、次のコマンドを使用します。

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart

3

これは古い質問かもしれませんが、これが私がしたことです:

Apacheによって読み込まれた.confファイルで:

<VirtualHost *:80>
  ServerName something.com
  ProxyPass / http://localhost:8080/
</VirtualHost>

説明:ローカルマシンのポート80へのすべての要求をリッスンします。http://something.com/somethingorotherhttp://localhost:8080/somethingorother」を要求した場合は、その要求を「」に転送します。ドキュメントによると、これはリモートリクエストをローカルサーバーのスペースにマッピングするため、外部のビジターに有効です。

私はApache 2.4.6-2ubuntu2.2を実行しているので、「-2ubuntu2.2」がこの回答のより広い適用範囲にどのように影響するかはわかりません。

これらの変更を行った後、必要なモジュールを追加してApacheを再起動します

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

2

JBossへのプロキシを使用する必要がなく、mydomain.com:8080を世界に「公開」できる場合、私はこれを行います。

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>

80以外のポートを使用すると見苦しいだけでなく、プロキシサーバーやISPで問題が発生する可能性があります。その場合は、代わりにApacheを削除してJBossをポート80で実行してください。
Martin Vilcans、2011

JBossの下ですべてを実行することはオプションです。私は、ApacheサイトをJBossに移動しないようにしようとしていましたが、過度に時間がかかることはありません。フィードバックをお寄せいただきありがとうございます。
agentcurry 2011


1

私のApacheは2つの異なるポートをリッスンし、

Listen 8080
Listen 80  

透過的なURLが必要なときに80を使用し、ローカルURLを許可しないGoogleサービスに役立つURLの後にポートを配置しませんか?

しかし、「開発環境」のリファレンスとしてポートを使用する内部開発には8080を使用します


0

Apacheは名前ベースおよびIPベースの仮想ホストをサポートしています。両方を使用しているようですが、おそらく必要ではありません。

名前ベースの仮想ホスティングを実際に設定しようとしていると思います。そのため、IPアドレスを指定する必要はありません。

IPベースの仮想ホスティングが本当に必要でない限り、すべてのIPアドレスにバインドするように<VirtualHost *:80>を試してください。これは、サーバーに複数のIPアドレスがあり、異なるアドレスの異なるサイトにサービスを提供したい場合に当てはまります。最も一般的な設定は、(おそらく)名前ベースの仮想ホストです。


それは理にかなっている、名前ベースは私が必要なすべてです。私はそれを変更しましたが、それでも他のポートへのルーティングではありません
agentcurry

0

あなたは2つのものが必要です:

  1. 構成にを追加ServerAlias www.mydomain.comします
  2. ProxyPassMatch ^(.*)$ http://localhost:8080/example$1可能であればmod_dirと末尾のスラッシュが干渉しないように、proxypassをに変更してください。

ServerAliasを追加しましたが、まだうまくいきません。
agentcurry 2011

0

これらはすべて、仮想サーバーのドメイン名を介してポートにアクセスするための優れた洞察です。ただし、仮想サーバーを有効にすることを忘れないでください。これはコメント化されているかもしれません:

NameVirtualHost *:80
<Directory "/home/dawba/www/">
 allow from all
</Directory>

ドメインsxxxx.comのApacheサーバーとポート6800で実行されているgolangサーバーでWSGIを実行します。一部のファイアウォールは、ポートのあるドメイン名をブロックしているようです。これが私たちのソリューションでした:

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName wsgi.sxxxx.com
 DocumentRoot "/home/dxxxx/www"
  <Directory "/home/dxxx/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
 ScriptAlias /py/ "/home/dxxxx/www/py/"
 WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi
</VirtualHost>

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName sxxxx.com 
 ServerAlias www.sxxxx.com
 ProxyPass / http://localhost:6800/
 ProxyPassReverse / http://localhost:6800/
</VirtualHost>

0

これはISPConfigでも機能します。ドメイン内のウェブサイトリストで、[オプション]タブをクリックし、次の行を追加します。

ProxyPass / http://localhost:8181/
ProxyPassReverse / http://localhost:8181/

次に、ウェブサイトにアクセスしてwolaa :)これはHTTPSプロトコルも機能しています。


0

これを試してください

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.adminbackend.example.com
  ServerAlias adminbackend.example.com
  ProxyPass / http://localhost:6000/
  ProxyPassReverse / http://localhost:6000/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost> 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.