LoginSignup
18
17

More than 5 years have passed since last update.

nginxでSPDY対応プロキシを作る

Last updated at Posted at 2014-12-28

Goやnode.jsなどのプログラミング言語でAPIサーバーを作っても、それらをSPDYに対応するにはそれなりに追加コードが必要だったり、各種言語のライブラリに依存します。そこで、nginxを通してどんなHTTPサーバーもSPDY化してしまいます。

SPDYはnginx1.4以降で公式サポートしています。SPDYはHTTPSが必要になるので、SPDYを利用するには、SSL証明書が必要になります。

nginxのserver設定は、下記の通りです。SSL設定はmozillaなどでの推奨値と、パフォーマンス系の設定をあわせて書いています。

ssl_certificatessl_certificate_key は提供するドメインのものを設定します。

proxy_pass にAPIサーバーのローカルアドレスを設定します。

 server {
    # SSL configuration
    listen 443 ssl spdy;
    listen [::]:443 ssl spdy;

    ssl on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!CAMELLIA;
    ssl_prefer_server_ciphers on;
    resolver 8.8.8.8;
    ssl_stapling on;
    ssl_stapling_verify on;

    ssl_certificate YOUR_CERTIFICATE.pem;
    ssl_certificate_key YOUR_CERTIFICATE.key;

    add_header Alternate-Protocol 443:npn-spdy/3;
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

    location / {
      proxy_pass http://localhost:3000;
    }
}

SPDYでのアクセスがあるかは、log_formatに$spdyを追加することで、access_logファイルにSPDYのバージョンが出力されます。

  log_format main '$remote_addr - $remote_user [$time_local] '
          '"$request" $status $bytes_sent "$http_referer" '
          '"$http_user_agent" "$http_x_forwarded_for" '
          'spdy:$spdy';
  access_log /var/log/nginx/access.log main;

設定後、Chrome などSPDY対応のブラウザで https プロトコルでアクセスすると、SPDYでのアクセスが確認できると思います。

18
17
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
18
17