Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解

(Nginx Apache MySQL Redis)

楓城浪子原创,转载请标明出处!

更多技术博文请见个人博客:https://fengchenglangzi.000webhostapp.com

微信bh19890922

QQ445718526、490425557

一、实验简述

1.1 基本环境介绍

以下实验使用5台虚拟机,均为centos 6.8,发布Discuz论坛。

Nginx(192.168.8.134)

LAP-1(192.168.8.135)

LAP-2(192.168.8.136)

MYSQL-Master(192.168.8.137)

MYSQL-Slave(192.168.8.138)

Redis-Master(192.168.8.139)

Redis-Slave(192.168.8.140)

1.2 拓扑结构

二、环境搭建

2.1 源码安装LAP

2.1.1 编译安装Apache

LAP(Linux Apache PHP)使用源码安装,当然亦可YUM安装

1

[root@localhost ~]# yum install apr-devel apr-util-devel -y

注:安装编译Apache需要的依赖包,若没有gcc 请安装gcc gcc-c++

1
2
3
4
5
6
7
8
9
10
11

[root@localhost ~]# cd /usr/local/src/

[root@localhost src]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.34.tar.gz

[root@localhost src]# tar zxf httpd-2.2.34.tar.gz

[root@localhost src]# cd httpd-2.2.34

[root@localhost httpd-2.2.34]# ./configure --prefix=/usr/local/apache2/ --enable-so --enable-rewrite --enable-module=so

[root@localhost httpd-2.2.34]# make -j8 && make install -j8

注:下载apache源码包进行编译安装,其中–enable-module=so参数一定要加上,不然后面不能进行模块添加

2.1.2 编译安装PHP

1

[root@localhost php-5.3.28]# yum -y install libxml2 libxml2-devel

注:安装PHP依赖包,不然编译会报错

1
2
3
4
5
6
7
8
9
10
11
12
13

[root@localhost src]# wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2

[root@localhost src]# tar jxf php-5.3.28.tar.bz2

[root@localhost src]# cd php-5.3.28

[root@localhost php-5.3.28]# ./configure --prefix=/usr/local/php5 \

--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \

--with-apxs2=/usr/local/apache2/bin/apxs

[root@localhost php-5.3.28]# make -j8 && make install -j8

注:编译安装PHP

1

[root@localhost php-5.3.28]# cp php.ini-production /usr/local/php5/lib/php.ini

注:把安装包中的php.ini-production复制到/usr/local/php5/lib/并重命名为php.ini

2.1.3 集成Apache与PHP

1
2

[root@localhost php-5.3.28]# sed -i 's/DirectoryIndex/DirectoryIndex index.php/g' /usr/local/apache2/conf/httpd.conf
[root@localhost php-5.3.28]# sed -i '/LoadModule php5_module/a\AddType application/x-httpd-php .php\nAddType application/x-httpd-php-source .phps' /usr/local/apache2/conf/httpd.conf

注:默认情况下安装PHP后会默认生产LoadModule php5_module modules/libphp5.so这句话,所以需要在此局下面添加

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

1
2
3
4
5
6
7
8
9
10
11

[root@localhost php-5.3.28]# cd /usr/local/apache2/htdocs/

[root@localhost htdocs]# echo -e "" > index.php

[root@localhost htdocs]# cat index.php

<?php
phpinfo();
?>

[root@localhost htdocs]# ../bin/apachectl restart

注:在发布目录新加index.php 并加入以上代码,刷新浏览器,出现如下图界面,说明apache与php集成成功

2.2 MySQL主从搭建

2.2.1 Mysql主从原理


MySQL 主从复制原理剖析

Mysql主从同步其实是一个异步复制的过程,要实现复制首先需要在master上开启bin-log日志功能,整个过程需要开启3个线程,分别是Master开启IO线程,slave开启IO线程和SQL线程。

  1. 在从服务器执行slave start,从服务器上IO线程会通过授权的用户连接上master,并请求master从指定的文件和位置之后发送bin-log日志内容。

  2. Master服务器接收到来自slave服务器的IO线程的请求后,master服务器上的IO线程根据slave服务器发送的指定bin-log日志之后的内容,然后返回给slave端的IO线程。(返回的信息中除了bin-log日志内容外,还有本次返回日志内容后在master服务器端的新的binlog文件名以及在binlog中的下一个指定更新位置。)

  3. Slave的IO线程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master.info文件中,以便在下一次读取的时候能够清楚的告诉Master”我需要从某个bin-log的哪 个位置开始往后的日志内容,请发给我”;

  4. Slave的Sql线程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

2.2.2安装mysql
  1. 安装mysql环境,master和slave都执行

1

[root@localhost ~]# yum install mysql-server mysql-devel mysql-libs –y

  1. 启动mysql数据库,此时数据会自动初始化

  2. 1
    2
    3

    div>li>
    ol>
    [root@localhost ~]# service mysqld restart

    1

    [root@localhost ~]# vim /etc/my.cnf

    在文件[mysqld]中添加如下内容:

    log-bin=mysql-bin 开启binlog功能

    server-id = 137 指定服务器的id,通常id指定为ip地址的最后一位

    若需要指定数据目录请修改datadir=/var/lib/mysql,创建目录后需要给mysql授权,最好是把用户和组指定给mysql,本实验不指定。

    1

    mysql&gt; grant all on *.* to slave@"%" identified by "123456";

    其中all代表所有权限

    %代表除本机外所有ip的主机均可连接,若本机连接需要把%改为localhost

    此处的用户名slave亦可在安装discuz时使用,当然也可以针对数据库单独创建

    1

    mysql&gt; flush privileges;

    刷新权限

    在master上执行

    1

    mysql&gt; show master status;

    记录file及position

    1

    mysql&gt; change master to master_host='192.168.8.137',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;

    注意以上必须按照实际填写

    1

    mysql&gt; slave start;

    1

    mysql&gt; show slave status\G

    如果如下两行为yes,代表主从同步成功。

    1

    mysql&gt; create database discuz;

    注:创建discuz数据库

    1. master修改my.cnf文件

    2. 在master上面给slave授权

    3. slave修改my.cnf文件

    4. 查看mysql-bin及Position

    5. 重启master及slave

    6. 在slave上查看同步状态

    7. 启动slave

    8. 在slave服务器指定master IP和同步的mysql-bin及pos点