Nginx之HTTPS实战

https介绍

1 .为什么使用https

# 为啥呢?
为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数据报文信息,同时也避免网站传输时信息泄露。

那么我们在实现https时,需要了解ssl协议,但我们现在使用的更多的是TLS加密协议。

那么TLS是怎么保证明文消息被加密的呢?在OSI七层模型中,应用层是http协议,那么在应用层协议之下,我们的表示层,是ssl协议所发挥作用的一层,他通过(握手、交换秘钥、告警、加密)等方式,是应用层http协议没有感知的情况下做到了数据的安全加密

2.CA证书颁发流程

我们首先需要申请证书,先去登记机构进行身份登记,我是谁,我是干嘛的,我想做什么,然后登记机构再通过CSR发给CA,CA中心通过后会生成一堆公钥和私钥,公钥会在CA证书链中保存,公钥和私钥证书我们拿到后,会将其部署在WEB服务器上

1.当浏览器访问我们的https站点时,他回去请求我们的证书

2.Nginx这样的web服务器会将我们的公钥证书发给浏览器

3.浏览器会去验证我们的证书是否合法有效

4.CA机构会将过期的证书放置在CRL服务器,CRL服务的验证效率是非常差的,所以CA有推出了OCSP响应程序,OCSP响应程序可以查询指定的一个证书是否过去,所以浏览器可以直接查询OSCP响应程序,但OSCP响应程序性能还不是很高

5.Nginx会有一个OCSP的开关,当我们开启后,Nginx会主动上OCSP上查询,这样大量的客户端直接从Nginx获取证书是否有效

3.浏览器角度如何与服务器443端口建立建立

# 流程
 1、浏览器发起往服务器的443端口发起请求,请求携带了浏览器支持的加密算法和哈希算法。 
 2、服务器收到请求,选择浏览器支持的加密算法和哈希算法。 
 3、服务器下将数字证书返回给浏览器,这里的数字证书可以是向某个可靠机构申请的,也可以是自制的。
 4、浏览器进入数字证书认证环节,这一部分是浏览器内置的TLS完成的:
 	4.1 首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥。 
 	4.2 用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性(验证过程类似上面Bob和Susan的通信)。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
    4.3 浏览器生成一个随机数R,并使用网站公钥对R进行加密。
5、浏览器将加密的R传送给服务器。 
6、服务器用自己的私钥解密得到R。 
7、服务器以R为密钥使用了对称加密算法加密网页内容并传输给浏览器。 

模拟网站被篡改

1.建立nginx配置文件

    [root@web01 conf.d]# cat test.conf 
    server {
            listen 80;
            server_name www.drz.com;
            root /data/code;
            index index.html;
            charset utf-8;
    }

2.配置nginx页面

[root@web01 code]# vim index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是title</title>
</head>
<body>
<article>
  <header>
    <h1>我是Article</h1>
    <p>创建时间:<time pubdate="pubdate">2018/8/10</time></p>
  </header>
  <p>
    <b>Aticle</b>第一次用h5写文章,好他*的紧张...
  </p>
  <footer>
    <p><small>曾老湿版权所有!</small></p>
  </footer>
</article>
</body>
</html>

3.查看nginx页面

4.配置nginx拦截服务器

[root@web02 conf.d]# vim jiechi_test.conf
upstream jiechi {
        server 10.0.0.7:80;
}

server {
        listen 80;
        server_name www.drz.com;

        location / {
                proxy_pass http://jiechi;
                proxy_set_header Host $http_host;
                sub_filter '<title>我是title' '<title>曾老湿title';
                sub_filter '<small>曾老湿版权所有' ' <small>才不是曾老湿版权所有';
        }
}

5.查看篡改后的内容

6.添加篡改页面

[root@web02 conf.d]# vim jiechi_test.conf
upstream jiechi {
        server 10.0.0.7:80;
}

