使用Nginx反向代理Apache下的WordPress,并开启全站HTTPS访问
曾经搞过很多次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;
}