LoginSignup
15
6

More than 5 years have passed since last update.

ELB + nginx + php-fpm でHTTPS対応した

Last updated at Posted at 2016-12-12

はじめに

初老丸カレンダー 12/12分です。 UTCではまだ12日。

httpsにはhttps、httpにはhttpを返すというWebサイトを作りたいという要望がありました。
ELBが前段にあり、SSLターミネーションする環境のため、nginxにはhttpとしてリクエストが届きます。
railsなど、nginxをリバースプロキシとして動作させる場合の設定は検索によくでてきますが、php-fpmのようなfastcgi系の場合の設定がみつからなかったので試してみました。

設定

最初から答えになります。

https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
の設定をhttps化した例です


#X-FORWARDED-PROTOを使ってHTTPS判定する変数を作成
set $elb_https off;
if ($http_x_forwarded_proto = https) {
    set $elb_https on;
}

location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }

    # Mitigate https://httpoxy.org/ vulnerabilities
    fastcgi_param HTTP_PROXY "";

    # HTTPSパラメータにX-FORWARDED-PROTOを判定した結果を設定
    fastcgi_param HTTPS $elb_https; 

    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
}

組み込み変数 $http_x_forwarded_proto でロードバランサーでのSSL Terminationの有の場合にのみ、fastcgiのパラメータHTTPSをonにするという設定になっています。ELB用とかきましたが、他でもつかえるかとおもいます。

全部httpsとして返したいということであれば、 リダイレクト設定をいれる等の対応になるのですが、httpもつかうということでこの設定になっています。

いろいろ試していたのですが、fastcgi_paramをif文で括るとエラーになりました。また、直接$httpsを変更しようとしてもエラーとなりました。そういうものなのでしょうか。

おかしな点あれば是非ご指摘ください。

余談

FPMってFastCGI Process Managerの略だったんですね...

15
6
1

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
15
6