首页 > 代码库 > LAMP架构实现网站动静分离及流行博客论坛安装实验

LAMP架构实现网站动静分离及流行博客论坛安装实验

动静分离能有效提升站点访问效率,此时apache工作在反向代理模式。PHP不在作为apache的模块。而是以独立服务器的方式运行。两者之间通过fcgi机制建立通讯。

技术分享


.安装DNS服务实现域名解析

1.安装bind

[root@www ~]# yum install bind

 

2.配置named主配置文件

[root@www ~]# vim /etc/named.conf

//

// named.conf

//

// Provided by Red Hat bind package toconfigure the ISC BIND named(8) DNS

// server as a caching only nameserver (asa localhost DNS resolver only).

//

// See /usr/share/doc/bind*/sample/ forexample named configuration files.

//

 

options {

//     listen-on port 53 { 127.0.0.1; };

//     listen-on-v6 port 53 { ::1; };

       directory      "/var/named";

       dump-file       "/var/named/data/cache_dump.db";

       statistics-file "/var/named/data/named_stats.txt";

       memstatistics-file "/var/named/data/named_mem_stats.txt";

//     allow-query     { localhost; };

       recursion yes;

 

//     dnssec-enable yes;

//     dnssec-validation yes;

//     dnssec-lookaside auto;

 

       /* Path to ISC DLV key */

       /*bindkeys-file "/etc/named.iscdlv.key";

 

       managed-keys-directory "/var/named/dynamic";

       */

};

 

logging {

       channel default_debug {

               file"data/named.run";

                severity dynamic;

       };

};

 

zone "." IN {

       type hint;

       file "named.ca";

};

 

include"/etc/named.rfc1912.zones";

include "/etc/named.root.key";

 

3.配置区域配置文件

[root@www ~]# vim /etc/named.rfc1912.zones
zone "stu31.com" IN {
       type master;
       file "stu31.com.zone";
};

 

 

4.配置区域解析库文件(正向)

[root@www ~]# vim /var/named/stu31.com.zone
$TTL 600
$ORIGIN stu31.com.
@      IN      SOA     ns1.stu31.com.  root@stu31.com (
                        20141219
                        1M
                        2H
                        3D
                        6M )
@      IN      NS      ns1
       IN      MX   5 mail
ns1    IN      A       172.16.31.20
www    IN      A       172.16.31.20
bbs    IN      A       172.16.31.20
pmp    IN      A       172.16.31.20
mail   IN      A       172.16.31.20
pop3   IN      CNAME   mail
iamp4  IN      CNAME   mail

更改权限及属主属组

[root@www ~]# chmod 640/var/named/stu31.com.zone
[root@www ~]# chown :named/var/named/stu31.com.zone

 

5.检查语法

[root@www ~]# named-checkconf
[root@www ~]# named-checkzone stu31.com/var/named/stu31.com.zone
zone stu31.com/IN: loaded serial 20141219
OK

 

6.启动named服务

