前言
本篇文章是对上篇文章从零到一快速搭建个人博客网站(域名备案 + https免费证书)(一)的完善,比如域名自动跳转www、二级域名使用等。
域名自动跳转www
这里对上篇域名访问进行优化,首先支持域名自动跳转带有www的地址,操作如下:
cd /home/nginx/conf.d
vi default.conf
当前的配置:
# 编辑conf.d 下的default.conf
server {
listen 80 default;
server_name yangwq.cn;
# http自动转https
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name yangwq.cn;
# 配置站点证书文件地址
ssl_certificate /etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;
# 配置证书私钥
ssl_certificate_key /etc/letsencrypt/archive/yangwq.cn/privkey1.pem;
# 配置服务器可使用的加密算法
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
# 指定服务器密码算法在优先于客户端密码算法时,使用 SSLv3 和 TLS 协议
ssl_prefer_server_ciphers on;
# ssl 版本 可用 SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2
# ie6 只支持 SSLv2,SSLv3 但是存在安全问题, 故不支持
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 配置 TLS 握手后生成的 session 缓存空间大小 1m 大约能存储 4000 个 session
ssl_session_cache shared:SSL:50m;
# session 超时时间
ssl_session_timeout 1d;
# 负载均衡时使用 此处暂时关闭 详情见 https://imququ.com/post/optimize-tls-handshake.html
# 1.5.9 及以上支持
ssl_session_tickets off;
# 浏览器可能会在建立 TLS 连接时在线验证证书有效性,从而阻塞 TLS 握手,拖慢整体速度。OCSP stapling 是一种优化措施,服务端通过它可以在证书链中封装证书颁发机构的 OCSP(Online Certificate Status Protocol)响应,从而让浏览器跳过在线查询。服务端获取 OCSP 一方面更快(因为服务端一般有更好的网络环境),另一方面可以更好地缓存 以上内容来自 https://imququ.com/post/my-nginx-conf-for-wpo.html
# 1.3.7 及以上支持
ssl_stapling on;
ssl_stapling_verify on;
# 根证书 + 中间证书
ssl_trusted_certificate /etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;
# HSTS 可以告诉浏览器,在指定的 max-age 内,始终通过 HTTPS 访问该域名。即使用户自己输入 HTTP 的地址,或者点击了 HTTP 链接,浏览器也会在本地替换为 HTTPS 再发送请求 相关配置见 https://imququ.com/post/sth-about-switch-to-https.html
add_header Strict-Transport-Security max-age=60;
# 在此填写原本 http 协议中的配置
location / {
# 配置转发到本机的halo端口,注意这里的ip应该是机器的ip,不能使用127.0.0.1,使用ip addr 查看本机ip
proxy_pass http://171.11.3.13:8080;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html { #重定向错误页面到 /50x.html
root /usr/share/nginx/html;
}
}
修改为:
server {
listen 80;
server_name *.yangwq.cn;
# 域名为 http://yangwq.cn 跳转到 https://www.yangwq.cn
if ($http_host ~ "^yangwq.cn$") {
rewrite ^(.*)$ https://www.$host$1 permanent;
}
# 域名不为 http://yangwq.cn,统一使用以https访问,不加www
if ($http_host !~ "^yangwq.cn$") {
rewrite ^(.*)$ https://$host$1 permanent;
}
}
server {
listen 443 ssl;
server_name yangwq.cn;
# 配置站点证书文件地址
ssl_certificate /etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;
# 配置证书私钥
ssl_certificate_key /etc/letsencrypt/archive/yangwq.cn/privkey1.pem;
# 配置服务器可使用的加密算法
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
# 指定服务器密码算法在优先于客户端密码算法时,使用 SSLv3 和 TLS 协议
ssl_prefer_server_ciphers on;
# ssl 版本 可用 SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2
# ie6 只支持 SSLv2,SSLv3 但是存在安全问题, 故不支持
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 配置 TLS 握手后生成的 session 缓存空间大小 1m 大约能存储 4000 个 session
ssl_session_cache shared:SSL:50m;
# session 超时时间
ssl_session_timeout 1d;
# 负载均衡时使用 此处暂时关闭 详情见 https://imququ.com/post/optimize-tls-handshake.html
# 1.5.9 及以上支持
ssl_session_tickets off;
# 浏览器可能会在建立 TLS 连接时在线验证证书有效性,从而阻塞 TLS 握手,拖慢整体速度。OCSP stapling 是一种优化措施,服务端通过它可以在证书链中封装证书颁发机构的 OCSP(Online Certificate Status Protocol)响应,从而让浏览器跳过在线查询。服务端获取 OCSP 一方面更快(因为服务端一般有更好的网络环境),另一方面可以更好地缓存 以上内容来自 https://imququ.com/post/my-nginx-conf-for-wpo.html
# 1.3.7 及以上支持
ssl_stapling on;
ssl_stapling_verify on;
# 根证书 + 中间证书
ssl_trusted_certificate /etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;
# HSTS 可以告诉浏览器,在指定的 max-age 内,始终通过 HTTPS 访问该域名。即使用户自己输入 HTTP 的地址,或者点击了 HTTP 链接,浏览器也会在本地替换为 HTTPS 再发送请求 相关配置见 https://imququ.com/post/sth-about-switch-to-https.html
add_header Strict-Transport-Security max-age=60;
# 如果直接使用https://yangwq.cn访问,需要跳转到带www域名
if ($host ~ "^yangwq.cn$") {
rewrite ^(.*)$ https://www.$host$1 permanent;
}
# 在此填写原本 http 协议中的配置
location / { # 定义首页索引目录和名称
proxy_pass http://171.11.3.13:8080;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html { #重定向错误页面到 /50x.html
root /usr/share/nginx/html;
}
}
将上面有关 yangwq.cn 的部分替换成你的域名,此时我们访问yangwq.cn会自动跳转到 https://www.yangwq.cn。
二级域名https
申请二级域名
由于博主是阿里云购买的域名,所以这里申请域名仅针对在阿里云购买的域名。
从域名解析列表加入需要使用的二级域名:
上面我们添加了一个temp.yangwq.cn的二级域名,指向域名 yangwq.cn 的地址,这时候通过temp.yangwq.cn 访问是失败的,原因是需要等待网络服务商刷新DNS地址,一般需要等等1-2分钟。
此时我们访问访问temp.yangwq.cn会默认跳转到 www.yangwq.cn 首页。为了方便测试,我们需要针对temp.yangwq.cn 配置访问nginx默认页面。
修改配置如下:
vi default.conf
# 在末尾追加以下脚本
server {
listen 443 ssl;
server_name temp.yangwq.cn;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html { #重定向错误页面到 /50x.html
root /usr/share/nginx/html;
}
}
由于我们上篇文章申请的是通配符https证书,所以直接可以使用https访问 temp.yangwq.cn,我们会看到这个页面:
小结
到这一步,我们二级域名就配置完了,如果我们需要二级域名跳转到内部应用,我们只要修改以下内容就行了
# 改为你想代理的应用
location / {
# 注意这里要使用机器的ip,不能用127.0.0.1,机器ip使用命令 ip addr 查看
proxy_pass http://ip:端口;
}
后续文章在个人博客更新,欢迎关注~