2016-04-25 14 views
0

私は、独自のWebアプリケーションをホストしている別のサーバーを表すエンドポイント上の異なるポートにプロキシの1つのURL /パスをリバースすることを検討しています。静的ファイルのNginxリバースプロキシ404

私はproxy_passを使用していますが、リソースが相対的なインスタンスであるため、静的ファイルは失敗します。

私は、例えば持っている - SERVER_NAME = myproxy.com:述べたように

location /app1/{ 
    proxy_pass: http://192.168.1.1:8080/; 
    proxy_set_header Host 192.168.1.1; 
} 
location /app2/{ 
    proxy_pass: http://192.168.1.1:8081/; 
    proxy_set_header Host 192.168.1.2; 
} 
location /{ 
    proxy_pass: http://192.168.1.1:8080/; 
    proxy_set_header Host 192.168.1.1; 
} 

リバースプロキシは、APP2に関連した静的ファイルを除いて、素晴らしい作品。 App1の静的ファイルは正常に動作しますが、App2の静的ファイルの結果は404になります.Apple1のリソースファイルは/assets/app1.cssにあるため、意味があります。これは、場所が/のリダイレクトがApp1ではなくApp2のリソースファイル全く異なっている/assets/app2.css結果は404です。

したがって、/assets/app2.cssのApp2静的リクエストをそれぞれのプロキシロケーションに書き換える方法はありますか?以下のようなもの:location /app1/からのルールによって、ファイル/assets/app1.css(App1の)負荷が、その後location /からルールによって/assets/app1.cssとしてロード

location /app1/{ 
    proxy_pass: http://192.168.1.1:8080/; 
    proxy_set_header Host 192.168.1.1; 
} 
location /app2/{ 
    proxy_pass: http://192.168.1.1:8081/; 
    proxy_set_header Host 192.168.1.2; 

    *rewrite app2 static urls frome /assets/* to /app2/assets/* 
} 
location /{ 
    proxy_pass: http://192.168.1.1:8080/; 
    proxy_set_header Host 192.168.1.1; 
} 
+0

HTML本文のリンクを書き換えますか?はいの場合は、このhttp://nginx.org/en/docs/http/ngx_http_sub_module.htmlを試してください。しかし、バックエンドがファイルをgzipしていないことを確認してください。 –

答えて

2

。 App2は同じ動作をしますが、location /はApp1用であり、App2用ではありませんでした。

あなたのconfigがでなければなりません:

location /app1/ { 
    proxy_pass: http://192.168.1.1:8080/app1/;   
} 

location /app2/ { 
    proxy_pass: http://192.168.1.1:8081/app1/;  
} 

必要:APP1があるべきエイリアスはプロキシとupsteamサーバー上で同じです。 upsteamサーバーでは、元のwebrootアプリケーションとシンボリックリンクしている可能性があります。

それとも、別のサブドメインまたはポートを使用することができます....

server_name app1.localhost; 
location/{ 
    proxy_pass: http://192.168.1.1:8081/;  
} 

P.S.

私は、プロキシによってnginx設定で多くの操作を調べました。例えば

location /app1/ { 
    proxy_pass: http://192.168.1.1:8080/;   
} 

:nginxのは、一つのルールで正常に動作しません - proxy_server/css ... - CSSやJSファイルがなる負荷proxy_server/js ...

要求proxy_server/app1/index.htmlから、あなたが取得する404

configにlocation /css/ルールを追加できます。しかし、あなたのapp2もこの場所を使うことができます。そして、彼が上流のサーバーをプロキシに検出することはできません。 refferを使用して上向きを検出することができます

server { 
    listen   80; 

    if ($uri ~ app1/) { 
     break; 
    } 

    if ($http_referer ~ app1/) { 
     rewrite (.*) /app1/$1 redirect; 
    } 

    location /app1/ { 
     proxy_pass http://192.168.1.1:8080/; 
    } 
} 

しかし、POSTデータはリダイレクト後に破棄されます。

ロケーションごとにプロキシサーバーにのみ設定を調整する必要がある場合は、素晴らしいことでしょう。しかし、それは夢です。

+1

応答に感謝します。私はNginxに複数のポートを開くより簡単なルートに行きました。その後、各サービスに対して別々のnginx設定を作成しました。 app1にアクセスするとserver_url:8081になり、app2にアクセスするとserver_url:8080となり、これらの404エラーのいずれかを処理する必要はありません。 これは内部のみのプラットフォームをサポートしているので、私にとってはうまくいきます。それは何か公共の場面には理想的ではないでしょう。 – user3263752

0

docker container linksを使用して以前のドキュメントのようにコンテナを接続していたときにもこの問題が発生しました。 Docker container networking

URLコンテキストが正しく404エラー

docker run --name nginx-ss-00.starbug.com --link aai-gunicorn-00:aai-gunicorn-00 -d -p 80:80 -p 443:443 nginx-ss.starbug.com 

を与える取得に失敗したが、私はついにthis tutorial on connecting multiple web sitesを見つけを使用するためのものです。

docker network create nginx-proxy 

docker run --net nginx-proxy --name nginx-ss-00.starbug.com -v /var/run/docker.sock:/tmp/docker.sock -d -p 80:80 -p 443:443 nginx-ss.starbug.com 

docker run --net nginx-proxy --name aai-gunicorn-00 -d -p 8080:8080 aai-gunicorn 

と私のnginxのconfに

server { 

    server_name www.starbug.com; 
    listen  80; 

    # reverse proxy 
    location/{ 

     # TODO Assumes flask container is named aai-gunicorn-00 and running on port 8080 
     proxy_pass http://aai-gunicorn-00:8080; 

     # Redefine the header fields that NGINX sends to the upstream server 
     proxy_set_header Host $host; 
     proxy_set_header X-Forwarded-Proto $scheme; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

     client_max_body_size 5M; 

    } 

} 

にこれは完全な例で私のGitのレポへのリンクを持っている私のウェブサイトwww.starbug.comを実行している:これは私のために働いたものです。