web-dev-qa-db-ja.com

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

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

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

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

<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> 

PDATED w/Suggestions - それでもポート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> 
132
agentcurry

ProxyPassとProxyPassReverseではドメインhttp://example.comを省略し、/のままにしてください。さらに、/の末尾のexample/を、リダイレクト先の場所に残す必要があります。また、私はhttp://example.comhttp://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
194
2AMTech

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

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
26
Renan Vizza

ルートドメインから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

誰かに役立つことを願っています。

8
Louth

これを試行錯誤で見つけました。あなたの設定が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ポートフォワーディングのためのトップの検索結果であるのでここにそれを入れています。だから私はそれがいつか誰かに役立つだろうと思う。

5
Ethan B Martin

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

  a2enmod proxy
  a2enmod proxy_http

  service Apache2 restart
4
Aswin Mohanan

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

Apacheによってロードされた.confファイルでは、次のようになります。

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

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

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

これらの変更を加えたら、必要なモジュールを追加してApacheを再起動してください。

Sudo a2enmod proxy && Sudo a2enmod proxy_http && Sudo service Apache2 restart

あなたがJBossへのプロキシを使用する必要がなく、mydomain.com:8080が世界に "公開"される可能性があるなら、私はこれをするでしょう。

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

Apacheの設定にリバースプロキシを(直接)使用するだけです。

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

modの使い方のApacheのドキュメントはこちらをご覧ください

1
Julian Dehne

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

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

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

0
Martin Vilcans

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

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

それからウェブサイトに行き、wolaa :)これもHTTPSプロトコルを動かしています。

0
kodmanyagha

必要なものは2つあります。

  1. あなたの設定にServerAlias www.mydomain.comを追加してください
  2. プロキシパスをProxyPassMatch ^(.*)$ http://localhost:8080/example$1に変更して、mod_dirと末尾のスラッシュが干渉しないようにします。
0
Jon Lin

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

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
user2099484

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

Listen 8080
Listen 80  

私は透明なURLが欲しいときに私は80を使用し、ローカルのURLを許可しないGoogleサービスに便利なURLの後にポートを置かないのですか?

しかし私は私が "開発環境"のための参照としてポートを使用する内部開発のために8080を使用します

0
Miguel