server {
        listen 80;
        server_name www.drz.com;

        location / {
                proxy_pass http://jiechi;
                proxy_set_header Host $http_host;
                sub_filter ' <h1>我是Article' ' <h1>澳门首家线上赌场';
                sub_filter '<b>Aticle</b>第一次用h5写文章,好他*的紧张...' '<img src="https://blog.driverzeng.com/zenglaoshi/xingganheguan.gif">';
                sub_filter '<small>曾老湿版权所有' ' <small>不是曾老湿版权所有';
        }
}

7.查看篡改结果

证书类型

对比 域名型 DV 企业型 OV 增强型 EV
绿色地址栏 img小锁标记+https img小锁标记+https img小锁标记+企业名称+https
一般用途 个人站点和应用; 简单的https加密需求 电子商务站点和应用; 中小型企业站点 大型金融平台; 大型企业和政府机构站点
审核内容 域名所有权验证 全面的企业身份验证; 域名所有权验证 最高等级的企业身份验证; 域名所有权验证
颁发时长 10分钟-24小时 3-5个工作日 5-7个工作日
单次申请年限 1年 1-2年 1-2年
赔付保障金 —— 125-175万美金 150-175万美金

证书购买推荐

如果你的web服务器只需要保护一个域名 可选择www
如果你想一个证书保护五个域名 可选择www images cdn test m
而最后一种也就是最贵的一种*.abc.com叫做通配符域名,可将你域名所有包括abc.com结尾的全部进行https认证

HTTS注意事项:

https不支持续费,证书到期需要重新申请并进行替换
https不支持三级域名解析,如 test.m.driverzeng.com
https显示绿色,说明整个网站的url都是https的
https显示黄色,因为网站代码中包含http的不安全链接
https显示红色,那么证书是假的或者证书过期。

Nginx单台实现HTTPS操作

1.环境准备

#nginx必须有ssl模块
[root@web03 ~]# nginx -V
--with-http_ssl_module

#创建存放ssl证书的路径(可不同域名创建不同认证证书)
[root@web03 ~]# mkdir -p /etc/nginx/ssl_key
[root@web03 ~]# cd /etc/nginx/ssl_key

2.使用openssl命令充当CA权威机构创建证书(生产不使用此方式生成证书,不被互联网所认可的黑户证书)

[root@web03 ssl_key]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
...............................................+++
............................................+++
e is 65537 (0x10001)
#密码1234
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
[root@web03 ssl_key]# ls
server.key

3.生成自签证书,同时去掉私钥的密码

