需求来源
我在搭建博客初期是将博客部署在了家里的软路由上,由于家庭宽带的80以及443端口被宽带服务商屏蔽了,所以最开始是通过8443端口对外提供服务,地址为:https://blog.chengpei.top:8443,后来上了阿里云并且经过备案,可以使用443端口进行访问了,地址就变为了https://blog.chengpei.top,这是会出现2个问题:
- 如果已经有人收藏了某个文章,是在8443端口的地址上,这时在访问8443就访问不到了
- 不带https前缀,直接域名chengpei.top访问时,游览器会自动访问http协议地址,端口号是80,也可能会访问不到
这时我们可能需要用到nginx的重定向功能,将指定端口或者协议的请求转发到正确的地址上
配置实例
以下的我的配置文件节选:
server {listen 8443 ssl;server_name blog.chengpei.top;rewrite ^(.*)$ https://${server_name}$1 permanent;# 后续路由证书等配置省略
}server {listen 80;listen 443 ssl;server_name chengpei.top www.chengpei.top blog.chengpei.top;if ($scheme = http) {return 301 https://$host$request_uri;}# 后续路由证书等配置省略
}
第一段配置时监听了域名blog.chengpei.top的8443端口,如果出现https://blog.chengpei.top:8443地址的访问,则重写URL转发至https://blog.chengpei.top
第二段配置是同时监听了多个域名的80以及443端口,如果请求进来的协议是http,则返回301重定向到对应域名的https地址上去
以上两段配置即可保证不管是带不带端口,访问http还是https都可以正确的访问到目标服务