try catch and ...release
ページ
ホーム
Chromeアプリ開発Tips
公開アプリ
Ubuntu
Linuxコマンド
#!/bin/bash
ブロックチェーンと暗号通貨
2016年11月18日金曜日
nginxをLet's Encryptで無料でHTTPS化しNodeJSアプリと連携させる
nginxをインストールし、NodeJSアプリを連携、Let's Encryptで無料https化などを設定するところまでをサクッとメモ。
## 目次 (index) - [環境](#env) - [nginx のインストール](#nginx-install) - [nginxの起動、再起動、停止](#nginx-start-stop-restart) - [Let's Encryptで無料でHTTPS化](#letsencrypt) - [nginxの設定](#nginx-conf) ## 環境 (env) - OS: Ubuntu 14.04LTS - nginx: v1.10.3 前提; - ドメイン名: example.com - NodeJS app: 127.0.0.1:3000 で稼働 - NodeJS appの static files は public/ 配下 - httpへのアクセスは強制的にhttpsへ - documentRootに maintenance.html があればメンテ画面表示 [⤒](#index) ## nginx のインストール (nginx-install) ```bash $ sudo apt-get install nginx ``` [⤒](#index) ## nginxの起動、再起動、停止 (nginx-start-stop-restart) ```bash # 普通に起動 $ sudo service nginx start # 設定ファイルを指定して起動 $ sudo service nginx start -t -c /etc/nginx/nginx.conf # 再起動 $ sudo service nginx restart # 停止 $ sudo service nginx stop ``` [⤒](#index) ## Let's Encryptで無料でHTTPS化 (letsencrypt) [Let's Encrypt](https://letsencrypt.org/)を使って無料でHTTPS化してみます。 ### Let's Encryptクライアントのインストール ``` $ wget https://dl.eff.org/certbot-auto ``` ### Let's Encryptクライアントで鍵とcertの生成: ``` $ ./certbot-auto certonly --webroot -w /usr/share/nginx/html/example.com -d example.com ``` `/etc/letsencrypt/live/example.com/` 配下に鍵などの関連ファイルが複数生成されます。 その中でhttps化(nginx設定)に利用するのは、 - /etc/letsencrypt/live/example.com/fullchain.pem - /etc/letsencrypt/live/example.com/privkey.pem この2つ。 それと、Let's Encryptとは直接関係ないですが、セキュリティ向上のためDH鍵交換に使用するパラメータファイルも作っておきましょう: ``` $ cd /etc/ssl/private/ $ openssl dhparam -out dhparam.pem 2048 ``` `/etc/ssl/private/dhparam.pem`というファイルが生成されたと思います。これは後でnginx設定で使います。 それでは、Let's Encryptに戻って、certを更新してみます: ``` # まずは --dry-run でテスト実行: $ ./certbot-auto renew --dry-run # nginxを一旦停止: $ service nginx stop # テストが成功したら実際にcertを更新(renew)しみてる: $ ./certbot-auto renew # 更新したcertの有効期限をチェック: $ apt install ssl-cert-check $ ssl-cert-check -c /etc/letsencrypt/live/example.com/cert.pem Host Status Expires Days ----------------------------------------------- ------------ ------------ ---- FILE:/etc/letsencrypt/live/example.com/cert.pem Valid Dec 27 2017 89 # nginxを再起動: $ service nginx start ``` Let's Encryptのcertの有効期限は90日間なので、上記でうまく動いたことを確認できたらCRONにスケジュール設定しておく: ``` ## cronをインストール: $ apt-get install cron ## cronサービスの稼働をチェック: $ service cron status cron start/running, process 13107 ## crontabでスケジュール編集: $ crontab -e ... # 毎日2時と14時にcert更新をチェック (nginx停止 → certの更新確認 → nginx起動): 00 2,14 * * * /root/certbot-auto renew --quiet --pre-hook "service nginx stop" --post-hook "service nginx start" ... ``` [⤒](#index) ## nginxの設定 (nginx-conf) `/etc/nginx/conf.d/example.com.conf`: ``` # NodeJS アプリ: upstream nodeapp { server 127.0.0.1:3000; } # メンテ中もアクセスできるIPアドレスを設定しておく: geo $allow_ip_flag { default 0; # Not Allowed 192.168.11.0/24 1; # Allowed Users } # Redirects http -> https: server { listen 80; server_name example.com; rewrite ^ https://$server_name$request_uri? permanent; } server { listen 443 ssl http2; server_name example.com; #charset koi8-r; access_log /var/log/nginx/log/example.com.access.log main; # SSL Settings: ## さきほどcertbotで作ったキーファイル: ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets on; ssl_dhparam /etc/ssl/private/dhparam.pem; # さっき作ったDHパラメータファイル ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 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:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-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'; ssl_prefer_server_ciphers on; # Reverse proxy settings: proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # express-sessionで `cookie.secure:true` なときにもセッション情報を保持するために: proxy_set_header X-Forwarded-Proto https; proxy_redirect http:// https://; location ^~ /.well-known { allow all; default_type "text/plain"; alias /usr/share/nginx/html/example.com/.well-known/; } location / { # maintenance.htmlがあればメンテ画面へ飛ばす if ( -e /usr/share/nginx/html/example.com/maintenance.html) { set $maintenance true; } # 許可IPだけがメンテ画面をスルーできる: if ($allow_ip_flag) { set $maintenance false; } if ($maintenance = true) { rewrite ^ /maintenance.html redirect; } location /maintenance.html { alias /usr/share/nginx/html/example.com/maintenance.html; expires 0; } # NodeJSアプリへ転送: proxy_pass http://nodeapp/; #root /usr/share/nginx/html/example.com; #index index.html index.htm; } # NodeJSアプリで保持する static files: location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { root /home/akirattii/node-app/public; access_log off; expires max; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } ``` nginxを起動: ```bash $ sudo service nginx start ``` 以上となります。 [⤒](#index)
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