2017-03-13 7 views
2

リバースプロキシツールとしてnginxを設定しました。私は対処できなかった問題を見つけました。以下は、.confファイルで設定したルールです。特定のhttpsリンクのみをリダイレクトするNginxルール

server { 
     listen  80; 
     server_name rp.mydomain.com; 
     return 301 https://$host/myapp1/; 
     location/{ 
     proxy_pass <local ip address>; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Host $host; 
     proxy_set_header X-Forwarded-Server $host; 
     proxy_set_header X-Forwarded-Proto https; 
     proxy_redirect http://$host https://$host; 
     proxy_set_header Host $host; 
     } 
} 
    server { 
     listen  443 ssl; 
     server_name rp.mydomain.com; 
     location/{ 
     proxy_pass <local ip address>; 
     proxy_redirect http:// https://; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Host $host; 
     proxy_set_header X-Forwarded-Server $host; 
     proxy_set_header X-Forwarded-Proto https; 
     proxy_set_header Host $host; 
     proxy_ssl_session_reuse on; 
} 
    } 

私のアプリケーションは/ myapp1 /にあります。私が/ myapp1 /をproxy_pass [私が試した]に書いていないのは、ページにログインしようとすると、リダイレクトが正しく動作しないためです。エラーページが見つかりません。

しかし、このルールの後に80ブロックを聞くと、301 https://$host/myapp1/;が返ってきますが、それは魅力的ですが、httpページを開いた場合に限ります。

リンクを開くと、rp.mydomain.comと表示されます。リダイレクトは完全に機能しており、アプリケーションも正常に動作します。 httpリクエストはhttpsにリダイレクトされ、私のアプリからログインできます。

https://rp.mydomain.comを通過すると、のルールがlisten 443になっているため、空白のページが<local ip address>になります。

私の要件は、ページの特定の要求は、https://rp.mydomain.comであり、生成されたときであり、そのhttps://rp.mydomain.com/myapp1/又はhttps://rp.mydomain.com/myapp1/profile [など他の要求、(ユーザがhttp://rp.mydomain.com介してページにアクセスしたとき、それがない場合のように)https://rp.mydomain.com/myapp1/にリダイレクトその他]は影響を受けません。

1つの特定のページhttps://rp.mydomain.comが自動的にリダイレクトされます。

これは可能ですか?この問題で私を助けてください。

ありがとうございます。

答えて

1

試してみてください。

server { 
    listen  80; 
    server_name rp.mydomain.com; 
    return 301 https://$host$request_uri; 
} 
server { 
    listen  443 ssl; 
    server_name rp.mydomain.com; 

    location =/{ 
     rewrite^/myapp1/ last; 
    } 

    location/{ 
     proxy_pass <local ip address>; 
     proxy_redirect http:// https://; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Host $host; 
     proxy_set_header X-Forwarded-Server $host; 
     proxy_set_header X-Forwarded-Proto https; 
     proxy_set_header Host $host; 
     proxy_ssl_session_reuse on; 
    } 
} 

location = /ブロックは、/から/myapp1/へのマッピングを作成するために追加されました。ブラウザでURLを変更するには、lastの代わりにpermanentを使用します。詳細は、this documentを参照してください。

アプリケーションがリダイレクトを実行したときにローカルIPアドレスが漏れないように、proxy_redirect文を追加する必要があります。詳細は、this documentを参照してください。

SSL証明書が外部ブロックで定義され、継承されているものとします。

+1

ありがとうございます。 "location = /"ブロックは完全に機能しました。 – Shahzaib

関連する問題