域名、HTTPS和备案
# 12.域名、备案和HTTPS
有了域名后,可以方便其他人记住并访问,历史上不乏大企业花大价钱购买域名的:
- 京东域名换成 JD.com,并且说是为了防止百度吸引流量,为什么? (opens new window)
- 比尔盖茨当年想买 http://ms.com作为域名,运营负责人面露难色,比尔盖茨说我们不差钱。运营负责人回报说对面更不差钱
# 域名提供商
如果想要域名,得去找一些域名注册商去购买,目前基本各大云服务器厂商都支持域名的购买等:
- 阿里云企航_万网域名 (opens new window)
- 域名注册_域名购买申请 - DNSPod - 腾讯云官网 (opens new window)
- 百度智能云-域名服务 (opens new window)
- 域名注册_-华为云 (opens new window)
- .....
自己挑选一个域名购买即可
# 配置DNS
有了域名后,下一步就是配置DNS了,这样别人就可以通过域名来访问你的服务器了。以阿里云为例,简单说明下怎么配置:云解析 DNS (opens new window)
在要配置DNS的地方,点击解析设置
然后添加记录:
然后是填写记录的值:
什么是记录:简单来说就是域名解析的类型,例如有如下类型:
- **A (Address) 记录:**是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置您域名的二级域名。
- MX(Mail Exchanger)记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据 收信人的地址后缀来定位邮件服务器。例如,当Internet上的某用户要发一封信给 user@mydomain.com 时,该用户的邮件系统通过DNS查找mydomain.com这个域名的MX记录,如果MX记录存在, 用户计算机就将邮件发送到MX记录所指定的邮件服务器上。
- NS记录:ns记录全称为Name Server 是一种域名服务器记录,用来明确当前你的域名是由哪个DNS服务器来进行解析的。
- .........
比如用户通过浏览器访问你的网站,就会用A记录;用户发邮件给你,就会用MX记录……不同的记录有不同的作用。
比如,我们这里添加A记录,主机记录写@,记录值为你的服务器IP地址,然后就可以通过域名访问服务器里。例如访问peterjxl.com,就会解析为访问 IP。
我们再添加一个A记录,主机记录写www,记录值还是服务器IP,这样用户就可以访问www.peterjxl.com来访问我的服务器了。
# 备案的概念
注册了域名,并不代表你就可以使用了,得备案后才可以使用。如果你设置了DNS但是没备案,一般会被域名注册商马上停止解析,得备案通过后才给你解析。
备案简单来说就是让国家审核下你的网站,然后才可以使用域名,这是国家规定:
以下内容来自:网站备案_ICP备案_备案迁移_备案-阿里云 (opens new window)
是否一定要备案?
ICP备案主要看您的网站等互联网信息服务解析到的服务器是否在中国内地(大陆),如果服务器在中国内地(大陆),必须完成ICP备案才可对外提供服务。如果服务器在中国香港、中国澳门、中国台湾及其他国家和地区,则不需要进行工信部ICP备案,仅需要完成公安联网备案。查看备案的必要性 (opens new window)。
不进行ICP备案的影响
根据上述政策规定,解析至中国内地服务器的网站等服务,必须完成ICP备案才可对外提供服务。* 如果您未在阿里云提交过ICP备案,直接将域名解析至阿里云中国内地服务器上,将被阿里云监测系统识别并阻断网站的访问服务,提示您需先完成备案操作。
如果您已经在其他接入商处申请过ICP备案,现在希望将域名解析至阿里云中国内地服务器上,根据政策要求,您需要将ICP备案信息接入阿里云。如果您没有将ICP备案信息接入阿里云,将被阿里云监测系统识别并阻断网站的访问服务,提示您需要将ICP备案信息接入阿里云。具体操作请参见接入备案流程 (opens new window)。
# 备案之前要做的事情
首先自己的网站得有内容,如果你网站啥内容都没有,审核是不会通过的,因为没有内容可以审核……
当年我就是搞了个VuePress首页然后去提交备案,被退回了,我还打电话去问为什么退回 🤣🤣🤣 .....
后面为了通过备案,我先临时将自己的笔记导入到了博客上,备案通过后再细细整理网站的内容。
# 工信局备案
备案的过程大同小异,具体怎么备案,得看域名注册商的指引,例如阿里云的备案相关的文档就很齐全:备案 (opens new window)
在备案的时候请仔细阅读下文档,备案也不难,就填几个表单就可以了,工信局备案大概一周左右,通过或退回都有短信通知。
网站的名字也是需要注意的,不能起一些敏感的名字等,参考:填写网站信息(备案单个网站) (opens new window)
# 公安局备案
以下内容来自:ICP备案后所需的后续流程介绍_备案-阿里云帮助中心 (opens new window)
依据 **《计算机信息网络国际联网安全保护管理办法》**相关规定,各网站在工信部进行ICP备案成功后,需在网站开通之日起30日内提交公安联网备案申请,详情请参见公安联网备案及注销 (opens new window)。
各地区用户申请公安联网备案请登录全国互联网安全管理服务平台 (opens new window)提交公安联网备案申请。
公安联网备案审核通过后,您需在30日内登录全国互联网安全管理服务平台 (opens new window),在您的已备案网站详情中,复制网站公安机关备案号和备案编号HTML代码,下载备案编号图标,并编辑您的网页源代码将公安联网备案信息放置在网页底部。
具体怎么备案,可以参考:公安联网备案信息填写指南 (opens new window)
公安备案也参考域名注册商提供的服务即可,比如阿里云的文档中每个表单每个字段怎么填都有说明,也是填几个表单就能完成备案;
不过需要注意的是,公安局备案退回或通过是没有短信通知的……
而且被退回需要在一段时间内重新提交的,所以需要定期自行去公安局备案网站上查看结果。
# 备案之后要做的事情
备案通过后,就需要将备案信息放到网页底部(别问为什么,问就是国家规定),例如本博客的底部:
以VuePress为例,我是在config.themeConfig
里这样配置的:
//配置页脚
footer:{
createYear: 2022,
copyrightInfo: `<a href='https://beian.miit.gov.cn'>粤ICP备2022067627号-1</a>
<img src='https://image.peterjxl.com/blog/beian.png'>
<a href='http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=44011302003646'>粤公网安备 44011302003646号</a>
`
},
2
3
4
5
6
7
8
有些VuePress主题不支持自定义页脚,需注意。
# 更改备案信息
备案通过后,如果想要更改备案信息(例如网站名字等),也可以在域名注册商上面提交修改申请。注意同步修改公安备案信息。
# HTTPS
开启 HTTPS 有很多好处,比如可以实现数据加密传输等,提高网站安全性,提供搜索引擎权重,使其更容易被搜索到等等
# 购买证书
不同域名注册商的话,购买的流程也不同。不过一般证书都比较便宜(一般不会用到通配符证书,很贵)。
阿里云提供了免费证书可以使用,在每个自然年内,都可以通过 SSL 证书服务一次性申领 20 张免费证书。
访问云盾证书服务购买页 (opens new window),选择 「DV 单域名证书(免费试用)」,按照提示下单购买(订单价格为 0 元)。
登录 SSL证书控制台 (opens new window),选择 「SSL 证书」 - 「免费证书」,点击「创建证书」,就会自动创建一个证书:
在新创建的证书上,点击 「证书申请」,填写证书相关的信息....
注意免费证书绑定的域名,只能是普通域名,比如 peterjxl.com
或者 www.peterjxl.com
,所谓通配符域名,就是指以 *. 号开头的域名,比如 *.peterjxl.com
,这样的证书非常贵的,因为有这一个,所有子域名都可以用。
填写后就是提交审核了,一般几分钟内就可以完成审核。
随着时间的推移,购买的流程可能会有不同,具体怎么购买以官网教程为准:购买SSL证书指南 (opens new window),实在不行问客服。
# 上传证书到服务器
证书状态变为 「已签发」后,我们就需要下载证书并上传到服务器上了。
由于我用的Nginx服务器,因此这里下载Nginx的(读者按需下载)
然后解压,并上传到服务器上,我的证书存放路径:
$ll /opt/nginxrun/conf/cert/
total 24
-rw-r--r-- 1 root root 1675 Jul 26 2022 8183762_www.peterjxl.com.key
-rw-r--r-- 1 root root 4768 Jul 26 2022 8183762_www.peterjxl.com.pem
-rw-r--r-- 1 root root 1675 Nov 22 07:44 8852603_twikoo.peterjxl.com.key
-rw-r--r-- 1 root root 4752 Nov 22 07:44 8852603_twikoo.peterjxl.com.pem
2
3
4
5
6
# 修改Nginx配置
可以在下载证书页面点击帮助,看看怎么配置证书的: 在Nginx或Tengine服务器上安装证书 (opens new window)
接下来我们修改 Nginx 配置,在http块里面新增一个server块,以阿里云文档的说明为例:
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name yourdomain;
root html;
index index.html index.htm;
ssl_certificate cert/cert-file-name.pem;
ssl_certificate_key cert/cert-file-name.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
ssl_prefer_server_ciphers on;
location / {
root html; #Web网站程序存放目录。
index index.html index.htm;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
我的Nginx完整配置:
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
keepalive_timeout 65;
#gzip on;
server {
listen 443 ssl;
server_name www.peterjxl.com;
root /opt/myblog;
index index.html;
ssl_certificate cert/8183762_www.peterjxl.com.pem;
ssl_certificate_key cert/8183762_www.peterjxl.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。您需要自行评估是否配置TLSv1.1协议。
ssl_prefer_server_ciphers on;
location / {
root /opt/myblog;
index index.html index.htm;
}
}
server {
listen 80;
server_name localhost;
location / {
root /opt/myblog;
index index.html index.htm;
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
修改完后,记得重启Nginx:
systemctl restart nginx
# http重定向
对于原本的 http 请求,我们可以写一个 rewrite 语句,重定向所有的 http 请求到 https 请求:
server {
listen 80;
server_name peterjxl.com; #需要将yourdomain替换成证书绑定的域名。
rewrite ^(.*)$ https://www.peterjxl.com; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
location / {
index index.html index.htm;
}
}
# HTTPS端口
server {
listen 443 ssl;
server_name www.peterjxl.com;
root /opt/myblog;
index index.html;
ssl_certificate /opt/nginxrun/conf/cert/8183762_www.peterjxl.com.pem;
ssl_certificate_key /opt/nginxrun/conf/cert/8183762_www.peterjxl.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。您需要自行评估是否配置TLSv1.1协议。
ssl_prefer_server_ciphers on;
location / {
root /opt/myblog;
index index.html index.htm;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
开启gzip压缩:
开启gzip压缩,可以使得网站的加载速度变快。
# HTTPS端口
server {
listen 443 ssl;
server_name www.peterjxl.com;
.......其他配置,这里忽略
# 这里是新增的 gzip 配置
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types application/atom+xml application/geo+json application/javascript application/x-javascript application/json application/ld+json application/manifest+json application/rdf+xml application/rss+xml application/xhtml+xml application/xml font/eot font/otf font/ttf image/svg+xml text/css text/javascript text/plain text/xml;
}
2
3
4
5
6
7
8
9
10
11
12
13
# 开启端口
阿里云服务器默认没有开启 HTTPS 监听的 443 端口(很多云服务器都没有开启的),所以需要到ECS管理控制台 (opens new window)的 「安全组 (opens new window)」页面,开放 443 端口:
源一般配置为0.0.0.0,指允许所有IP。
访问自己的网站,如果网页地址栏出现小锁标志,表示证书已经安装成功:
# 最后
备案并不麻烦,就单纯填几个表单提交即可,如果有什么问题也可以问域名注册商的客服。
如果你使用GitHub Pages或者Gitee Pages,则一般不用备案也可,请读者自行斟酌。