web-dev-qa-db-ja.com

ローカルホストで実行されているバックエンドへのnginxリバースプロキシ

[〜#〜] edit [〜#〜]:以下の私の設定が実際に機能していることがわかります。以前は、ポート36000へのリダイレクトを取得していましたが、それはバックエンドアプリケーションの構成設定が原因でした。

私は完全にはわかりませんが、nginxを使用してリバースプロキシを設定したいと思うかもしれません。

サーバーでポート36000で実行されているアプリケーションがあります。デフォルトでは、ポート36000はパブリックにアクセスできません。nginxがパブリックURLをリッスンし、URLへのリクエストをすべてポート36000で実行されているアプリケーションに送信することを意図しています。プロセス全体で、ユーザーは自分のリクエストがサーバーのポート36000で実行されているアプリケーションに送信されていることを知らないはずです。

より具体的に言えば、私のURLが http://domain.somehost.com/ であると仮定します

http://domain.somehost.com/ にアクセスすると、nginxはリクエストを取得し、ポート36000のサーバーで既に実行されているアプリケーションにリダイレクトします。アプリケーションは何らかの処理を行い、返答。ポート36000は一般公開されておらず、URLの一部として表示されるべきではありません。

私は次のような設定を試しました:

server {
    listen 80;
    server_name domain.somehost.com
    location / {
        proxy_pass http://127.0.0.1:36000;
        proxy_set_header Host $Host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

それを私のメインのnginx.confに含める

ただし、ポート36000をパブリックにアクセス可能にする必要があるため、これを回避しようとしています。ポート36000も、Webブラウザーで転送されたURLの一部として表示されます。

同じことをする方法はありますか?ポート36000をアクセス可能にせずに?

ありがとうございました。

16
yanhan

編集:以下の設定は、動作中のnginx設定からのもので、ホスト名とポートが変更されています。

ポート36000でリッスンしているサーバーをupstreamサーバーとして設定できる必要がある場合があります( http://nginx.org/en/docs/http/ngx_http_upstream_module.html を参照) 。

server {
        listen   80;
        server_name domain.somehost.com;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $Host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://localhost:36000/;
                proxy_redirect http://localhost:36000/ https://$server_name/;
        }
}
20
Intermernet