使用Nginx反向代理Apache下的WordPress,并开启全站HTTPS访问

  • 2018-02-27
  • 564
  • 0
  • 1
曾经搞过很多次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.abcba.club;
        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.abcba.club;
           # 这里注意要写你的真实绑定域名,不要写$host,否则待会儿修改HTTPS配置后会出现重定向循环问题
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-From-IP $remote_addr;
                }
        location /.php$ {
          proxy_pass http://127.0.0.1:8083;
                }
        }
# 以下部分是HTTPS的配置
    server {
        listen 443 ssl;
        server_name app.abcba.club;
        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.abcba.club.key;
         # 这里是证书私钥文件的存放位置,注意写绝对路径
        location / {
          proxy_pass http://127.0.0.1:8083;
          proxy_set_header X-real-IP $remote_addr;
          proxy_set_header Host  app.abcba.club;
           # 这里注意要写你的真实绑定域名,不要写$host,否则待会儿修改HTTPS配置后会出现重定向循环问题
          proxy_set_header X-Forwarded-For $proxy_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@abcba.club
    DocumentRoot "/usr/local/apache/htdocs/abcba.club/app"
    ServerName app.abcba.club
</VirtualHost>

这里写的只是简单的Vhost配置,其实还可以加上别名,访问日志,错误日志等配置,由于是实验,就不写这么多了。

3、WordPress 的安装与配置。

上面的Vhost中写了,站点的目录在 /usr/local/apache/htdocs/abcba.club/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.abcba.club','https://app.abcba.club');
UPDATE wp_comments SET comment_content = replace( comment_content, 'http://app.abcba.club','https://app.abcba.club');
UPDATE wp_comments SET comment_author_url = replace( comment_author_url, 'http://app.abcba.club','https://app.abcba.club');
UPDATE wp_options SET option_value = replace( option_value,'http://app.abcba.club','https://app.abcba.club');
注意:mysql语句是以分号结尾。
sql执行语句中的http://app.abcba.club 指的是老域名,而https://app.abcba.club 指的是你的新域名,
在操作时记得更改为你自己的域名。
大功告成,其实这时候已经可以支持HTTPS了,不信你在浏览器的地址栏前面加上https:// 然后再回车试一下。

看看Chrome的小绿锁:

如果是像我一样的强迫症患者,这时候可以在Nginx里把HTTP的配置做一下改变。

在HTTP配置 server 标签内加入一个 location 标签

 location / {
   rewrite ^/(.*)$ https://app.abcba.club/$1 permanent;
      }

大功告成

评论

还没有任何评论,你来说两句吧

粤ICP备18016851号-1

©2019 东南未归人

友情链接