###前提・実現したいこと
nginxを利用したリバースプロキシ経由で、HTTPSとHTTPが混合したサイトを実現しようとしています。
リクエストがHTTPSの場合、
- クライアント→リバースプロキシ(nginx):https
- リバースプロキシ→バックエンド(Apache):http
で接続させようとしています。
###発生している問題・エラーメッセージ
PHP側では、フレームワーク(CodeIgniter)のコア部分で各種URLを動的に生成しており、$_SERVER['HTTPS']がonならば「https://~」に、空またはoffの場合は「http://~」が吐かれます。
リバースプロキシを使用すると、HTTPSでアクセスした場合にも「http://~」が吐かれてしまいます。
ユーザーの遷移先がHTTPに変わってしまうだけでなく、formのaction先がHTTPSでないため、Mixed Contentで安全でないページとブラウザに評価されてしまいます。
原因は、環境変数「HTTPS」が空になっていることのようです。
リバースプロキシ経由でもこの環境変数をonに設定できれば解決できるのでは・・・と思って試行錯誤しましたが、うまくいきません。
###該当のソースコード
リバースプロキシ側
nginx.confのSSL部分の設定
conf
1 server { 2 listen 443; 3 server_name subdomain.hogehoge.com; 4 5 ssl on; 6 ssl_certificate 証明書のパス; 7 ssl_certificate_key 秘密鍵のパス; 8 9 location / { 10 proxy_pass http://バックエンドのプライベートIP; 11 proxy_set_header Host $host; 12 proxy_set_header X-Real-IP $remote_addr; 13 proxy_set_header X-Forwarded-Proto https; 14 proxy_set_header X-Forwarded-Ssl on; 15 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 16 proxy_redirect http:// https://; 17 } 18 }
バックエンド側
httpd.confのバーチャルホスト設定
conf
1<VirtualHost *:80> 2 ServerAdmin admin@hogehoge.com 3 DocumentRoot 公開ディレクトリのパス 4 ServerName subdomain.hogehoge.com 5 6 <Directory "公開ディレクトリのパス"> 7 Options FollowSymLinks 8 AllowOverride All 9 Order allow,deny 10 Allow from all 11 </Directory> 12</VirtualHost>
PHP
CodeIgniter Config.php
php
1$base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
###試したこと
上記の通り、nginx.conf内に、「proxy_set_header」でSSLに関連しそうな設定は一通り行いました。
また、PHPのURL生成で「https://~」を生成する条件に`$_SERVER['HTTP_X_FORWARDED_SSL' == on`を加えてみたところ、期待した動作は実現しました。が、フレームワークのコア部分なのでできれば手を加えずに実現したいです。
###補足情報(言語/FW/ツール等のバージョンなど)
PHPのフレームワークはCodeIgniterです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/30 04:55 編集