私はしばらくこれに苦労していて、間違いなく何か間違ったことをしています。
私は同じマシン上に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>
ProxyPassとProxyPassReverseではドメインhttp://example.com
を省略し、/
のままにしてください。さらに、/
の末尾のexample/
を、リダイレクト先の場所に残す必要があります。また、私はhttp://example.com
対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
私は次のコードでこの問題を解決しました:
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
ルートドメインから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
誰かに役立つことを願っています。
これを試行錯誤で見つけました。あなたの設定が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ポートフォワーディングのためのトップの検索結果であるのでここにそれを入れています。だから私はそれがいつか誰かに役立つだろうと思う。
サーバーでプロキシが有効になっていることを確認する必要があります。これを行うには、次のコマンドを使用します。
a2enmod proxy
a2enmod proxy_http
service Apache2 restart
これは古い質問かもしれませんが、これが私がしたことです:
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>
Apacheの設定にリバースプロキシを(直接)使用するだけです。
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
Apacheは名前ベースとIPベースの仮想ホストをサポートしています。両方を使用しているように見えますが、おそらく必要なものではありません。
私はあなたが実際に 名前ベースの仮想ホスティング を設定しようとしていると思います、そしてそのためにあなたはIPアドレスを指定する必要はありません。
本当に IPベースの仮想ホスティング が必要な場合を除き、<VirtualHost *:80>をすべてのIPアドレスにバインドするようにしてください。これは、サーバーに複数のIPアドレスがあり、異なるアドレスで異なるサイトにサービスを提供したい場合に当てはまります。最も一般的な設定は、名前ベースの仮想ホストです。
これはISPConfigでも機能しています。ウェブサイトのリストでドメイン内に入るには、[オプション]タブをクリックし、次の行を追加します。
ProxyPass / http://localhost:8181/
ProxyPassReverse / http://localhost:8181/
それからウェブサイトに行き、wolaa :)これもHTTPSプロトコルを動かしています。
必要なものは2つあります。
ServerAlias www.mydomain.com
を追加してくださいProxyPassMatch ^(.*)$ http://localhost:8080/example$1
に変更して、mod_dirと末尾のスラッシュが干渉しないようにします。いずれも仮想サーバー上のドメイン名を介してポートにアクセスするための優れた洞察です。ただし、仮想サーバーを有効にすることを忘れないでください。これはコメントアウトされるかもしれません:
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>
私のApacheは2つの異なるポートをリッスンします。
Listen 8080
Listen 80
私は透明なURLが欲しいときに私は80を使用し、ローカルのURLを許可しないGoogleサービスに便利なURLの後にポートを置かないのですか?
しかし私は私が "開発環境"のための参照としてポートを使用する内部開発のために8080を使用します