在Nginx上实现SSL和反向代理
首先
这是用于将SSL + 反向代理设置为Nginx的配置。尽管看起来有很多步骤,但如果预先创建好配置文件的模板,设置相对容易。
前提条件
-
- さくらVPSのUbuntu16.04(カスタムOS)
-
- ドメインを取得済みで、かつサブドメインも登録済み。
- Let’s Encryptを導入済み。
假设条件
- ドメインhoge.fuga.comにアクセスしたときにリバースプロキシでサーバアドレス123.456.789.12:3456に接続させる。
設置步驟
第一次验证
创建用于认证的目录,并将所有者用户更改为www-data。
# mkdir /var/www/hoge
# chown -R www-data:www-data /var/www/hoge
创建用于HTTP连接的网站设置文件。
# vi /etc/nginx/conf.d/hoge.conf
将配置文件的内容设置为如下所示。
# HTTPの設定
server{
listen 80;
listen [::]:80;
server_name hoge.fuga.com;
#letsencryptで認証するためのURL
location ^~ /.well-known/acme-challenge {
default_type "text/plain";
root /var/www/hoge;
}
}
重新启动Nginx。
# systemctl restart nginx
使用certbot对hoge.fuga.com子域名进行认证。
认证完成后,将在/etc/letsencrypt/live下生成密钥文件。
# certbot certonly --webroot -w /var/www/hoge -d hoge.fuga.com
SSL连接设置
修改设置文件。
# vi /etc/nginx/conf.d/hoge.conf
请按照以下方式编辑设置文件。
# HTTPの設定
server{
listen 80;
listen [::]:80;
server_name hoge.fuga.com;
#letsencryptで認証するためのURL
location ^~ /.well-known/acme-challenge {
default_type "text/plain";
root /var/www/hoge;
}
#HTTPで接続された場合、HTTPSで同URLにリダイレクトさせる。
return 301 https://$host$request_uri;
}
# HTTPSの設定
server{
listen 443 ssl;
listen [::]:443 ssl;
server_name hoge.fuga.com;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve prime256v1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# SSL認証キーの参照先。certbotで自動的に生成されるファイルを指定する。
ssl_certificate /etc/letsencrypt/live/hoge.fuga.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hoge.fuga.com/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
keepalive_timeout 70;
sendfile on;
client_max_body_size 0;
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;
location / {
# プロキシ先のサーバアドレスとポート番号を指定
proxy_pass 123.456.789.12:3456;
}
}
重启Nginx。
# systemctl restart nginx
使用浏览器连接到https://hoge.fuga.com,并确保目标页面正常显示。
※2019年2月8日修正:让我们来修正一下:Let’s Encrypt的重新认证URL必须是HTTP端才可以使用……