yoshuki43's blog

K-NOMPをnginxを使ってHTTPSで公開する

nginxでK-NOMPにアクセスできるようにする

前提

  • K-NOMPは8080ポートでインストールされている
  • http(s)://your.domain.com/ で公開する
  • Debian 8で確認しています

準備

1
2
sudo apt-get update
sudo apt-get install -y nginx git

とりあえずHTTP用の設定を用意します

sudo vi /etc/nginx/sites-available/your.domain.com.conf

1
2
3
4
5
6
7
8
server {
    listen 80;
    server_name your.domain.com;
    location / {
        proxy_pass http://localhost:8080;
        proxy_redirect off;
    }
}

site-enableにリンク

1
sudo ln -s /etc/nginx/sites-available/your.domain.com.conf /etc/nginx/sites-enabled/

nginxを再起動

1
sudo systemctl restart nginx

確認

http://your.domain.com/ にアクセスして、K-NOMPの画面が表示されることを確認します。

HTTPS化する

証明書の取得

Let’s Encrypt(certbot)に任せます。 「–nginx」を指定すると、certbotが自動でnginxの設定を書き換えてくれます。

1
2
3
4
5
6
sudo su -
cd
git clone https://github.com/certbot/certbot
cd certbot
./certbot-auto --nginx -d your.domain.com -m yourname@example.com --agree-tos
  => 途中で2回入力を求められるので、それぞれ「y」、「2」を入力する。 

※ 2を選ぶとHTTPポートからHTTPSポートに転送する設定が入ります。

確認

https://your.domain.com/ にアクセスして、HTTPSが有効なこと、証明書が有効なことを確認します。

証明書の自動更新設定

Let’s Encryptの証明書は3か月で期限切れになるので、その前に更新しなければなりません。

2か月おきくらいに手動でやってもいいですが、面倒がないように自動化します。

crntab -e (rootで実行)

1
2
PATH=/usr/bin:/bin:/usr/sbin
10 20 * * 1 /root/certbot/certbot-auto renew --non-interactive >> /root/certbot.log 2>&1

毎週月曜日20時10分にチェックし、期限30日前になったら更新してくれます。 複数の証明書をとっていても、これだけでOK(のはず)です。

  • 2018/05/22追記
    crontab設定にPATHを追加
    cronのPATHのデフォルトは/usr/bin:/binであり、/usr/sbinにあるnginxが実行できず、nginxプラグインが失敗するためPATH設定が必要となります。

他にやっておくこと

デフォルトのnginxの設定

HTTPポートにIPアドレスでアクセスすると、nginxのデフォルト設定が使用されます。 気になるなら変更しましょう。
(/var/www/html/index.htmlを空にする等?)

Qualys SSL ReportでA+評価をとりたい

/etc/nginx/nginx.confを編集

1
2
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL:!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS";

自分の環境では、以上でA+になりました。

以下をやるとさらに高評化になりますが、8080ポートにアクセスできなくなる(HTTPSを強制されるため)ので注意しましょう。

1
2
3
4
location / {
    :
   add_header Strict-Transport-Security max-age=15768000;
}

Comments