Nginx Rails unicorn HTTPS SSL 対応

 # nginx rails unicorn HTTPS SSL対応

## Overview

今更ではあるが、私のgit hubで開発しているレンタルサーバーが未だhttpである、、、、
HTTPS SSL対応していない、

ので、
対応させてみることにしてみた。

### オレオレ証明書

テスト用のサーバーなので、無料の証明書を使う、

公式サイトになります。
https://letsencrypt.org/

下記が参考になります。
https://knowledge.sakura.ad.jp/5573/

これで試してみます。

git hubからソースコードを取得します。

```bash
$ cd /usr/local/
$ sudo git clone https://github.com/certbot/certbot
$ cd certbot/
```

git から取得してきたディレクトリーの中へ移動します。

### 証明書を発行します。

*** SSLの対応の際にはドメインを取得してください。 ***

今回は例としてドメイン名をhttpsession.workで設定するとして以下のコマンドを実行します。
以下オプションはご自身の設定する内容に書き換えてください。

-wにはドキュメントルートのパス
-mには登録するメールアドレス
-dには認証するドメイン名

```bash

 ./certbot-auto certonly --webroot --agree-tos -w /usr/share/nginx/html -m jam330157@gmail.com -d httpsession.work   
```

上記実行で下記ログを出力します。

```
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for httpsession.work
Using the webroot path /usr/share/nginx/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/httpsession.work/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/httpsession.work/privkey.pem
   Your cert will expire on 2019-01-11. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
```

### 証明書が作成されたか確認する

```bash
sudo ls -lrth /etc/letsencrypt/live/httpsession.work
total 4.0K
lrwxrwxrwx 1 root root  43 Oct 13 20:10 privkey.pem -> ../../archive/httpsession.work/privkey1.pem
lrwxrwxrwx 1 root root  45 Oct 13 20:10 fullchain.pem -> ../../archive/httpsession.work/fullchain1.pem
lrwxrwxrwx 1 root root  41 Oct 13 20:10 chain.pem -> ../../archive/httpsession.work/chain1.pem
lrwxrwxrwx 1 root root  40 Oct 13 20:10 cert.pem -> ../../archive/httpsession.work/cert1.pem
-rw-r--r-- 1 root root 682 Oct 13 20:10 README
```

上記のようになっていれば作成完了です。

### ドメインについて

証明書を作成する際に、指定したドメインがサクラなどの場合、ドメインが振られておりますが、そのドメインでは作成できません、

なので、新規でドメインを作成さしてください。

ちなみに .workが安いです。

下記お名前.comのページになります。

https://cart.onamae.com/register/search/domain


### nginx conf 編集

/etc/nginx/conf.d/rails.conf

```conf

upstream unicorn_server {
    # This is the socket we configured in unicorn.rb
    server unix:/tmp/unicorn.sock
    fail_timeout=0;
}

server {
        listen 80;
        server_name httpsession.work;
        return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    client_max_body_size 4G;
    server_name httpsession.work;

    keepalive_timeout 5;
    ssl_certificate /etc/letsencrypt/live/httpsession.work/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/httpsession.work/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # Location of our static files
    root /usr/share/nginx/html;

    location / {
        #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header Host $http_host;
        #proxy_redirect off;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;

        # If you don't find the filename in the static files
        # Then request it from the unicorn server
        if (!-f $request_filename) {
            proxy_pass http://unicorn_server;
            break;
        }
    }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /usr/share/nginx/html;
    }
}
```

### nginx 再起動

```bash
$ sudo nginx -t

nginx: the configuration file /etc/nginx/rails.conf syntax is ok
nginx: configuration file /etc/nginx/rails.conf test is successful

$ sudo service nginx restart
```


### Rails　unicornの設定編集

config/environments/development.rb

下記を追加してください、コメントアウトされてれば、コメントを解除してください。

```ruby
config.force_ssl = true
```

### unicorn 再起動

```bash
$ kill -QUIT `cat /tmp/unicorn.pid` 
$ bundle exec unicorn_rails -c config/unicorn.rb -E development -D
```

(☝︎ ՞ਊ ՞)☝︎　完了！


参考にした記事

SSL周り

https://knowledge.sakura.ad.jp/5573/


nginx 関連

https://410gone.click/blog/2018/02/22/nginx-%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/