HTTPS通信において、Nginxを経由して、サイトを表示する方法。
注意点
下記のページに書いてある設定は完了している状態です。先にご覧ください。
この記事の目的
現在、上記の記事の設定通りならば、Nginxを経由して、webサイトにアクセス出来る様になっており、証明書も発行・取得出来ています。
ですが、まだ証明書を適用出来ていません。そのため、折角、発行・取得した証明書が宝の持ち腐れになっています。
その為、【nginxを経由して、webサイトにアクセスしながら、証明書の適用をして、安全な通信(https通信)が出来るようにしよう❗】と言うのがこの記事の目的です。
nginx.confの編集
現在のnginx.confの内容は以下の様になっているはずです。
※FQDNは仮想のドメイン名です。FQDNとポート番号の箇所には貴方が現在使用しているドメイン名、ポート番号を当て嵌めて下さい。
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ドメイン名;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location / {
proxy_pass http://FQDN:サイトなどのポート番号/;
}
}
}
このファイルを以下の様に設定します。
※FQDNは仮想のドメイン名です。FQDNとポート番号の箇所には貴方が現在使用しているドメイン名、ポート番号を当て嵌めて下さい。
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name FQDN;
return 301 https://$host$request_uri;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location / {
proxy_pass http://FQDN:サイトなどのポート番号/;
}
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name FQDN;
ssl_certificate /etc/letsencrypt/live/FQDN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/FQDN/privkey.pem;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
location / {
proxy_pass http://FQDN:サイトなどのポート番号/;
}
}
}
この設定に変更し終えたら以下のコマンドを叩いて下さい。
systemctl restart nginx
無事にリスタート出来たら、編集完了です。
終わりに
これで、nginxを経由しながらも、HTTPS通信が出来る様になりました。
もしも、出来ない場合には下記のコマンドを叩いて問題を解決してください。
nginx -t
変更内容まとめ
ここではnginx.conf内の変更箇所、変更内容について自学の為にまとめています。
もしも、何かの役に立てたのなら幸いです。
httpブロック1内
tcp_nopush on;
2のコメントアウトの削除
tcp_nodelay on;
3 types_hash_max_size 2048;
4の追記
https用の新たなserverブロックの追加
serverブロック内
return 301 https://$host$request_uri;
5の追加
listen 443 ssl http2 default_server;
6
listen [::]:443 ssl http2 default_server;
7
ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
8
ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
9
以上の4行の変更及び、追加
-
[]で囲っているため、ここではブロックと名称を付けていますが、恐らく正式の呼称ではありません。 ↩
-
tcp_nopush
:onにすると、レスポンスヘッダとファイルの内容をまとめて送る為、パケット数を減らすことができる。 ↩ -
tcp_nodelay
:onにすると、送信済みデータの応答待ちの状態でも遅延させることなくデータ送信できるようになる。ネットワーク負荷が高くなるのがデメリット。 ↩ -
types_hash_max_size
:最適化に利用するハッシュテーブルのサイズの設定。今回は2048バイトに設定した。 ↩ -
return 301 https://$host$request_uri;
:リダイレクトの設定。http通信を行おうとしても、https通信に切り替わり、保護されたサイトへと誘導される。 ↩ -
listen 443 ssl http2 default_server;
:https通信を行う際に使われる基本的なポート番号が443の為、443を指定している。 ↩ -
listen [::]:443 ssl http2 default_server;
:ipv6で来た場合のlistenポートとデフォルトサーバーの設定。 ↩ -
ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
:fullchain.pemの場所を明記して、参照させる。
fullchain.pem
:ほとんどのサーバーソフトウェアで使用される証明書ファイル。 ↩ -
ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
:privkey.pemの場所を明記して、参照させる。
privkey.pem
:証明書の秘密鍵。 ↩