#はじめに
Ruby on Railsのフロントウェブサーバとしてnginxを使用するときのSSLとロードバランサー(upstream)の設定について記述します。
ブラウザ --https--> nginx --http--> Ruby on Rails(unicorn,pumaなど)
#前提
OSはCentOS7を使用
SSL証明書はあらかじめ用意しておきます。
/etc/pki/tls/certs/server.crt
/etc/pki/tls/private/server.key
nginxのインストールはこちらを参考させていただきました。
#nginxのインストール
上記の参考のとおり、yumでインストールしました。
###yum.repos.dの設定
$ sudo vi /etc/yum.repos.d/nginx.repo
...
###インストール
$ sudo yum install nginx
...
インストールしたnginxのバージョンは
nginx.x86_64 1:1.15.10-1.el7_4.ngx
です。
###nginxの起動と自動起動設定
systemctlで自動起動設定と起動します。
$ sudo systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
$ sudo systemctl start nginx
$
#ここから本題
タイトルのとおり、SSLとロードバランサーの設定を行います。
$ sudo vi /etc/nginx/conf.d/ssl_lb.conf
---
upstream backend {
server localhost:3000; #バックエンドプロセスは同じサーバ内で起動している前提、ポート3000
}
server {
listen 443 ssl;
server_name sample.co.jp;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/private/server.key;
root /path/to/root; #コンテンツのルートパスを設定
location / {
try_files $uri @backend;
}
location @backend {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://backend;
}
}
upstream
upstreamに振り分ける対象のサービスを記載します。(ロードバランサー)
複数記述することでロードバランスされます。
また、unix socket接続の記載も可能です。
server
ssl_certificate、ssl_certificate_keyにSSL証明書のファイルを指定します。
upstreamで設定したbackendは"location @backend"に設定します。
nginxの再起動
nginxを再起動することで上記の設定が反映されます。
$ sudo systemctl restart nginx