初めて質問させていただきます。
apache、リバースプロキシ、SSL、nginxの
記述方法について不明点がありご質問させていただきます。
■サーバー構成
下記のような構成でサイトを運営していて
SSL化込みのリバースプロキシの設定を行ったのですがうまくいかず途方にくれております。
①https://example.com/
②http://example.com/aaa/
①・・・apache2.2、CentOS6.7
②・・・nginx1.9、CentOS7
②はWordPressを使用しており、負荷分散のため今後は
リバースプロキシでaaaディレクトリを別サーバーで運営をしたいと思っております。
サーバーはKUSANAGI(https://kusanagi.tokyo/)を使用しています。
こちらの設定は殆どデフォルトのまま使用しています。
同時に②はSSL化したいと思っており、下記のように設定しました。
WordPress側のwp_optionsのsiteurlおよびhomeはhttpsに書き換えました。
(https://example.com/aaa/ に設定しています。)
■質問点
(1)ここで、http://example.com/aaa/ と http://②用のIP/でアクセスが来た場合、
https://example.com/aaa/ に常時リダイレクトさせたいと思っているのですが書き方がわかりません。
そのためhttps://example.com/aaa/ とhttp://example.com/aaa/ が両方混在している状態になっております。
(2)②のサーバーのSSL化について
②のサーバーにおSSLの設定は必要なのでしょうか。①のサーバーで設定しているため、不要だと勝手に思っております。
上記2点の質問についてご質問させていただきます。
長文乱文で大変申し訳ございませんが、ご教示いただけましたら幸甚で御座います。
お手数をおかけしますが、よろしくお願い致します。
■以下WEBサーバーの設定
①httpd.conf
Listen 80
~省略~
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/example.com
ServerName example.com
</VirtualHost>
<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from All
</Proxy>
ProxyPass /aaa/ http://②用のIP/aaa/
ProxyPassReverse /aaa/ http://②用のIP/aaa/
</IFModule>
①ssl.conf
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
DocumentRoot "/var/www/example.com/"
ServerName example.com:443
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /usr/local/ssl/certs/○○○
SSLCertificateKeyFile /usr/local/ssl/private/○○○
SSLCACertificateFile /usr/local/ssl/certs/○○○
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from All
</Proxy> SSLEngine on
SSLProxyEngine on
ProxyPass /aaa/ https://②用のIP/aaa/
ProxyPassReverse /aaa/ https://②用のIP/aaa/
</IFModule>
②httpd.conf
server {
listen 80;
server_name ②のIP;
省略
②ssl.conf
server {
listen 443;
server_name ②のIP;
省略
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
ぱっと見ですが、
ProxyPass /aaa/ https://②用のIP/aaa/
上記で、参照するURLはhttpsで接続しています。
であれば、以下
(2)②のサーバーのSSL化について
②のサーバーにおSSLの設定は必要なのでしょうか。①のサーバーで設定しているため、不要だと勝手に思っております。
②のサーバにはhttpsでのリクエストが飛ぶので、SSLの設定が必要なのでは?と思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.96%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/31 12:24
①ssl.conf
ProxyPass /aaa/ https://②用のIP/aaa/
ProxyPassReverse /aaa/ https://②用のIP/aaa/
こちらの部分ですが、httpsにしておりますが、httpにしなければいけないのでは・・・?と思っております。
併せて
①httpd.conf
の/aaa/ディレクトリを参照した場合の処理をリバースプロキシではなく、
リダイレクト処理で一度 http://②用のIP/aaa/ → https://example.com/aaa/
に飛ばしてから、再度 ①ssl.conf でhttp://②用のIP/aaa/ にすれば、
常時SSL化が出来そうだと思っておりますが、動かなくなりそうで不安です。
要約
http://example.com/aaa/ でアクセスがあった
↓
①http.confを見る
↓
https://example.com/aaa/ へリダイレクト
↓
①ssl.confを見る
↓
/aaa/ を http://②用のIO/aaa/ へリバースプロキシ
↓
②http.confを見る
↓
サイト表示
このため、②側にはSSLの設定はいらないのではないかと思っております。
引き続きご教示いただけましたら幸いです。
よろしくお願いいたします。
2016/05/31 13:05
> ②のサーバーにおSSLの設定は必要なのでしょうか。①のサーバーで設定しているため、
> 不要だと勝手に思っております。
上記の質問は設定の問題ではなく運用(ここではセキュリティが該当するかと存じますが)ポリシー上必要か?ということを聞かれているのでしょうか?
運用ポリシーは、サイト毎に適切な設計をされるべきものなので一概には言えませんが、少しでも平文が流れるのを嫌うのであればSSL化となります。
ただし、それなりのオーバーヘッドも生じますので、今回の「http://②用のIP/aaa/」に接続が合った場合に「https://example.com/aaa/」にリダイレクトするのであれば必要ないようにも感じます。
Web実体がhttpでのリクエストを受け付けるのであれば、以下認識で問題ないと思います。
> ProxyPass /aaa/ https://②用のIP/aaa/
> ProxyPassReverse /aaa/ https://②用のIP/aaa/
> こちらの部分ですが、httpsにしておりますが、httpにしなければいけないので
> は・・・?と思っております。
ただし、リバースプロキシ - Web実体間は平文でやり取りされるので、運用ポリシーと相談なさってください。
で、一つ気になったのは、サーバ②でリダイレクトを行って、サーバ①でリバースプロキシでhttpで接続するとループが起きるような気がします。
> 常時SSL化が出来そうだと思っておりますが、動かなくなりそうで不安です。
いきなり本番に実装するつもりであれば、検証環境で試されてからの方が良いでしょう。
2016/05/31 14:33
>上記の質問は設定の問題ではなく運用(ここではセキュリティが該当するかと存じますが)ポリシー上必要か?ということを聞かれているのでしょうか?
・こちらhttps://example.com/ および https://example.com/aaa/ を実現する上での設定面でのご質問でした。
>リバースプロキシ - Web実体間は平文でやり取りされる
・つまり、①がSSL対応でもリバースプロキシ先がSSL非対応の場合、平分やり取りになってしまうのですね。勉強になります。
>で、一つ気になったのは、サーバ②でリダイレクトを行って、サーバ①でリバースプロキシでhttpで接続するとループが起きるような気がします。
おっしゃるとおり、ループしてしまいますね。。。
>いきなり本番に実装するつもりであれば、
検証環境できちんと再度試行錯誤することにいたしました。
今回のベストアンサーにさせていただきます。
ありがとうございました。