自己署名証明書でサクッとHTTPS
事前準備(名前解決)
ここでは、ドメイン名を
nginx.home
とします。
# サーバー自身/手元PCの双方に
127.0.0.1 nginx.home
証明書を作る(SAN 必須)
近年のブラウザは CN ではなく SAN を見ます。
※ CN」はCommon Name(コモンネーム)、「SAN」はSubject Alternative Name(サブジェクト・オルタナティブ・ネーム)を指します。
CN(Common Name):
従来のSSL/TLS証明書で、主に単一のドメイン名を指定するために使用されていました。例えば、「www.example.com」のように、一つのホスト名を指定します。SAN(Subject Alternative Name):
複数のドメイン名やIPアドレスを一つの証明書でカバーするために使用されます。これにより、一つの証明書で「www.example.com」と「blog.example.com」や、異なるドメインである「example.net」なども同時に保護することが可能になります。
ディレクトリの作成
ディレクトリを作成と証明書を作るディレクトリに移動。
mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl
証明書を作成
証明書を作成しますが、実行したディレクトリに作られますので、注意してください。
openssl req -x509 -newkey rsa:2048 -nodes -sha256 -days 365 \
-keyout nginx.home.key \
-out nginx.home.crt \
-subj "/C=JP/ST=Local/L=Local/O=Local/OU=Dev/CN=nginx.home" \
-addext "subjectAltName=DNS:nginx.home,IP:127.0.0.1"
権限をrootだけに
モードを変更して。他のユーザーが見たり書き換えたりできないようにする。
chmod 600 /etc/nginx/ssl/nginx.home.key
Nginx をHTTPS対応
nginx の設定ファイルを作成
nginx の設定ファイルをHTTPSに対応できるように作成または変更追加する。
/etc/nginx/sites-available/nginx.home.conf(新規または既存を編集):
# HTTP→HTTPS リダイレクト
server {
listen 80;
server_name nginx.home;
return 301 https://$host$request_uri;
}
# HTTPS 本体
server {
listen 443 ssl http2;
server_name nginx.home;
ssl_certificate /etc/nginx/ssl/ca/nginx.home.crt;
ssl_certificate_key /etc/nginx/ssl/ca/nginx.home.key;
# TLSの基本(ローカル検証向けのシンプル設定)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
root /var/www/html/wordpress; # 実際のドキュメントルート
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
# (PHP-FPMを使う場合の例)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 使っているバージョンに合わせる
}
}
作成したファイルを有効化
/etc/nginx/sites-enabled/ にあるファイルをnginx.conf に読み込む設定なので、シンボリックフィンクを作る。
ln -s /etc/nginx/sites-available/nginx.home.conf /etc/nginx/sites-enabled/
設定ファイルに間違いがないかテスト
設定を反映させる
nginx -t
systemctl reload nginx
Fastcgi キャッシュ用のファイル
nginx設定用ファイル作成
/etc/nginx/sites-available/
/etc/nginx/sites-available/nginx.home.conf(新規または既存を編集):
# HTTP→HTTPS リダイレクト
server {
listen 80;
server_name nginx.home;
return 301 https://$host$request_uri;
}
# HTTPS 本体
server {
listen 443 ssl http2;
server_name nginx.home;
ssl_certificate /etc/nginx/ssl/ca/nginx.home.crt;
ssl_certificate_key /etc/nginx/ssl/ca/nginx.home.key;
# TLSの基本(ローカル検証向けのシンプル設定)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
root /var/www/html/wordpress; # 実際のドキュメントルート
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
# (PHP-FPMを使う場合の例)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 使っているバージョンに合わせる
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout invalid_header htt
p_500;
fastcgi_cache_lock on;
}
}
上と同様に、シンボリックリンクを確認または作成する。
/etc/nginx/nginx.conf
http {
……………..
……………..
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=1g;
fastcgi_cache_key “$scheme$request_method$host$request_uri”;
}
http ディレクティブに追記する。
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
あとは、上で行ったように有効化と反映をする。