3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【FuelPHP】SSLリバースプロキシ下での設定。

Last updated at Posted at 2020-03-16

※この記事は、下記の経緯の中で作成しました。
docker-composeでNginx+php環境を構築。(そのときの記事はこちら)
HostOSのNginxでHTTPS->HTTPのリバースプロキシを行い、DockerのNginxではHTTPでうける。PHP環境にFuelphpをインストールし、早速welcomeページをブラウザ表示したところ・・・
コンソールに下記が表示。

Mixed Content: The page at 'https://xxxx.jp/' was loaded over HTTPS, but requested an insecure stylesheet 'http://xxxx.jp/assets/css/bootstrap.css?1561651380'. This request has been blocked; the content must be served over HTTPS.

HTTPSサイトなのに、HTTPでCSSををリクエストするのは(混在)NG、というわけ。
こちらの解決策について。

#HostOSのNginx(リバースプロキシ)の設定
こんな感じ。

/etc/nginx/conf.d/xxx.jp.conf
server {
    listen 80;
    server_name xxxx.jp;
    location / {
        rewrite ^(.*)$ https://$host$1 permanent;
    }
}
server {
    listen 443 ssl;
    server_name xxxx.jp;

    access_log   /var/log/nginx/xxxx.jp/access.log  main;
    error_log    /var/log/nginx/xxxx.jp/error.log warn;

    ssl_certificate ssl/xxxx.jp.crt;
    ssl_certificate_key ssl/xxxx.jp.key;

    location / {
        # docker's port
        proxy_pass http://localhost:8082;
        # https -> http
        proxy_redirect http:// https://;
        # inherit remote info
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

※Dockerのnginxは8082ポート(HTTP)で受けている。
※proxy_redirect のところでHTTPにプロキシ。
※X-Forwarded-Protoで、クライアントのプロトコル(HTTPS)をx-headerを使って転送先に伝えている。

#原因
welcomeページのCSSの読み込みは・・・

fuel\app\views\welcome\index.php-L6
<?php echo Asset::css('bootstrap.css'); ?>

fuelphpの中でプロトコルを判定している箇所は・・・・?

fuel\core\classes\input.php
	/**
	 * Return's the protocol that the request was made with
	 *
	 * @return  string
	 */
	public static function protocol()
	{
		if (static::server('HTTPS') == 'on' or
			static::server('HTTPS') == 1 or
			static::server('SERVER_PORT') == 443 or
			(\Config::get('security.allow_x_headers', false) and static::server('HTTP_X_FORWARDED_PROTO') == 'https') or
			(\Config::get('security.allow_x_headers', false) and static::server('HTTP_X_FORWARDED_PORT') == 443))
		{
			return 'https';
		}

		return 'http';
	}

static::server('HTTP_X_FORWARDED_PROTO')は先述のHostOSの設定でtrueできている。
問題は、\Config::get('security.allow_x_headers', false)がfalseになっていること。

・x-headerが許可されていない。
・configで設定できるっぽい

#解決策

下記のように直す。

fuel\app\config\config.php-L245
// 'allow_x_headers' => false,
fuel\app\config\config.php
'allow_x_headers' => true,
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?