リバースプロキシ-サブディレクトリの削除


27

近い将来、3台のnginxサーバーを使用する予定です。1つは、他の2つのSSL用のリバースプロキシです。したがって、たとえば、私はに行きます:

https://www.mysitename.com/site1

この例の他の2つのサーバーは、site1とsite2です。SSL証明書をプロキシにインストールし、リバースプロキシを使用したい(3つすべてが内部ネットワーク上にあるため、SSLは不要です) site1のrailsアプリであるポート8081、site2の8082です。

私はこれを持っています...

server {
    listen                  443;
    server_name             mysitename.com;

    ssl                     on;
    ssl_certificate         ssl/mysitename.com.crt;
    ssl_certificate_key     ssl/mysitename.com.key;
    keepalive_timeout       60;

    location /site1 {
        proxy_pass http://localhost:8081;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect http:// https://;
    }

    location /site2 {
        proxy_pass http://localhost:8082;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect http:// https://;
    }
}

したがって、www.mysitename.com / site1にアクセスすると、通常はlocalhost:8081(または後で別のサーバーの内部IP)から来るものを基本的に返すようにします。

localhost呼び出しから「site1」を削除する方法はありますか?やっているように見えることは、localhost:8081 / site1を使用していることです。site1およびsite2サイトは、「/ login / index」または「/ whatever / list」などの性質を持ち、「site1」はありません。

また、サイトコントローラーには(redirect_toを使用して)/ login / indexから/ whatever / listへのリダイレクトがあります。

site1を使用するには、サイトのURLを再設計する必要がありますか?または、NGINXプロキシはそれを把握できますか?

ありがとう。


Socket.ioの場合、rewrite /(.*)/socket.io/ breakを追加してください。 serverfault.com/questions/444532/...
user956584

回答:


53

http://nginx.org/r/proxy_passを引用:

proxy_passがURIで指定されている場合、サーバーに要求を渡すときに、場所に一致する正規化された要求URIの一部がディレクティブで指定されたURIに置き換えられます。

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

つまり、次のように使用する必要がありますproxy_pass

location /site1/ {
    proxy_pass http://localhost:8081/;
    ...
}

ディレクティブの末尾/に注意してくださいproxy_pass-これは、場所に一致する元のURIの一部、つまりを置き換え /site1/ます。


2
問題を解決するための最後のスラッシュだけでした!?ありがとう。次に、redirect_toをどのように処理するかを理解しますが、それはサーバーの質問ではないため、他の場所で解決します。
Chromag

注、proxy_pass URLにも末尾のスラッシュが必要です!
ダニエルヒル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.