Nginxで簡単 Lets Encrypto !!な手順

# CentOs7 の場合 firewall設定でhttpsを開ける

現状の確認は、以下のコマンド。

```
$ firewall-cmd --list-services --zone=public --permanent
```

https追加方法は以下のコマンド。
```
$ firewall-cmd --add-service=https --permanent
$ firewall-cmd --reload
```

# まず http でアクセスできるようnginxの設定をする

```
server {
    listen       80;
    server_name  {domain};
    root         /var/www/html/{application};

    location / {
    }

    location ~* \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www/html/{application}$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_read_timeout 180;
    }

    error_page 404 /404.html;
        location = /40x.html {
     }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}
```

#### 必要であれば、nginxの設定ファイルのシンボリックリンクを張る

もし、１つのサーバーで複数サイトを運用している場合は作成した conf のシンボリックリンクをはります。

```
ln -s /etc/nginx/conf.d/sites-available/{service_name}.conf /etc/nginx/conf.d/sites-enable/
```

# nginxをリスタートしてアクセス可能かチェック

```
$ service nginx restart
```

# let's encrypt

## `certbot`をインストール

```
$ cd ~
$ git clone https://github.com/certbot/certbot
$ cd certbot
```

## 証明書を発行

```
$ ./certbot-auto certonly
```

以下のように聞かれるんで、`4`を選択。

```
How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Apache Web Server plugin - Beta (apache)
2: Nginx Web Server plugin - Alpha (nginx)
3: Spin up a temporary webserver (standalone)
4: Place files in webroot directory (webroot)
-------------------------------------------------------------------------------
Select the appropriate number [1-4] then [enter] (press 'c' to cancel): 
```

次の質問はドメインについて。
対応させたいドメインを入力。

```
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel):
```

入力したらドメインのドキュメントルートを聞かれるので、入力する。

```
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for {ドメイン}
Input the webroot for {ドメイン}:
```

これで

`/etc/letsencrypt/live/{ドメイン}/fullchain.pem`
`/etc/letsencrypt/live/{ドメイン}/privkey.pem`

がつくられる。

# httpsでアクセスできるよに nginx 設定を更新

```
server {
    listen       80;
    server_name  {domain};
    return 301 https://$host$request_uri;
}

server {
    listen       443;
    server_name  {domain};
    root         /var/www/html/{application};
    access_log   /var/log/nginx/{application}.access.log  main;

    ssl_certificate      /etc/letsencrypt/live/{domain}/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/{domain}/privkey.pem;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
        expires 15d;
        log_not_found off;
    }

    location / {
    }

    location ~* \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www/html/{application}$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_read_timeout 180;
    }

    error_page 404 /404.html;
        location = /40x.html {
     }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}
```

# nginxをリスタートする

```
$ service nginx restart
```