Nginx+WordPress 全站启用Https SSL安全加密连接

2019年都过去了,难道我的站还要挂着http不加小锁头吗?
自己鼓捣一个小时就搞定了全站 SSL 安全连接,看一看我是怎么做的。

一、准备 SSL 安全证书

个人网站使用的免费证书有很多选择,本文选择使用 Let’s Encrypt 项目 获取免费证书。

部署推荐使用 Certbot ACME 客户端 ,它可以在不下线服务器的前提下自动执行证书颁发和安装。易于使用,适用于许多操作系统。官方页面对新手很友好,直接提供了命令建议。

对于CentOS 8 + Nginx 的部署,只需要几步即可完成。

1.安装 Certbot。

1
2
3
4
wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto

2.获取证书

虽然 Certbot 提供了一键自动配置 Nginx

1
sudo /usr/local/bin/certbot-auto --nginx

但我更推荐仅获取证书,之后再手动修改配置。

1
sudo /usr/local/bin/certbot-auto certonly --nginx

申请到的证书会保存在以下目录

/etc/letsencrypt/live/ideajayve.club/

目录包含以下文件在内的多个文件,修改Nginx配置时会用到它们的路径。
privkey.pem : 证书私钥文件
fullchain.pem: 证书文件

3.创建自动证书续期服务

echo “0 0,12 * * * root python -c ‘import random; import time; time.sleep(random.random() * 3600)’ && /usr/local/bin/certbot-auto renew” sudo tee -a /etc/crontab > /dev/null

二、开启 Nginx 转发重定向

修改自己网站的配置文件,通常在以下目录

/etc/nginx/conf.d/

1.修改原有的 80 端口监听的 HTTP server{} 为强制重定向

修改后的 Nginx HTTP server{} 参考:

HTTP server{} >folded
1
2
3
4
5
6
# HTTP Server rewrite
server {
listen 80;
server_name ideajayve.club www.ideajayve.club;
rewrite ^ https://$server_name$request_uri permanent;
}

2.添加新的 443 端口监听的 HTTPS server{}

修改后的 Nginx HTTPS server{} 参考:

HTTPS server{} >folded
1
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
# HTTPS Server
server {
listen 443 ssl http2;
server_name ideajayve.club www.ideajayve.club;

# Log
access_log /var/log/nginx/ideajayve-access.log;
error_log /var/log/nginx/ideajayve-error.log;

location / {
root /var/www/ideajayve;
index index.php index.html index.htm;
}

# PHP listen
location ~ \.php$ {
root /var/www/ideajayve;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffers 256 4k;
include fastcgi_params;
}

# SSL
ssl_certificate /etc/letsencrypt/live/ideajayve.club/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ideajayve.club/privkey.pem;
ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}

将以上两段配置文本整合在同一个配置文件中,执行命令重启 Nginx。

systemctl restart nginx

现在访问主站看看,地址栏左边已经可以显示 Https 小锁头。

三、开启 WordPress 强制 SSL

修改 WordPress 根目录下的 wp-config.php, 追加以下代码:

1
2
3
/\* 强制后台和登录使用 SSL \*/
define('FORCE\_SSL\_LOGIN', true);
define('FORCE\_SSL\_ADMIN', true);

现在 WordPress 的登录和后台都已开启强制使用 SSL。

四、修复 WordPress 站内图片链接

之前上传到媒体库的图片都被 WordPress 记录了带有 http:// 前缀的绝对地址,我们可以通过修改数据库来修复。或者直接修改当前使用的主题目录下的 function.php,追加以下代码:

1
2
3
4
5
6
7
8
/* 替换图片链接为 https */
function my_content_manipulator($content){
if( is_ssl() ){
$content = str_replace('http://158.247.196.28/wp-content/uploads', 'http://158.247.196.28/wp-content/uploads', $content);
}
return $content;
}
add_filter('the_content', 'my_content_manipulator');

还需要关心网站内链的修改,进入 WordPress 后台仪表盘

  • 修改“菜单”当中的所有“自定义链接”为相对路径;
  • 修改“设置”→“常规”里的 “WordPress 地址”和“站点地址”前缀为 https://
  • 好好想想,是否还有其他写下绝对地址的地方…

如果修改自定义链接后,遇到 WordPress 访问文章 404 的情况,需要修改网站 Nginx 配置

修改并添加两部分 WordPress 重定向规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# HTTPS Server
server {
location / {
root /var/www/ideajayve;
index index.php index.html index.htm;

# WordPress rewrite
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}

# WordPress Admin Page rewrite
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
}

保存后重启 Nginx

systemctl restart nginx

之前访问出现 404 错误的文章,现在可以正常访问了。

至此,Nginx + WordPress 全站 SSL 已经开启,访问已安全加密。

Nginx+WordPress 全站启用Https SSL安全加密连接

https://www.ideajayve.cn/posts/39f4c9d4.html

作者

Jayve

发布于

2020-01-29

更新于

2024-06-21

许可协议


:D 一言句子获取中...