[root@web03 ssl_key]# openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
..................................................................................................+++
...................................................................................................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:China
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:CHINA
Locality Name (eg, city) [Default City]:meiguo
Organization Name (eg, company) [Default Company Ltd]:shiwei
Organizational Unit Name (eg, section) []:shiwei
Common Name (eg, your name or your server's hostname) []:drz.com
Email Address []:123@qq.com


# req  --> 用于创建新的证书
# new  --> 表示创建的是新证书    
# x509 --> 表示定义证书的格式为标准格式
# key  --> 表示调用的私钥文件信息
# out  --> 表示输出证书文件信息
# days --> 表示证书的有效期

4.配置证书

# 模块语法
#启动ssl功能
Syntax:  ssl on | off;
Default: ssl off;
Context: http,server

#证书文件
Syntax:  ssl_certificate file;
Default: -
Context: http,server

#私钥文件
Syntax:  ssl_certificate_key fil;
Default: -
Context: http,server

5.修改nginx配置文件

[root@web03 conf.d]# cat ssl.conf 
server {
        listen 443 ssl;
        server_name s.drz.com;
        ssl_certificate   conf.d/server.crt;			
        ssl_certificate_key  conf.d/server.key;
        location / {
                root /code;
                index index.html;
        }
}

#配置将用户访问http请求强制跳转https
server {
        listen 80;
        server_name s.drz.com;
        return 302 https://$server_name$request_uri;
}

#准备对应的站点目录,并重启Nginx
[root@web03 conf.d]# echo "zls_https" > /code/index.html
[root@web03 conf.d]# nginx -s reload

# 再查看页面信息,及为加密

Nginx集群实现https加密

注意:

# 1.负载访问使用的https,后端web使用的是http,对于PHP来说他并不知道用的到底是什么所以一般页面会出现错误。正确操作如下:
[root@web01 conf.d]# cat zh.conf 
server {
        listen 80;
        server_name zh.drz.com;
        root /code/zh;
        index index.php index.html;

        location ~ \.php$ {
                root /code/zh;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                #告诉PHP我前置的负载使用的是https协议
                fastcgi_param HTTPS on;
                include        fastcgi_params;
        }
}

# 2.wordpress早期安装如果是使用的http方式,那开启https后会导致图片出现破损或加载不全的情况
 建议:
1、在安装WordPress之前就配置好https;
2、在WordPress后台管理页面,设置-->常规-->修改(WordPress地址及站点地址)为 https://
3、注意:WordPress很多链接在安装时被写入数据库中。

要求

# **完善架构**
1.web01 02 03 部署nginx 和php  80端口
2.lb部署https证书,80强转443
3.NFS:  sersync
4.MySQL
5.RSYNC 实时备份 NFS
- wordpress
- zh

环境部署

主机名 内网ip 外网ip 角色
lb 172.16.1.5 10.0.0.5 负载均衡
web01 172.16.1.7 10.0.0.7 web服务器
web02 172.16.1.8 10.0.0.8 web服务器
web03 172.16.1.9 10.0.0.9 web服务器
db01 172.16.1.51 10.0.0.51 数据库服务器
nfs 172.16.1.31 10.0.0.31 静态资源存储
backup 172.16.1.41 10.0.0.41 备份服务器

操作流程

1.web服务及php安装配置

# 1.安装nginx及php(三台web均需安装)
[root@web01 nginx.php]# yum localinstall -y nginx-1.18.0-1.el7.ngx.x86_64.rpm 
[root@web01 nginx.php]# yum localinstall -y php*

# 2.统一用户(三台web均需创建)
[root@web01 conf.d]# groupadd www -g 666
[root@web01 conf.d]# useradd www -u 666 -g 666 -s /sbin/nologin
[root@web01 conf.d]# vim /etc/nginx/nginx.conf 
user  www;
[root@web01 conf.d]# vim /etc/php-fpm.d/www.conf 
user = www
group = www

# 3.书写nginx配置文件搭建知乎及wordpress(web01中书写,其他web直接拷贝web01即可)
[root@web01 conf.d]# vim /etc/nginx/conf.d/wp.conf			---------wordpress配置文件
server {
        listen 80;
        server_name wp.linux.com;
        root /code/wp;
        index index.php index.html;

        location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}
[root@web01 conf.d]# vim /etc/nginx/conf.d/zh.conf		    ---------知乎配置文件 
server {
        listen 80;
        server_name zh.linux.com;
        root /code/zh;
        index index.php index.html;

        location ~ \.php {
        fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}

# 4.检测配置文件,并启动服务
[root@web01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 conf.d]# systemctl start nginx php-fpm

# 5.检测服务是否启动
[root@web01 conf.d]# netstat -lntup|grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7308/nginx: master  
[root@web01 conf.d]# netstat -lntup|grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      7307/php-fpm: mast

# 6.根据配置文件创建对应站点目录(三台web均需创建)
[root@web01 conf.d]# mkdir /code/{wp,zh} -p

# 7.将对应压缩包上传至对应站点目录并解压
[root@web01 zh]# unzip WeCenter_3-2-1.zip 
[root@web01 wp]# tar xf wordpress-5.0.3-zh_CN.tar.gz 

# 8.对站点目录更改权限
[root@web01 wp]# chown -R www.www /code

# 9.页面测试(在windows中配置域名解析)
wp.linux.com
zh.linux.com

2.数据库服务器安装配置

# 1.数据库安装
[root@db01 ~]# yum install -y mariadb-server

# 2.启动数据库
[root@db01 ~]# systemctl start mariadb

# 3.为wp和zh创建对应连接用户
 MariaDB [(none)]> grant all on *.* to wp_user@'%' identified by '123';
MariaDB [(none)]> grant all on *.* to zh_user@'%' identified by '123';

# 4.创建对应数据库
MariaDB [(none)]> create database wp;
MariaDB [(none)]> create database zh;

# 5.继续连接web页面,填写数据库信息
  • wordpress浏览器访问


搭建博客

  • zh浏览器访问


3.其他web同步

# 1.将web01中的配置文件操作复制到web02和web03中
[root@web01 wp]# cp -r /etc/nginx/conf.d/* root@10.0.0.8:/etc/nginx/conf.d/
[root@web01 wp]# scp -r /etc/nginx/conf.d/* root@10.0.0.9:/etc/nginx/conf.d/

# 2.将web01中的站点目录信息复制到web02和web03中
[root@web01 wp]# scp -r /code/wp/* root@10.0.0.8:/code/wp/
[root@web01 wp]# scp -r /code/zh/* root@10.0.0.8:/code/zh/
[root@web01 wp]# scp -r /code/wp/* root@10.0.0.9:/code/wp/
[root@web01 wp]# scp -r /code/zh/* root@10.0.0.9:/code/zh/

# 3.修改权限
[root@web02 wp]# chown -R www.www /code
[root@web03 conf.d]# chown -R www.www /code

4.nfs安装及配置

# 1.nfs安装(服务端安装)
[root@nfs ~]# yum install -y nfs-utils

# 2.nfs客户端安装
[root@web02 wp]# yum install -y nfs-utils
[root@web03 wp]# yum install -y nfs-utils
[root@web01 wp]# yum install -y nfs-utils

# 3.修改nfs配置文件
[root@nfs ~]# vim /etc/exports
/wp 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
/zh 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)

# 4.创建对应用户及目录
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]#  useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@nfs ~]# mkdir /{wp,zh}
[root@nfs ~]# chown -R www.www /wp
[root@nfs ~]# chown -R www.www /zh