[root@www ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                           [  OK  ]

 

将本地网络的DNS服务器地址指向172.16.31.20

[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS=172.16.31.20

 

测试完全区域:

[root@www ~]# dig -t axfr stu31.com @172.16.31.20
 
; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t axfr stu31.com@172.16.31.20
;; global options: +cmd
stu31.com.              600     IN     SOA     ns1.stu31.com.root\@stu31.com.stu31.com. 2014121903 60 7200 259200 360
stu31.com.              600     IN     NS      ns1.stu31.com.
stu31.com.              600     IN     MX      5 mail.stu31.com.
bbs.stu31.com.          600     IN     A       172.16.31.20
iamp4.stu31.com.        600    IN      CNAME   mail.stu31.com.
mail.stu31.com.         600    IN      A       172.16.31.20
ns1.stu31.com.          600     IN     A       172.16.31.20
pmp.stu31.com.          600     IN     A       172.16.31.20
pop3.stu31.com.         600    IN      CNAME   mail.stu31.com.
web.stu31.com.          600     IN     A       172.16.31.20
www.stu31.com.          600     IN     A       172.16.31.20
stu31.com.              600     IN     SOA     ns1.stu31.com.root\@stu31.com.stu31.com. 2014121903 60 7200 259200 360
;; Query time: 2 msec
;; SERVER: 172.16.31.20#53(172.16.31.20)
;; WHEN: Mon Dec 22 08:31:22 2014
;; XFR size: 12 records (messages 1, bytes304)

 

.源码安装httpd-2.4.10

 

1.安装aprapr-util

[root@www ~]# tar xf apr-1.5.0.tar.bz2
[root@www ~]# cd apr-1.5.0
[root@www apr-1.5.0]# ./configure--prefix=/usr/local/apr
[root@www apr-1.5.0]# make && makeinstall

 

[root@www apr-1.5.0]# cd ..
[root@www ~]# tar xf apr-util-1.5.3.tar.bz2
[root@www ~]# cd apr-util-1.5.3
[root@www apr-util-1.5.3]# ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@www apr-util-1.5.3]# make &&make install

 

设置aprapr-util成为系统环境变量

[root@www apr-util-1.5.3]# vim/etc/profile.d/apr.sh
exportPATH=/usr/local/apr/bin:/usr/local/apr-util/bin:$PATH

 

2.源码安装httpd

[root@www ~]# tar xf httpd-2.4.10.tar.bz2
[root@www ~]# cd httpd-2.4.10
[root@www httpd-2.4.10]# ./configure--prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-rewrite --with-z --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event

编译参数注释

--prefix=        #指定安装到/usr/local/apache路径下

--sysconfdir=    #指定配置文件安装到/etc/httpd24

--enable=so      #支持动态装卸载模块

--enable-ssl     #支持https加密传输

--enable-rewrite #支持URL重写

--enable-cgi     #支持cgi格式脚本

--with-z         #支持zlib压缩

--with-pcre      #支持扩展正则表达式

--with-apr       #指定apr安装位置

--with-apr-util  #指定apr-util安装位置

--enable-mpms-shared  #mpm三种模式以共享模块的方式编译进去

--enable-mpm     #httpd启动是默认是开启event模式

--enable-rewrite #支持反向代理

 

安装:

[root@www httpd-2.4.10]#make &&make install

 

3.创建httpd服务脚本(因为系统已安装httpd,我们需要安装到其他路径,服务脚本也一样要更改名称,与原httpd服务区分)

[root@www httpd-2.4.10]# cp /etc/rc.d/init.d/httpd httpd24

[root@www httpd-2.4.10]# vim httpd24

#!/bin/bash

#

# httpd        Startup script for the Apache HTTPServer

#

# chkconfig: - 85 15

# description: The Apache HTTP Server is anefficient and extensible  \

#              server implementing the currentHTTP standards.

# processname: httpd

# config: /etc/httpd/conf/httpd.conf

# config: /etc/sysconfig/httpd

# pidfile: /var/run/httpd/httpd.pid

#

### BEGIN INIT INFO

# Provides: httpd

# Required-Start: $local_fs $remote_fs$network $named

# Required-Stop: $local_fs $remote_fs$network

# Should-Start: distcache

# Short-Description: start and stop ApacheHTTP Server

# Description: The Apache HTTP Server is anextensible server

# implementing the current HTTP standards.

### END INIT INFO

 

# Source function library.

. /etc/rc.d/init.d/functions

 

#if [ -f /etc/sysconfig/httpd ]; then

#       . /etc/sysconfig/httpd

#fi

 

# Start httpd in the C locale by default.

HTTPD_LANG=${HTTPD_LANG-"C"}

 

# This will prevent initlog from swallowingup a pass-phrase prompt if

# mod_ssl needs a pass-phrase from theuser.

INITLOG_ARGS=""

 

# Set HTTPD=/usr/sbin/httpd.worker in/etc/sysconfig/httpd to use a server

# with the thread-based "worker"MPM; BE WARNED that some modules may not

# work correctly with a thread-based MPM;notably PHP will refuse to start.

 

# Path to the apachectl script, serverbinary, and short-form for messages.

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/httpd/httpd.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd}

RETVAL=0

STOP_TIMEOUT=${STOP_TIMEOUT-10}

 

# The semantics of these two functionsdiffer from the way apachectl does

# things -- attempting to start whilerunning is a failure, and shutdown

# when not running is also a failure.  So we just do it the way init scripts

# are expected to behave here.

start() {

       echo -n $"Starting $prog: "

       LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

       RETVAL=$?

       echo

       [ $RETVAL = 0 ] && touch ${lockfile}

       return $RETVAL

}

 

# When stopping httpd, a delay (of default10 second) is required

# before SIGKILLing the httpd parent; thisgives enough time for the

# httpd parent to SIGKILL any errantchildren.

stop() {

       echo -n $"Stopping $prog: "

       killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd

       RETVAL=$?

       echo

       [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}

}

reload() {

   echo -n $"Reloading $prog: "

   if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then

       RETVAL=6

       echo $"not reloading due to configuration syntax error"

       failure $"not reloading $httpd due to configuration syntaxerror"

   else

       # Force LSB behaviour from killproc

       LSB=1 killproc -p ${pidfile} $httpd -HUP

       RETVAL=$?

       if [ $RETVAL -eq 7 ]; then

           failure $"httpd shutdown"

       fi

   fi

   echo

}

 

# See how we were called.

case "$1" in

 start)

       start

       ;;

 stop)

       stop

       ;;

 status)

       status -p ${pidfile} $httpd

       RETVAL=$?

       ;;

 restart)

       stop

       start

       ;;

 condrestart|try-restart)

       if status -p ${pidfile} $httpd >&/dev/null; then

                stop

                start

       fi

        ;;

 force-reload|reload)

       reload

       ;;

 graceful|help|configtest|fullstatus)

       $apachectl $@

       RETVAL=$?

       ;;

  *)

       echo $"Usage: $prog{start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"

       RETVAL=2

esac

 

exit $RETVAL

复制脚本到服务脚本存放路径:

[root@www httpd-2.4.10]# cp httpd24  /etc/rc.d/init.d/httpd24

httpd24服务加入系统启动:

[root@www httpd-2.4.10]# chkconfig --listhttpd24
service httpd24 supports chkconfig, but isnot referenced in any runlevel (run ‘chkconfig --add httpd24‘)
[root@www httpd-2.4.10]# chkconfig --addhttpd24

 

4.启动httpd24服务

[root@www httpd-2.4.10]# service httpd24start
Starting httpd:                                           [  OK  ]

查看服务监听端口:

[root@www ~]# ss -tunl |grep 80
tcp   LISTEN     0      128                   :::80                   :::*

测试:

[root@www ~]# curl http://172.16.31.20
<html><body><h1>Itworks!</h1></body></html>

 httpd-2.4.10安装完毕


mysql主机本地网络的DNS服务器地址指向172.16.31.20

