曾经搞过很多次 wordpress 站点,想着要写点技术类东西,可临了就搁在手边忘记了。
因为工作需求,也因为自己喜爱折腾,把这次的折腾过程简要记录一下。
正片开始!
首先,配置环境,我的服务器环境是 LNAMP 编译安装环境,具体的配置过程这里就不详细说了,因为篇幅太大。
可以参考这个链接:CentOS 7.3 LNAMP 安装文档
其他要准备的还有:
一个和博客绑定的域名,以及与该域名的 SSL 证书。
并设置好相应的解析记录。
由于本篇实验所涉及的 Nginx、Apache 等环境都是编译安装的,如果你的环境是从软件仓库安装的,那么一些命令或者配置语法会有一些差异。
大体的配置思路:
我的配置过程是:
在 Nginx 下配置到 Apache 的反向代理,以及在 Nginx 下配置站点的 SSL。
接着在 Apache 下配置一个 Vhost,用来放 WP。
然后还需要修改 WP 的配置文件,以及在数据库更新相关的表记录。
我们先假定已经编译安装并已经基本配置好了 Nginx、Apache、MySQL、PHP 的环境。
1. 关于 Nginx 的配置
记得先把申请的证书上传到服务器,Nginx 需要 crt 证书文件和 key 私钥文件。
在配置文件中需要写到这两个文件的绝对路径。
由于刚开始还没配置 WP 的 HTTPS 访问,所以还是需要先使用 HTTP 方式访问,这里把 HTTP 配置和 HTTPS 配置一起写上。
# 以下部分是 HTTP 的配置
server {
listen 80;
server_name app.jpeng.xyz;
access_log off;
error_log off;
# 由于是实验 && 测试,个人习惯关闭访问日志和错误日志
location / {
proxy_pass http://127.0.0.1:8083;
# 这里的 8083 指的是后端 Apache 的 Vhost 的端口
proxy_set_header X-real-IP remote_addr;
proxy_set_header Host app.jpeng.xyz;
# 这里注意要写你的真实绑定域名,不要写 host, 否则待会儿修改 HTTPS 配置后会出现重定向循环问题
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
proxy_set_header X-From-IPremote_addr;
}
location /.php{proxy_pass http://127.0.0.1:8083;}
}
# 以下部分是 HTTPS 的配置
server {
listen 443 ssl;
server_name app.jpeng.xyz;
charset utf-8;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
access_log off;
error_log off;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_certificate /usr/local/nginx/conf/cert/1_app.abcba.club_bundle.crt;
# 这里是证书文件的存放位置,注意写绝对路径
ssl_certificate_key /usr/local/nginx/conf/cert/2_app.jpeng.xyz.key;
# 这里是证书私钥文件的存放位置,注意写绝对路径
location / {
proxy_pass http://127.0.0.1:8083;
proxy_set_header X-real-IPremote_addr;
proxy_set_header Host app.jpeng.xyz;
# 这里注意要写你的真实绑定域名,不要写 host, 否则待会儿修改 HTTPS 配置后会出现重定向循环问题
proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
proxy_set_header X-From-IP remote_addr;
}
location /.php {proxy_pass http://127.0.0.1:8083;}
}
2.Apche Vhost 配置
Listen 127.0.0.1:8083
<VirtualHost 127.0.0.1:8083>
ServerAdmin root@jpeng.xyz
DocumentRoot "/usr/local/apache/htdocs/jpeng.xyz/app"
ServerName app.jpeng.xyz
</VirtualHost>
这里写的只是简单的 Vhost 配置,其实还可以加上别名,访问日志,错误日志等配置,由于是实验,就不写这么多了。
3、WordPress 的安装与配置。
上面的 Vhost 中写了,站点的目录在 /usr/local/apache/htdocs/jpeng.xyz/app
先 cd 到这个目录
下载 WordPress 安装包并解压,把文件移动到当前目录。
wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
tar zxf wordpress-4.9.4-zh_CN.tar.gz .
mv wordpress/* .
更改所有者权限
chown -R apache.apache .
现在,进入 mysql,创建 WP 的数据库,并单独创建一个只对这个数据库有完全访问权限的 mysql 用户。
CREATE DATABASE wp_app_abcba DEFAULT CHARACTER SET utf8;
grant all on wp_app_abcba.* to wjpcom@localhost identified by 'qqcctv123';
flush privileges;
接着编辑 wp-config.php(WP 的主配置文件)
cp wp-config-sample.php wp-config.php
vim wp-config.php
修改以下内容:(从第 23 行开始)
‘DB_NAME’ 就是刚才我们在 mysql 创建的数据库名;
‘DB_USER’ 就是刚才我们在 mysql 建立的用户名;
‘DB_PASSWD’ 就是刚才我们在 mysql 建立用户时定义的密码;
/** WordPress 数据库的名称 */
define('DB_NAME', 'wp_app_abcba');
/** MySQL 数据库用户名 */
define('DB_USER', 'wjpcom');
/** MySQL 数据库密码 */
define('DB_PASSWORD', 'qqcctv123');
并手动添加一行内容:
$_SERVER['HTTPS'] = 'on';
接下来就是打开浏览器,输入域名,开始 WP 的安装。
WP 的网页安装过程很简单,这里略过。
现在再次进入到 mysql 里面,执行数据库一些表记录的更新操作。
USE wp_app_abcba;
UPDATE wp_posts SET post_content = replace(post_content, 'http://app.jpeng.xyz','https://app.jpeng.xyz');
UPDATE wp_comments SET comment_content = replace(comment_content, 'http://app.jpeng.xyz','https://app.jpeng.xyz');
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'http://app.jpeng.xyz','https://app.jpeng.xyz');
UPDATE wp_options SET option_value = replace(option_value,'http://app.jpeng.xyz','https://app.jpeng.xyz');
注意:mysql 语句是以分号结尾。
sql 执行语句中的 http://app.jpeng.xyz 指的是老域名,而 https://app.jpeng.xyz 指的是你的新域名,
在操作时记得更改为你自己的域名。
大功告成,其实这时候已经可以支持 HTTPS 了,不信你在浏览器的地址栏前面加上 https:// 然后再回车试一下。
看看 Chrome 的小绿锁:
如果是像我一样的强迫症患者,这时候可以在 Nginx 里把 HTTP 的配置做一下改变。
在 HTTP 配置 server 标签内加入一个 location 标签
location / {rewrite ^/(.*)https://app.jpeng.xyz/1 permanent;
}