# 5.启动服务
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server

# 6.检测服务是否正常(通过客户端检测)
[root@web01 wp]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/zh 172.16.1.0/24
/wp 172.16.1.0/24

# 7.客户端将需要挂载文件提前发送至nfs服务端,并修改权限
[root@web01 wp]# scp -r /code/wp/wp-content/uploads/* root@10.0.0.31:/wp
[root@web01 wp]# scp -r /code/zh/uploads/* root@10.0.0.31:/zh
[root@nfs wp]# chown -R www.www /wp
[root@nfs wp]# chown -R www.www /zh


# 8.客户端挂载
[root@web01 wp]# mount -t nfs 172.16.1.31:/wp /code/wp/wp-content/uploads/
[root@web01 wp]# mount -t nfs 172.16.1.31:/zh /code/zh/uploads/
[root@web02 wp]# mount -t nfs 172.16.1.31:/wp /code/wp/wp-content/uploads/
[root@web02 wp]# mount -t nfs 172.16.1.31:/zh /code/zh/uploads/
[root@web03 wp]# mount -t nfs 172.16.1.31:/wp /code/wp/wp-content/uploads/
[root@web03 wp]# mount -t nfs 172.16.1.31:/zh /code/zh/uploads/

5.sersync实现实时监控

# 1.服务安装(backup服务端)
[root@backup ~]# yum install -y rsync

# 2.配置文件修改
[root@backup ~]#  vim /etc/rsyncd.conf
uid = www                                                                                           
gid = www                                                                                           
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[zh]
comment = welcome to oldboyedu backup!
path = /zh
[wp]
comment = welcome to oldboyedu backup!
path = /wp

