私のタイトルは最高ではありません、ウェブスタッフの私の知識は非常に基本的です、ごめんなさい。
私は1つのボックスを持っていますfanbox Archlinuxでnginxを実行しており、リバースプロキシ機能を介してインターネットからホームLANへのメインエントリポイントとして使用しています(つまり、ポート80と443にしかアクセスできない作業)。変更するドメイン名を使用しますが、これを制御することはできず、今のところhome.netと呼びます。
fanboxポート80と443がhome.netにマップされているので、その部分は簡単でした。
ファイアウォールの背後に2つのWebサーバーがありますweb1.lan、web2.lan、web2ilo.lan。これらは両方とも、標準のURLを介してLAN上で直接アクセスできるさまざまなアプリケーション(異なるマシンで同じ名前を持つ場合があります)を備えています(名前は例として示されています。コンテンツを制御することはできません)。
http://web1.lan/phpAdmin/
http://web1.lan/gallery/
http://web2.lan/phpAdmin/
http://web2.lan/dlna/
...等々...
さてweb2ilo.lanは特別なケースです。これは、HPサーバーの帯域外管理Webインターフェイスですweb2.lan。その特定のWebサーバーは1つのアプリケーションしか提供しないため、ルートURLを介してのみアクセスできます。
http://web2ilo/login.html
私の目標は、次のようにhome.netのサブパスを介してこれらにアクセスすることです。
http://home.net/web1/phpAdmin/
http://home.net/web1/gallery/
http://home.net/web2/phpAdmin/
http://home.net/web2/dlna/
http://home.net/web2ilo/login.html
これはほぼ機能しますが、WebアプリケーションはURLを書き換える傾向があるため、ログイン後にそれぞれ次のようになります。
http://home.net/web1/phpAdmin/login.php
http://home.net/web2ilo/login.html
ブラウザはそれぞれにリダイレクトされます
http://home.net/phpAdmin/index.php
http://home.net/index.html
相対サブパスweb1およびweb2iloがなくなっていることに注意してください。これにより、論理的に404が得られます。
これまで、私は多くのことを検索し、何をしているかをあまり理解せずにnginxで多くのオプションを試しました。これがこの問題を再現する私の設定です。わかりやすくするためにSSLは省略しました。
server {
listen 443 ssl;
server_name localhost;
# SSL stuff left out for clarity
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /web1/ {
proxy_set_header Host $Host;
proxy_redirect off;
proxy_pass https://web1.lan/;
}
location /web2/ {
proxy_set_header Host $Host;
proxy_redirect off;
proxy_pass https://web2.lan/;
}
location /web2ilo/ {
proxy_set_header Host $Host;
proxy_redirect off;
proxy_pass https://web2ilo.lan/;
}
}
最初の数回の回答(ありがとう!)の後、私のセットアップは一般的ではなく、一人でトラブルに向かっている可能性があることに気付きました。
それでは、フロントエンドのポートやドメイン/ホスト名に触れることなく、ファイアウォールの背後にあるWebサーバーにアクセスするためのより良いアイデアは何でしょうか。
設定proxy_redirect
を使用して、「バックエンド」サーバー応答ヘッダー(場所と更新)を適切なフロントエンドURLに変更する必要があることをnginxに通知することを検討してください。 default
設定を使用してnginxがlocation
およびproxy_pass
ディレクティブから適切な値を計算できるようにするか、以下のようにマッピングを明示的に指定できます。
proxy_redirect http://web1.lan/ /web1/
参照: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
注:これは応答ヘッダーにのみ影響します。HTMLコンテンツ内のリンクやJavascriptには影響しません。
コンテンツまたはJavascriptのリンクで問題が発生した場合は、バックエンドサーバー上のコンテンツを変更するか(指定した場合は不可能な場合があります)、フロントエンドパスがバックエンドと同じになるようにプロキシソリューションを調整できます。 1つ(たとえば、http://frontend/web1/phpAdmin
ではなく、単にhttp://frontend/phpAdmin
があります)。これには、アプリケーションごとにlocation
ディレクティブを追加する必要があります。
location /phpAdmin/ {
proxy_set_header Host $Host;
proxy_redirect off;
proxy_pass https://web1.lan/phpAdmin/;
}