2017-04-13 10 views
1

フロントエンドサービスとバックエンドサービスで構成されるWebアプリケーションがあります。私は、証明書を暗号化してフロントエンドサービスを確保したいが、フロントエンドとバックエンドの間に安全な接続を使用する必要がある。カスタムポートにバックエンドサービスを提供しています。バックエンドを保護するために、私はnginxを使って自分のサーバーをプロキシしたいと思っています。しかし、私はそれを正しくするのに苦労しています。nginxでバックエンドサーバーへのTCPトラフィックを保護

server { 
    listen 8082; 
    server_name <my_domain_name>; 

    ssl on; 
    ssl_certificate   /etc/letsencrypt/live/<my_domain>/fullchain.pem; 
    ssl_certificate_key  /etc/letsencrypt/live/<my_domain>/privkey.pem; 
    ssl_ciphers    HIGH:!aNULL:!MD5; 
    ssl_protocols    TLSv1 TLSv1.1 TLSv1.2 SSLv3; 
    location/{ 
     proxy_pass http://0.0.0.0:8081; 
    } 
} 

まず、私は、SSLなしで、それを介して取得したい:ここに私のnginxの構成です。しかし、それはこのようには動作しません.8082には何も提供されません。もしが動作すれば、私はここで私のletsencrypt証明書を使うことができると思っていました。

私は助けていただきありがとうございます!ありがとうございます!私はこの問題を考え出し

アップデートはiptablesの中でした。ポート8082を追加した後、それは機能しました。私が理解できないことは、なぜiptablesにはないが、ポート8081に接続できるのか。

しかし、今私はERR_SSL_PROTOCOL_ERRORを試してみると、https://my_domain:8082になります。

listen 8082 ssl;のようにlistenの指示にsslを追加しようとしました。それから私はERR_CONNECTION_RESETを得る。

+0

ポート80で実行しているサービスはありますか? –

+0

はい、あります、なぜですか? – wwwater

+0

nginxでサブドメインやサブディレクトリ(urisを意味する)からプロキシバックエンドにリダイレクトすることもできます。また、サービスがポート80で動作している場合は、リスンしているポートを変更してください。 –

答えて

1

ような何かをしようと、あなたの問題のために

location/{ 
    error_page 404 = @backend; 
} 

のような、すなわち変数のようにそれを参照することができますという名前の場所です。この問題は実際にはlistenという指令にありました。

listen 8082 ssl; 

を追加および

ssl on; 

を除去し、それを解決しました。

なぜそれがうまくいかなかったのか、私にはERR_CONNECTION_RESETを与えたのは謎です。今それは動作します。

0
location @backend { 
    proxy_pass http://backend; 
} 

@backendあなたは念のため

location/{ 
    proxy_pass http://backend; 
} 
+0

はい、これも試しました。それは何も変わらない。私はまだ 'ERR_CONNECTION_TIMED_OUT'を得ます – wwwater

+0

localhostのバックエンドは0.0.0.0ですか?そのポートは接続可能ですか?あなたはproxy_passを単にproxy_pass http://0.0.0.0:8081に単純化しようとしましたか? –

+0

はい、ローカルホスト上にあります。 http:// :8081で外部からリクエストできますが、http:// :8082へのリクエストは機能しません。私はproxy_pass 0.0.0.0:8081を書こうとしましたが効果はありません。 – wwwater

関連する問題