0x01 前言
我网站的域名从原来的proj.org.cn更换为现在的enginx.uk,依旧使用开源SSL项目Let’s Encrypt的数字证书提供HTTPS服务,而整个更改域名的过程仅仅用了不到10分钟。
0x02 准备
在正式切换域名之前要完成以下准备工作:
- 配置新域名的DNS指向
- 创建新域名的数字证书
- 创建新域名的nginx配置文件
- 创建新域名的apache配置文件
- 创建新域名的PHP配置文件
- 安装域名切换插件
0x03 实操
0x03.1 DNS
我使用DNSPod提供的免费DNS解析服务。首先需要在域名服务商处将DNS服务器更改为DNSPod的服务器:
#DNS Server1 f1g1ns1.dnspod.net. #DNS Server2 f1g1ns2.dnspod.net.
修改DNS服务器的生效时间从10分钟到24小时不等,而我修改之后大概10分钟就生效了。然后添加DNS记录:
DNSPoD生效的速度还是挺快的,稍等几秒后通过dig命令即可查询是否生效:
MacBook-Air-Lan:~ terence$ dig enginx.uk ; <<>> DiG 9.8.3-P1 <<>> enginx.uk ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17908 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;enginx.uk. IN A ;; ANSWER SECTION: enginx.uk. 3271 IN A 103.231.253.45 ;; Query time: 234 msec ;; SERVER: 10.1.1.1#53(10.1.1.1) ;; WHEN: Sat Dec 10 13:07:31 2016 ;; MSG SIZE rcvd: 43 MacBook-Air-Lan:~ terence$ dig www.enginx.uk ; <<>> DiG 9.8.3-P1 <<>> www.enginx.uk ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51974 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.enginx.uk. IN A ;; ANSWER SECTION: www.enginx.uk. 3600 IN CNAME enginx.uk. enginx.uk. 3267 IN A 103.231.253.45 ;; Query time: 67 msec ;; SERVER: 10.1.1.1#53(10.1.1.1) ;; WHEN: Sat Dec 10 13:07:35 2016 ;; MSG SIZE rcvd: 61
0x03.2 数字证书
数字证书我用的是Let’s Encrypt所签发的数字证书,在这篇文章里不涉及相关的内容。但如果你觉得这比较麻烦,可以尝试使用encryption everywhere的免费项目,可以获的由symantec签发的一年有效期的数字证书。
相对于Let’s Encrypt 90天有效期来说,一年期更有吸引力。这两个免费的项目都不支持签发泛域名数字证书,而且encryption everywhere项目仅支持单域名,如果你需要一张多域名(SAN SSL)数字证书,那么Let’s Encrypt是首选。
0x03.3 配置文件
我只需要将原来的配置文件复制一份并且修改域名即可完成对nginx的配置,因为nginx是作为前端服务器,所以修改完成后reload也不会对正在运行的网站有所影响。
#进入目录 [root@hk1 ~]# cd /usr/local/nginx/conf.d/ #复制文件 [root@hk1 conf.d]# cp proj.org.cn.ngx.conf enginx.uk.ngx.conf #修改文件 [root@hk1 conf.d]# vim enginx.uk.ngx.conf
要确认server_name、证书路径、root路径正确,确认无误后即可reload nginx服务:
#重新加载nginx [root@hk1 conf.d]# nginx -s reload
apache和PHP的操作方法和nginx一致,这里不再叙述。但不要急着重启apache和PHP服务!先进行下一步操作。
0x03.4 插件
以前使用Wordpress的时候如果需要更换域名,我需要对数据库进行操作。但现在通过插件即可完成所以域名的替换。推荐使用以下插件:
安装完毕后在工具>change domain中修改:
一旦通过插件更换域名完毕后,即可重启apache和PHP服务。
0x04 其他
如果你和我一样使用WP Super Cache和Wordfence Security,那么你还需要注意以下内容:
#修改Wordpress配置文件wp-config.php [root@hk1 public_html]# vim wp-config.php #修正以下路径 define( 'WPCACHEHOME', '/usr/local/html/enginx.uk/public_html/wp-content/plugins/wp-super-cache/' ); //Added by WP-Cache Manager
因为Wordfence Security的需要,还需要修改php.ini文件:
#修改php.ini [root@hk1 etc]# vim php.ini #修正以下内容的路径 [HOST=enginx.uk] auto_prepend_file = '/usr/local/html/enginx.uk/public_html/wordfence-waf.php'
还有很重要的一点,因为修改了域名,那我们肯定不想访客和搜索引擎的爬虫通过旧域名访问时返还404或403。为此我们需要修改旧的nginx配置文件,将从旧域名进入的访客重定向至新域名:
#修改文件 [root@hk1 ~]# vim /usr/local/nginx/conf.d/301-temp.ngx.conf #修改内容如下 server { listen 80; server_name proj.org.cn www.proj.org.cn; rewrite ^/(.*)$ https://ngx.hk/$1 permanent; } server { listen 443 ssl; server_name proj.org.cn www.proj.org.cn; ssl on; ssl_certificate /usr/local/nginx/ssl/proj.org.cn.crt; ssl_certificate_key /usr/local/nginx/ssl/proj.org.cn.key; ssl_buffer_size 16k; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:DES-CBC3-SHA; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache builtin:20480 shared:SSL:10m; ssl_session_timeout 3h; ssl_stapling on; ssl_session_tickets on; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Strict-Transport-Security "max-age=31536000; preload; includeSubDomains" always; rewrite ^/(.*)$ https://ngx.hk/$1 permanent; }
完成后重新加载nginx即可:
[root@hk1 ~]# nginx -s reload
0x05 结语
一切顺利的话,10分钟即可完成域名的更换操作。