[root@mysql ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS=172.16.31.20

 

.编译安装MariaDB-10.0.10

1.解压二进制安装包,创建软链接:

[root@mysql ~]# tar xfmariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local
[root@mysql ~]# cd /usr/local/
[root@mysql local]# ln -smariadb-10.0.10-linux-x86_64/ mysql

 

2.创建mysql用户运行管理mysql服务

[root@mysql ~]# useradd -M -s /sbin/nologin-d /mydata/data -r mysql
[root@mysql ~]# id mysql
uid=496(mysql) gid=493(mysql)groups=493(mysql)

 

3.创建数据库数据存放磁盘目录

格式磁盘

[root@mysql ~]# echo -n -e"n\np\n3\n\n+10G\nt\n3\n8e\n\w\n" |fdisk /dev/sda
[root@mysql ~]# partx -a /dev/sda

 

创建LVM

[root@mysql ~]# pvcreate /dev/sda3
 Physical volume "/dev/sda3" successfully created
[root@mysql ~]# vgcreate myvg /dev/sda3
 Volume group "myvg" successfully created
[root@mysql ~]# lvcreate -L 10g -n mylvmyvg
 Logical volume "mylv" created
[root@mysql ~]# lvs
 LV   VG   Attr      LSize  Pool Origin Data%  Meta% Move Log Cpy%Sync Convert
 mylv myvg -wi-a----- 10.00g                                                   
 root vg0  -wi-ao---- 20.00g                                                    
 swap vg0  -wi-ao----  2.00g                                                   
 usr  vg0  -wi-ao---- 10.00g                                                   
 var  vg0  -wi-ao---- 20.00g

                                                

4.实现xfs文件系统支持并创建xfs文件系统

[root@mysql ~]# yum install xfsprogs
[root@mysql ~]# mkfs -t xfs /dev/myvg/mylv

 

5.实现文件系统自动挂载

[root@mysql ~]# mkdir /mydata
[root@mysql ~]# blkid /dev/myvg/mylv
/dev/myvg/mylv: UUID="04a307f3-6877-4142-b05e-60e4d5504b39"TYPE="xfs"
[root@mysql ~]# vim /etc/fstab
UUID="04a307f3-6877-4142-b05e-60e4d5504b39"  /mydata xfs defaults      0 0
[root@mysql ~]# mount -a

 

6.创建数据库数据文件在逻辑卷上的存放目录创建,更改目录属主属组

[root@mysql ~]# mkdir /mydata/data
[root@mysql ~]# chown mysql:mysql/mydata/data/

 

7.初始化安装MariaDB

[root@mysql mysql]#scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[root@mysql mysql]# ls /mydata/data/
aria_log.00000001  ib_logfile0 mysql-bin.000001  mysql-bin.state
aria_log_control   ib_logfile1 mysql-bin.000002 performance_schema
ibdata1            mysql        mysql-bin.index   test

 

8.mariadb配置文件创建及更改,有模版

安装系统的时候,/etc/路径下有一个my.cnf的,这里换个路径

[root@mysql mysql]# mkdir /etc/mysql
[root@mysql mysql]# cpsupport-files/my-huge.cnf /etc/mysql/my.cnf
[root@mysql mysql]# vim /etc/mysql/my.cnf
[mysqld]
datadir = /mydata/data
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
innodb_file_per_table = on
# Try number of CPU‘s*2 forthread_concurrency
thread_concurrency = 8

 注意:

data_dir = /mydata/data     #mysql数据文件存放目录

thread_concurrency = 8      #线程数:cpu核心*2

innodb_file_per_table = on  #每个innodb文件一个表空间



9.mariadb服务脚本创建

因为mariadbmysql是兼容的,直接命名成mysql好记忆

[root@mysql mysql]# cp  support-files/mysql.server  /etc/rc.d/init.d/mysqld
[root@mysql mysql]# chkconfig  --list  mysqld
service mysqld supports chkconfig, but isnot referenced in any runlevel (run ‘chkconfig --add mysqld‘)
[root@mysql mysql]# chkconfig  –add  mysqld

10.启动mysqld服务,测试启动

[root@mysql mysql]# service mysqld start
Starting MySQL.                                           [  OK  ]
[root@mysql mysql]# ss -tunl |grep 3306
tcp   LISTEN     0      128                    *:3306                  *:*

 

11.mysqld服务的一些设置

设置环境变量:

[root@mysql mysql]# vim/etc/profile.d/mysqld.sh
export PATH=/usr/local/mysql/bin:$PATH
[root@mysql mysql]# source/etc/profile.d/mysqld.sh

 

输出mysql的头文件至系统头文件路径/usr/include

[root@mysql mysql]# ln -sv/usr/local/mysql/include /usr/include/mysql

 

输出mysql的库文件给系统库查找路径,系统重新

[root@mysql mysql]# echo‘/usr/local/mysql/lib‘ > /etc/ld.so.conf.d/mysql.conf
[root@mysql mysql]# ldconfig

 

12.测试客户端启动:

[root@mysql mysql]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.0.10-MariaDB-log MariaDBServer
 
Copyright (c) 2000, 2014, Oracle, SkySQL Aband others.
 
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ toclear the current input statement.
 
MariaDB [(none)]> select version();
+---------------------+
| version()           |
+---------------------+
| 10.0.10-MariaDB-log |
+---------------------+
1 row in set (0.00 sec)

 

13.给数据库设置一个密码。

[root@mysql mysql]# mysqladmin -u rootpassword
New password:
Confirm new password:

 

MariaDB安装完毕

 

 

PHP主机本地网络的DNS服务器地址指向172.16.31.20

[root@php~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS=172.16.31.20

 

.编译安装PHP-5.4.26

1.源码包解压安装

[root@php~]# tar xf php-5.4.26.tar.bz2
[root@php~]# cd php-5.4.26
[root@phpphp-5.4.26]# ./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --with-gd --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts

 

参数说明:

--prefix=/usr/local/php    #指定php安装路径,如果不想使用php,可以之间删除

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

#如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQLMySQL开发包了。mysqlndphp 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了

--with-openssl             #支持openssl加密php页面

--enable-mbstring          #启用多字节字符串支持

--with-freetype-dir        #设定到FreeType 2的安装路径

--with-jpeg-dir            #支持jpg图片

--with-png-dir             #支持png图片

--with-zlib                #支持zlib压缩传输

--with-libxml-dir=/usr     #指定libxml2安装目录

--enable-xml               #支持xml扩展

--enable-sockets           #启用套接字支持

--enable-fpm               #启用FastCGI模式

--with-mcrypt              #支持mcrypt扩展

--with-config-file-path=/etc  #指定配置文件所在目录

--with-config-file-scan-dir=/etc/php.d         #设定在哪个路径下扫描配置文件

--with-bz2                #支持bzip2压缩格式

--enable-maintainer-zts   #支持apacheworkerevent这两个MPM

--with-gd                 #支持gd扩展


安装:

[root@phpphp-5.4.26]# make && make install

 

2.php提供配置文件:

[root@phpphp-5.4.26]# vim php.ini-production /etc/php.ini  

 

 

3.php提供Sys启动控制脚本,加入开机启动。

[root@phpphp-5.4.26]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@phpphp-5.4.26]# chmod +x /etc/rc.d/init.d/php-fpm
[root@phpphp-5.4.26]# chkconfig --list php-fpm
servicephp-fpm supports chkconfig, but is not referenced in any runlevel (run‘chkconfig --add php-fpm‘)
[root@phpphp-5.4.26]# chkconfig --add php-fpm
[root@phpphp-5.4.26]# chkconfig php-fpm on

 

4.php-fpm提供配置文件,编辑php-fpm配置文件,修改监听端口,默认是127.0.0.1

[root@phpphp-5.4.26]# cp /usr/local/php/etc/php-fpm.conf.default/usr/local/php/etc/php-fpm.conf
[root@phpphp-5.4.26]# vim /usr/local/php/etc/php-fpm.conf
pm.max_children= 50
pm.start_servers= 5
pm.min_spare_servers= 2
pm.max_spare_servers= 8
pid =/usr/local/php5/var/run/php-fpm.pid
listen =172.16.31.22:9000

 php服务器的ip地址是17.16.31.22,监听端口改为php服务器的9000端口哦!o(∩_∩)o 


5.启动php-fpm,检查php监听端口。

 

[root@phpphp-5.4.26]# service php-fpm start
Startingphp-fpm  done
[root@phpphp-5.4.26]# ss -tunl |grep 9000
tcp    LISTEN    0      128         172.16.31.22:9000                  *:*

 

6.环境变量设置:

[root@phpphp-5.4.26]# vim /etc/profile.d/php.sh
exportPATH=/usr/local/php/bin:$PATH
 
[root@phpphp-5.4.26]# source /etc/profile.d/php.sh
 
[root@phpphp-5.4.26]# php -v
PHP5.4.26 (cli) (built: Dec 21 2014 01:53:51)
Copyright(c) 1997-2014 The PHP Group
ZendEngine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

 

PHP部分配置完成。

 

 

.切换到httpd服务器,创建虚拟主机,结合php

 

1.编辑httpd主配置文件:

[root@www~]# vim /etc/httpd24/httpd.conf

a.Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现。

此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载

 

LoadModuleproxy_module modules/mod_proxy.so

LoadModuleproxy_fcgi_modulemodules/mod_proxy_fcgi.so

 

b.httpd支持php,添加下面两行,加入index.php

 

<IfModuledir_module>

    DirectoryIndex index.php index.html

</IfModule>

AddTypeapplication/x-compress .Z

AddTypeapplication/x-gzip .gz .tgz

AddTypeapplication/x-httpd-php .php

AddTypeapplication/x-httpd-php-source .phps

 

c.开启虚拟主机,默认是注释掉的。

Include/etc/httpd24/extra/httpd-vhosts.conf

 

 

2.编辑虚拟主机配置文件

[root@www~]# vim  /etc/httpd24/extra/httpd-vhosts.conf
<VirtualHost*:80>
    ServerAdmin www.stu31.com
    DocumentRoot "/web/vhosts/www1/wp"
    ServerName www.stu31.com
    ProxyRequests Off
    ProxyPassMatch  ^/(.*\.php)$ fcgi://172.16.31.22:9000/web/vhosts/www1/wp/$1
    ErrorLog"/web/vhosts/www1/logs/www-error_log"
    CustomLog"/web/vhosts/www1/logs/www-access_log" common
    <Directory"/web/vhosts/www1/wp">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

注意:

 ProxyRequests Off   #这里是关闭正向代理

 ProxyPassMatch  ^/(.*\.php)$ fcgi://172.16.31.22:9000/web/vhosts/www1/wp/$1

 #这里是客户端的以.php结尾的URL的请求都反向代理到PHP服务器运行


3.分别在httpd主机和php主机上创建网站目录:/web/vhosts/www1

[root@www~]# mkdir -pv /web/vhosts/www1/wp
mkdir:created directory `/web‘
mkdir:created directory `/web/vhosts‘
mkdir:created directory `/web/vhosts/www1‘
mkdir:created directory `/web/vhosts/www1/wp‘
 
[root@phpphp-5.4.26]# mkdir  -pv  /web/vhosts/www1/wp
mkdir:created directory `/web‘
mkdir:created directory `/web/vhosts‘
mkdir:created directory `/web/vhosts/www1‘
mkdir:created directory `/web/vhosts/www1/wp‘
 
[root@www~]# mkdir /web/vhosts/www1/logs

 


4.重启httpdphp服务,测试httpdphp结合。

[root@www~]# service  httpd24  restart
Stoppinghttpd:                                           [  OK  ]
Startinghttpd:                                           [  OK  ]
 
[root@php~]# service  php-fpm  restart
Gracefullyshutting down php-fpm . done
Startingphp-fpm  done

 

.在数据库添加库,授权,添加授权密码,安装wordpress

 

1.回到数据库主机,创建wordpress数据库wpdb

[root@mysqlmysql]# mysql  -u  root  -p
Enterpassword:
Welcometo the MariaDB monitor.  Commands endwith ; or \g.
YourMariaDB connection id is 6
Serverversion: 10.0.10-MariaDB-log MariaDB Server
 
Copyright(c) 2000, 2014, Oracle, SkySQL Ab and others.
 
Type‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
#创建wordpress数据库
MariaDB[(none)]> create schema wpdb;
Query OK,1 row affected (0.00 sec)
#设置wordpress权限
MariaDB[(none)]> grant all on wpdb.* to ‘wpadmin‘@‘172.16.%.%‘ identified by‘oracle‘;
Query OK,0 rows affected (0.00 sec)
#刷新权限
MariaDB[(none)]> flush privileges;
Query OK,0 rows affected (0.00 sec)
#推出
MariaDB[(none)]> \q
Bye

 

2.wpdb数据库创建好了,回到php主机

解压wordpress并将其移动到所在目录:

[root@php~]# tar xf wordpress-4.0.1-zh_CN.tar.gz

[root@php~]# mv wordpress/* /web/vhosts/www1/wp/

 

3.编辑wordpress配置文件,加入wpdb,授权帐号,密码等。

[root@php~]# cd /web/vhosts/www1/wp/
[root@phpwp]# cp wp-config-sample.php wp-config.php
[root@phpwp]# vim wp-config.php
/**WordPress数据库的名称 */
define(‘DB_NAME‘,‘wpdb‘);
 
/** MySQL数据库用户名 */
define(‘DB_USER‘,‘wpadmin‘);
 
/** MySQL数据库密码 */
define(‘DB_PASSWORD‘,‘oracle‘);
 
/** MySQL主机 */
define(‘DB_HOST‘,‘172.16.31.21‘);
 
/** 创建数据表时默认的文字编码 */
define(‘DB_CHARSET‘,‘utf8‘);
 
/** 数据库整理类型。如不确定请勿更改 */
define(‘DB_COLLATE‘,‘‘);

 

4.重新启动服务:

使用windowsXP客户端测试:将客户端ipdns设置好:

技术分享

安装完成后输入地址访问博客。

技术分享


这时候图片是显示不出来的,图片是静态的,需要放到httpd主机上。

我们先设置好博客:


 

技术分享

技术分享


登录博客:

技术分享

 

5.php主机wordpress目录scphttpd主机。

[root@php~]# scp -r /web/vhosts/www1/wp/ root@172.16.31.20:/web/vhosts/www1/wp/

 

再次刷新页面。

技术分享

 

 

.接下来安装Discuz

本地DNS服务器添加两个域名:

pmp.stu31.com

bbs.stu31.com

上面的DNS服务已经配置好了。

 

1.回到httpd主机,创建想对应的网站根目录,创建两个虚拟主机。

[root@www~]# vim /etc/httpd24/extra/httpd-vhosts.conf
<VirtualHost*:80>
    ServerAdmin admin.stu31.com
    DocumentRoot"/web/vhosts/www1/pmp"
    ServerName pmp.stu31.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.31.22:9000/web/vhosts/www1/pmp/$1
    ErrorLog"/web/vhosts/www1/logs/pmp-error_log"
    CustomLog"/web/vhosts/www1/logs/pmp-access_log" common
    <Directory "/web/vhosts/www1/pmp">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost*:80>
    ServerAdmin bbs.stu31.com
    DocumentRoot"/web/vhosts/www1/bbs"
    ServerName bbs.stu31.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.31.22:9000/web/vhosts/www1/bbs/$1
    ErrorLog"/web/vhosts/www1/logs/bbs-error_log"
    CustomLog"/web/vhosts/www1/logs/bbs-access_log" common
    <Directory"/web/vhosts/www1/bbs">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

 

 

2.httpd主机和php主机上创建pmpbbs两个网站目录

[root@www~]# mkdir /web/vhosts/www1/{pmp,bbs} -pv
mkdir:created directory `/web/vhosts/www1/pmp‘
mkdir:created directory `/web/vhosts/www1/bbs‘
 
[root@php~]# mkdir /web/vhosts/www1/{pmp,bbs} -pv
mkdir:created directory `/web/vhosts/www1/pmp‘
mkdir:created directory `/web/vhosts/www1/bbs‘

 

3.重启httpd服务,或者重新载入配置文件。

[root@www~]# service httpd24 restart
Stoppinghttpd:                                           [  OK  ]
Startinghttpd:                                           [  OK  ]

 

 

4.安装Discuz论坛

[root@php~]# unzip Discuz_X3.2_SC_UTF8.zip

将解压出来的三个目录移动到/var/www/php/Discuz目录下。

[root@php~]# mv readme/ upload/ utility/ /web/vhosts/www1/bbs/

[root@php~]# ls /web/vhosts/www1/bbs/

readme  upload utility

 

scp一份到httpd主机。

[root@php~]# cd /web/vhosts/www1/bbs/
[root@phpbbs]# scp -r readme/ upload/ utility/ root@172.16.31.20:/web/vhosts/www1/bbs/

httpd主机检查:

[root@www~]# ls /web/vhosts/www1/bbs/
readme  upload utility

 

5.切换到数据库主机,添加Discuz论坛的管理帐号,密码,库。

 

[root@mysqlmysql]# mysql -u root -p
Enterpassword:
Welcometo the MariaDB monitor.  Commands endwith ; or \g.
YourMariaDB connection id is 55
Serverversion: 10.0.10-MariaDB-log MariaDB Server
 
Copyright(c) 2000, 2014, Oracle, SkySQL Ab and others.
 
Type‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
 
MariaDB[(none)]> create schema bbsdb;
Query OK,1 row affected (0.00 sec)
 
MariaDB[(none)]> grant all on bbsdb.* to ‘bbsadmin‘@‘172.16.%.%‘ identified by‘oracle‘;
Query OK,0 rows affected (0.00 sec)
 
MariaDB[(none)]> flush privileges;
Query OK,0 rows affected (0.00 sec)
 
MariaDB[(none)]> show databases;
+--------------------+
|Database           |
+--------------------+
|bbsdb              |
|information_schema |
|mysql              |
|performance_schema |
|test               |
|wpdb               |
+--------------------+
6 rows inset (0.00 sec)
 
MariaDB[(none)]> \q
Bye

 

打开浏览器,输入对应域名地址。

技术分享

同意继续:

全新安装

技术分享

继续安装:

技术分享

 

6.出来一大推权限问题,回到php主机,给上面这些文件可写权限。

[root@phpbbs]# chmod -R go+w /web/vhosts/www1/bbs/upload/config/

[root@phpbbs]# chmod -R go+w /web/vhosts/www1/bbs/upload/data/

[root@phpbbs]# chmod -R go+w /web/vhosts/www1/bbs/upload/uc_*

 

继续安装

技术分享

 


输入上面创建的针对bbs的数据库服务器ip地址,数据库名称和密码以及新建管理员用户和密码:

技术分享

 

安装完成

技术分享

安装完成访问:注意地址哦!o(∩_∩)o

技术分享

 

这时候还是图片出不来,需要再次将readme upload  utility拷贝到httpd主机。

[root@phpbbs]# scp -r readme/ upload/ utility/ root@172.16.31.20:/web/vhosts/www1/bbs/

 

再次刷新下页面,就正常了。

技术分享

 

.接下来开始安装phpMyadmin

 

1.虚拟主机已经创建完成,phpMyAdmin不需要在数据库中加入库,账户密码

解压程序包

[root@php~]# unzip phpMyAdmin-4.3.2-all-languages.zip

移动到特定网站目录:

[root@php~]# mv phpMyAdmin-4.3.2-all-languages/* /web/vhosts/www1/pmp/      

创建配置文件:

[root@php~]# cd /web/vhosts/www1/pmp/

[root@phppmp]# cp config.sample.inc.php config.inc.php

 

2.设置配置文件:

设置随机数,为了安全吧!

[root@phppmp]# openssl rand -hex 8 | md5sum

80912828243ccf7033298368628ad07d  -

[root@phppmp]# vim config.inc.php

$cfg[‘blowfish_secret‘]= ‘80912828243ccf7033298368628ad07d‘; /* YOU MUST FILL IN THIS FOR COOKIE AUTH!*/ 

#将数据库IP更改为数据库地址:

$cfg[‘Servers‘][$i][‘host‘]= ‘172.16.31.21‘;

 

 

3.同样的,将phpMyAdmin数据复制一份到httpd主机。

[root@php~]# scp -r /web/vhosts/www1/pmp/* root@172.16.31.20:/web/vhosts/www1/pmp/

安装phpMyamin完成!!!

 

.phpMyAdmin传输是明文的,不是很可靠,现在给转换成以https加密传输访问。

 

1.找到httpd-ssl.conf的配置,默认是注释掉的。

开启模块及开启ssl配置文件:

[root@www~]# vim /etc/httpd24/httpd.conf
LoadModulesocache_shmcb_modulemodules/mod_socache_shmcb.so
LoadModulessl_module modules/mod_ssl.so
# Secure(SSL/TLS) connections
Include/etc/httpd24/extra/httpd-ssl.conf

 

 

2.现在把数据库的主机做为CA服务器。

a.生成密钥。

[root@mysqlCA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
GeneratingRSA private key, 2048 bit long modulus
....+++
............................................+++
e is65537 (0x10001)

 

b.生成自签署证书

[root@mysqlCA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
You areabout to be asked to enter information that will be incorporated
into yourcertificate request.
What youare about to enter is what is called a Distinguished Name or a DN.
There arequite a few fields but you can leave some blank
For somefields there will be a default value,
If youenter ‘.‘, the field will be left blank.
-----
CountryName (2 letter code) [XX]:CN
State orProvince Name (full name) []:HA
LocalityName (eg, city) [Default City]:ZZ
OrganizationName (eg, company) [Default Company Ltd]:stu31
OrganizationalUnit Name (eg, section) []:ops
CommonName (eg, your name or your server‘s hostname) []:mysql.stu31.com
EmailAddress []:mysql@stu31.com

 

c.创建索引库及序列号文件

[root@mysqlCA]# touch index.txt serial

[root@mysqlCA]# echo 01 >serial

 

 

3.httpd主机设置证书

a.生成密钥

[root@www~]# cd /etc/httpd24/
[root@wwwhttpd24]# ls
extra  httpd.conf magic  mime.types  original
[root@wwwhttpd24]# mkdir certs
[root@wwwhttpd24]# cd certs
[root@wwwcerts]# (umask 077 ; openssl genrsa -out httpd.key 2048)
GeneratingRSA private key, 2048 bit long modulus
...........................................................................................................................................................................................................................................................................................................................+++
.............................................+++
e is65537 (0x10001)

 

b.生成证书签署申请

[root@wwwcerts]# openssl req -new -key httpd.key -out httpd.csr 
You areabout to be asked to enter information that will be incorporated
into yourcertificate request.
What youare about to enter is what is called a Distinguished Name or a DN.
There arequite a few fields but you can leave some blank
For somefields there will be a default value,
If youenter ‘.‘, the field will be left blank.
-----
CountryName (2 letter code) [XX]:CN
State orProvince Name (full name) []:HA
LocalityName (eg, city) [Default City]:ZZ
OrganizationName (eg, company) [Default Company Ltd]:stu31
OrganizationalUnit Name (eg, section) []:ops
CommonName (eg, your name or your server‘s hostname) []:pmp.stu31.com                   
EmailAddress []:pmp@stu31.com
 
Pleaseenter the following ‘extra‘ attributes
to besent with your certificate request
Achallenge password []:
Anoptional company name []:

 

c.https.csr复制到证书服务器主机。

[root@wwwcerts]# scp httpd.csr root@172.16.31.21:/etc/pki/CA
root@172.16.31.21‘spassword:
httpd.csr                                      100%1029     1.0KB/s   00:00

 

 

4.证书服务器签署证书

[root@mysqlCA]# openssl ca -in httpd.csr -out https.crt -days 3650
Usingconfiguration from /etc/pki/tls/openssl.cnf
Checkthat the request matches the signature
Signatureok
CertificateDetails:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Dec 20 20:20:17 2014GMT
            Not After : Dec 17 20:20:17 2024GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HA
            organizationName          = stu31
            organizationalUnitName    = ops
            commonName                = pmp.stu31.com
            emailAddress              = pmp@stu31.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
               81:56:C1:E9:31:EB:31:40:1C:A1:FE:19:6F:A8:14:59:AF:9B:80:97
            X509v3 Authority Key Identifier:
                keyid:3A:65:60:42:6A:F7:C6:7B:C5:60:29:DC:BF:F8:39:AD:4F:54:52:01
 
Certificateis to be certified until Dec 17 20:20:17 2024 GMT (3650 days)
Sign thecertificate? [y/n]:y
 
 
1 out of1 certificate requests certified, commit? [y/n]y
Write outdatabase with 1 new entries
Data BaseUpdated

 

5.签署完成后还有将证书发送到http主机。

 

[root@mysqlCA]# scp https.crt root@172.16.31.20:/etc/httpd24/certs/
Theauthenticity of host ‘172.16.31.20 (172.16.31.20)‘ can‘t be established.
RSA keyfingerprint is b8:a4:da:03:91:67:32:2f:d5:72:0b:77:3b:6f:ba:30.
Are yousure you want to continue connecting (yes/no)? yes
Warning:Permanently added ‘172.16.31.20‘ (RSA) to the list of known hosts.
root@172.16.31.20‘spassword:
https.crt                                      100%4555     4.5KB/s   00:00

 

 

6.编辑httpd-ssl.conf,定义主机,指定密钥文件等。

[root@wwwhttpd24]# vim extra/httpd-ssl.conf
<VirtualHost_default_:443>
DocumentRoot"/web/vhosts/www1/pmp"
ServerNamebbs.stu31.com:443
ProxyRequestsOff
ProxyPassMatch^/(.*\.php)$ fcgi://172.16.31.22:9000/web/vhosts/www1/pmp/$1
       <Directory"/web/vhosts/www1/pmp">
               Options none
               AllowOverride none
               Require all granted
       </Directory>
ErrorLog"/web/vhosts/www1/logs/https-error_log"
TransferLog"/web/vhosts/www1/logs/https-access_log"
 
SSLEngineon
SSLCertificateFile"/etc/httpd24/certs/https.crt"
SSLCertificateKeyFile"/etc/httpd24/certs/httpd.key"

 

重启httpd服务。

 

7.CA服务器里的证书拷贝到windowsXP里面安装测试

拷贝的是CA服务器的证书哦!别拷贝错误啦!

技术分享

安装证书在客户端:

技术分享

 

安装完成后进行测试:

技术分享

 

这样phpMyadmin加密 传输就完成啦!!!!!o(∩_∩)o 


使用ab测试网站速度:

先缓存一些:

[root@www~]# ab -c 10 -n 100 http://pmp.stu31.com/index.php
This isApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensedto The Apache Software Foundation, http://www.apache.org/
 
Benchmarkingpmp.stu31.com (be patient).....done
 
 
ServerSoftware:        Apache/2.4.10
ServerHostname:        pmp.stu31.com
ServerPort:            80
 
DocumentPath:          /index.php
DocumentLength:        8993 bytes
 
ConcurrencyLevel:      10
Timetaken for tests:   5.495 seconds
Completerequests:      100
Failedrequests:        0
Totaltransferred:      1026300 bytes
HTMLtransferred:       899300 bytes
Requestsper second:    18.20 [#/sec] (mean)
#我们注重的是平均每秒处理的请求数!!!才18.2个请求每秒!!!
Time perrequest:       549.503 [ms] (mean)
Time perrequest:       54.950 [ms] (mean, acrossall concurrent requests)
Transferrate:          182.39 [Kbytes/sec]received
 
ConnectionTimes (ms)
              min  mean[+/-sd] median   max
Connect:        0   0   1.6      0      9
Processing:   271 537 149.9    538    1502
Waiting:      263 502 146.9    497    1462
Total:        271 537 150.1    538    1503
 
Percentageof the requests served within a certain time (ms)
  50%   538
  66%   556
  75%   572
  80%   586
  90%   703
  95%   728
  98%   849
  99%  1503
 100%  1503 (longest request)

再进行大型并发测试:

[root@www~]# ab -c 100 -n 1000 http://pmp.stu31.com/index.php
This isApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensedto The Apache Software Foundation, http://www.apache.org/
 
Benchmarkingpmp.stu31.com (be patient)
Completed100 requests
Completed200 requests
Completed300 requests
Completed400 requests
Completed500 requests
Completed600 requests
Completed700 requests
Completed800 requests
Completed900 requests
Completed1000 requests
Finished1000 requests
 
 
ServerSoftware:        Apache/2.4.10
ServerHostname:        pmp.stu31.com
ServerPort:            80
 
DocumentPath:          /index.php
DocumentLength:        8993 bytes
 
ConcurrencyLevel:      100
Timetaken for tests:   56.817 seconds
Completerequests:      1000
Failedrequests:        0
Totaltransferred:      10263000 bytes
HTMLtransferred:       8993000 bytes
Requestsper second:    17.60 [#/sec] (mean)
Time perrequest:       5681.702 [ms] (mean)
Time perrequest:       56.817 [ms] (mean, acrossall concurrent requests)
Transferrate:          176.40 [Kbytes/sec]received
 
ConnectionTimes (ms)
              min  mean[+/-sd] median   max
Connect:        0   4  15.0      0     81
Processing:   473 5505 979.8   5709   6616
Waiting:      441 5363 953.4   5547   6444
Total:        482 5510 973.2   5711   6616
 
Percentageof the requests served within a certain time (ms)
  50%  5711
  66%  5794
  75%  5870
  80%  5936
  90%  6100
  95%  6209
  98%  6404
  99%  6456
 100%  6616 (longest request)

 

.安装xcache实现加速

1.解压安装xcache

使用phpize附加模块哦!

什么时候需要用到 phpize 呢?当我们需要再加些模块,又不想重新编译php,这些我们就可以用phpize了。

[root@php~]# tar xf xcache-3.1.0.tar.bz2
[root@php~]# cd xcache-3.1.0
[root@phpxcache-3.1.0]# /usr/local/php/bin/phpize --clean && phpize
Cleaning..
Configuringfor:
PHP ApiVersion:         20100412
ZendModule Api No:      20100525
ZendExtension Api No:   220100525
[root@phpxcache-3.1.0]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@phpxcache-3.1.0]# make && make install

注意这条安装完成后提示的信息:

Installingshared extensions:    /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

 

2.将其写入xcache.ini文件中:

先将xcache.ini复制到/etc/php.d/目录下:

[root@phpxcache-3.1.0]# cp xcache.ini /etc/php.d/

添加上面安装完成后提示的信息进去:

[root@php ~]# vim /etc/php.d/xcache.ini 

extension= /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so

 

重启php服务器:

[root@php~]# service php-fpm restart
Gracefullyshutting down php-fpm . done
Startingphp-fpm  done

 

3.再次pmp.stu31.com进行了测试:

 

[root@www ~]# ab -c 100 -n 1000 http://pmp.stu31.com/index.php
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking pmp.stu31.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:        Apache/2.4.10
Server Hostname:        pmp.stu31.com
Server Port:            80
Document Path:          /index.php
Document Length:        8993 bytes
Concurrency Level:      100
Time taken for tests:   17.669 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      10232000 bytes
HTML transferred:       8993000 bytes
Requests per second:    56.60 [#/sec] (mean)
#使用xcache后对网站的加速是3倍左右哦!!!结果在此!!
Time per request:       1766.879 [ms] (mean)
Time per request:       17.669 [ms] (mean, across all concurrent requests)
Transfer rate:          565.53 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    5  17.9      0     104
Processing:   180 1701 301.1   1775    2159
Waiting:      159 1653 293.2   1721    2057
Total:        187 1706 293.7   1777    2159
Percentage of the requests served within a certain time (ms)
  50%   1777
  66%   1814
  75%   1838
  80%   1849
  90%   1875
  95%   1897
  98%   1938
  99%   1964
 100%   2159 (longest request)

 

到这里,LAMP的动静分离实验正式完成了!中途可能会出现错误,如果你出现错误可以给我说说哦!

 


本文出自 “龙之守护” 博客,请务必保留此出处http://sohudrgon.blog.51cto.com/3088108/1593529

LAMP架构实现网站动静分离及流行博客论坛安装实验