# 3.根据配置文件创建用户
[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

# 4.根据配置文件创建目录
[root@backup ~]# mkdir /{wp,zh}

# 5.授权
[root@backup ~]# chown -R www.www /{wp,zh}

# 6.创建认证用户账号密码,并修改权限
[root@backup ~]# cat /etc/rsync.passwd
rsync_backup:123
[root@backup /zh]# chmod 600 /etc/rsync.passwd 

# 7.启动服务
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

6.inotify安装及配置

# 1.服务安装(backup客户端)
[root@nfs wp]# yum install -y rsync inotify-tools

# 2.下载sersync包
[root@nfs wp]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

# 3.解压
[root@nfs wp]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz 

# 4.移动目录
[root@nfs wp]# mv GNU-Linux-x86/ /usr/local/sersync

# 5.修改配置文件(只监控nfs中wp目录,还需稍后新增目录)
[root@nfs wp]# vim /usr/local/sersync/confxml.xml 
    <inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="true"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="true"/>
        <modify start="true"/>
    </inotify>

    <sersync>
        <localpath watch="/wp">
            <remote ip="10.0.0.41" name="wp"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            <commonParams params="-az"/>
            <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.passwd"/>
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            <timeout start="false" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
        
# 6.根据配置文件创建密码文件(只需写入用户)
[root@nfs wp]# vim /etc/rsync.passwd
123

# 7.更改密码文件权限
[root@nfs wp]# chmod 600 /etc/rsync.passwd 

# 8.监控zh目录,多编写一个配置文件
[root@nfs wp]# cd /usr/local/sersync/
[root@nfs sersync]# cp confxml.xml zh.xml			---和wp相比只需要修改此处即可
 <sersync>
        <localpath watch="/zh">
            <remote ip="10.0.0.41" name="zh"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
      
# 9.启动服务
[root@nfs sersync]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/zh.xml 
[root@nfs sersync]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml 

7.部署lb负载均衡

# 1.服务安装
[root@lb01 nginx.php]# yum localinstall -y nginx-1.18.0-1.el7.ngx.x86_64.rpm 

# 2.创建证书目录
[root@lb01 nginx.php]# mkdir -p /etc/nginx/{wp_ssl,zh_ssl}

# 3.生成证书
[root@lb01 wp_ssl]# cd /etc/nginx/zh_ssl/
[root@lb01 zh_ssl]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
..................+++
........+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
Verify failure
User interface error
140555897681808:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:pem_lib.c:385:
[root@lb01 ssl_key]# ls
server.key

# 4.1.生成自签证书,同时去掉私钥密码(为zh生成)
root@lb01 zh_ssl]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
..................................+++
...........................................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:cn
Locality Name (eg, city) [Default City]:cn
Organization Name (eg, company) [Default Company Ltd]:cn
Organizational Unit Name (eg, section) []:cn
Common Name (eg, your name or your server's hostname) []:zh.com  	# 注意此处需要和web端域名一致
Email Address []:123@qq.com

# 4.2 生成自签证书,为wp生成
[root@lb01 wp_ssl]# cd /etc/nginx/wp_ssl/
[root@lb01 nginx]# cd wp_ssl/
[root@lb01 wp_ssl]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
.........................+++
.......................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
[root@lb01 wp_ssl]# openssl req -days 36500 -x509 \
> -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
...........................................................................................................................+++
..................................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:ch
State or Province Name (full name) []:changha^H^H
Locality Name (eg, city) [Default City]:shanghai
Organization Name (eg, company) [Default Company Ltd]:shiwei
Organizational Unit Name (eg, section) []:shiwei
Common Name (eg, your name or your server's hostname) []:wp.com		# 一定注意为后端web服务器域名
Email Address []:123@qq.com

# 5.查看生成证书
[root@lb01 wp_ssl]# ll
total 8
-rw-r--r-- 1 root root 1399 Jun  4 01:35 server.crt
-rw-r--r-- 1 root root 1708 Jun  4 01:35 server.key
[root@lb01 zh_ssl]# ll
total 8
-rw-r--r-- 1 root root 1338 Jun  4 01:36 server.crt
-rw-r--r-- 1 root root 1704 Jun  4 01:36 server.key

# 6.书写配置文件
[root@lb01 zh_ssl]# vim /etc/nginx/conf.d/lb_wp.conf (wp的负载配置文件)

upstream wp {
        server 172.16.1.7;
        server 172.16.1.8;
        server 172.16.1.9;
}

server {
        listen 80;
        server_name www.wp.com;
        return 302 https://$server_name$request_uri;
       }
server {
                listen 443 ssl;
                server_name www.wp.com;
                ssl_certificate /etc/nginx/wp_ssl/server.crt;		# 指定wp证书地址
                ssl_certificate_key /etc/nginx/wp_ssl/server.key;	# 指定wp证书地址

        location / {
                proxy_pass http://wp;
                include proxy_params;
        }
}

[root@lb01 conf.d]# vim lb_zh.conf 			(zh负载配置文件)			

upstream zh {
        server 172.16.1.7;
        server 172.16.1.8;
        server 172.16.1.9;
}

server {
        listen 80;
        server_name www.zh.com;
        return 302 https://$server_name$request_uri;
       }
server {
                listen 443 ssl;
                server_name www.zh.com;
                ssl_certificate /etc/nginx/zh_ssl/server.crt;			# 指定zh证书路径
                ssl_certificate_key /etc/nginx/zh_ssl/server.key;		# 指定zh证书路径

        location / {
                proxy_pass http://zh;
                include proxy_params;
        }
}

# 8.重启服务
[root@lb01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 conf.d]# systemctl restart nginx

8.nginx告知php开启https

# 1.web开启https(三台web的wp文件都需要增加,或者可以在include文件中增加开启信息)
[root@web01 conf.d]# vim /etc/nginx/conf.d/wp.conf 
server {
        listen 80;
        server_name www.wp.com;
        root /code/wp;
        index index.php index.html;

        location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param HTTPS on;				# 仅增多了此行
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}

# 2.web中开启https (三台web的zh配置文件都如下放所以,多增加注释一行信息)
[root@web01 conf.d]# vim /etc/nginx/conf.d/zh.conf 
server {
        listen 80;
        server_name www.zh.com;
        root /code/zh;
        index index.php index.html;

        location ~ \.php {
        fastcgi_pass 127.0.0.1:9000;
          fastcgi_param HTTPS on;			# 多增加此行信息
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}

# 3.每台web都需重载配置文件
[root@web02 conf.d]# systemctl restart nginx

# 4.浏览器测试(先做好域名解析)


  • 访问www.zh.com页面

  • 查看之前新增页面

  • 尝试多写一片文章,看后端是否会自动备份

  • zh备份目录已自动备份

  • 访问wordpress

  • 先查看wp备份目录下文件

  • 再次写一片博客

  • 查看备份目录是否自动同步

阿里云配置https方式[扩展]

# 对不起,我实在懒得放图了,详情请参考一个大佬的博客(应有尽有)
https://blog.driverzeng.com/zenglaoshi/2315.html

ssl优化

server {
    listen 443 default_server;
    server_name blog.driverzeng.com driverzeng.com;
    ssl on;
    root /var/www/wordpress;
    index index.php index.html index.htm;
    ssl_certificate   ssl/215089466160853.pem;
    ssl_certificate_key  ssl/215089466160853.key;
    
    ssl_session_cache shared:SSL:10m; #在建立完ssl握手后如果断开连接,在session_timeout时间内再次连接,是不需要再次获取公钥建立握手的,可以服用之前的连接
    ssl_session_timeout 1440m;  #ssl连接断开后的超时时间
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #配置加密套接协议
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  #使用TLS版本协议
    ssl_prefer_server_ciphers on;  #nginx决定使用哪些协议与浏览器通信
posted @ 2020-06-03 21:10  元气少女郭德纲!!  阅读(716)  评论(0编辑  收藏  举报