Linux網絡服務-LAMP之Php基於Apache的模塊實現

一、概述    

       首先,如標題所示我接下來的實驗就是搭建一個LAMP平臺然後實現一個Blog站點的實現,那"Php基於Apache的模塊實現"這又是神馬意思呢,我們知道Apache與Php的結合方式有常見的三種:基於module、基於CGI、基於Fast-CGI;

       基於Module,指的就是Php在Apache編譯時就直接編譯成模塊,以模塊化的方式進行工作的,而當Apache需要解析Apache腳本時,它將直接調用這個模塊的功能就可以了,它作爲Apache的一個子進程來工作,而無需啓動一個單獨的進程,這裏的前提就是Apache必須先裝載Php模塊;

       基於CGI,Common Gateway Interface通用網關接口,它是一種特殊的協議;例如客戶端請求了資源,httpd本身是無法解析腳本的,它也不可能將腳本執行以後返還給客戶端,因此如果我們想在服務器端當用戶請求一些特定資源時,將這種資源不是直接返還給客戶端,而是讓這個資源在服務器上先執行,把結果交給httpd,最後再回復給客戶端,於是再詳細點說就是:httpd本身不具備任何資源的解析功能,那就只能讓httpd基於CGI協議將去調用客戶請求的資源相對應的需要執行程序所擁有的執行環境來解析(例如這裏提到的Php腳本資源),環境再將執行的結果返還給httpd,最後再將結果響應給客戶端;所以CGI是能讓我們的httpd服務能跟某一個應用程序執行環境進行通信並且能從這個環境獲取執行結果的協議;所有能夠基於CGI協議工作的協議都能夠用作開發動態網站;但是CGI協議過於粗糙和簡陋並且基於這種模式通信時它要求後端應用程序爲了到達某種目的、獲取某種資源必須要以管理員的身份去運行,這樣一來就又有安全隱患了;於是基於CGI這樣的模式逐漸淘汰了....所以現在有很多動態網站與前端通信時都不再基於CGI,比如Php的SAPI機制、Python的UWSGI的機制等等...它們使得這些腳本在執行時無需使用系統資源權限,而是在自己的程序環境中運行,對某些目錄有操作權限就足夠了;

       基於Fast-CGI,上面我已經提到了基於模塊時Php的工作模式,如果httpd啓動的進程都運行Php代碼,所以它會啓動多個Php進程,對於httpd來說這些進程以後還需要關閉、收回、管理等等這樣就變得非常的麻煩了,於是我爲什麼不讓Php自己運行爲一個服務,類似於httpd的prefork工作模式一樣:啓動時生成多少個子進程、最大空閒進程、最小空閒進程等等,當httpd需要運行Php代碼時基於套接字連接Php這個服務所監聽的端口上,將Php代碼發送給Php由它其中的一個進程響應並解釋運行後將結果返回給httpd,基於這樣的機制,Php和httpd通信就需要一種協議了,這種協議就是Fast-CGI,於是這樣一來Php作爲一個單獨的服務可以運行了,那我們就可以將它獨立出來運行在不同的主機上了;  

他們三者的如何結合的呢?請看下圖:
wKioL1MxZhiTQWYvAADtucQKVbk969.jpg

1、apache是服務器基礎,php和mysql都需要他來協調工作,注意,客戶端的請求只是對Apache,並且Apache不會和MYSQL之間直接通信,而是基於某個應用程序連接到數據庫

2、php是腳本解釋語言,負責httpd服務器發過來需要解析Php腳本的功能,如果不用php那麼apache出來的東西就只是靜態的內容,完成解析後結果將返回httpd,最後返回給客戶端,後端的話Php通過一個mysql_connect於MYSQL建連接關係

3、mysql是數據庫,完全可以單獨使用,但是和另外兩個一起,則是由php代碼調用mysql接口,而Php就負責解釋php代碼,讓他能真正地實現對mysql的調用

這三者的關係放在這裏,大概可以這樣理解成這樣

上圖只是說明三者之間的關係,但是我要基於php模塊來搭建的話就將HTTP與PHP整合到一臺主機上了,讓MYSQL獨立出來,下面是拓撲圖:

wKiom1MuiY3z8HVVAAEIDor8JFQ427.jpg

現在稍微理清了下思緒,我們開始來進行實驗吧,

一、實驗說明:

1、啓動兩臺Centos6.5_X86-64系統的虛擬機,分別作爲HTTP+PHP(fastcgi)、MYSQL;

       HTTP+PHP(fastcgi) IP -> 172.16.41.1

                ServerName -> www.maoqiu.com

       MYSQ  IP -> 172.16.41.2

                ServerName  ->  mysql.maoqiu.com

2、Client使用我的Windows;並在hosts文件中填入httpd服務器的IP及主機名對應關係;

       172.16.41.1     www.maoqiu.com

實驗準備:

1.因爲要用到yum,所以請事先確保好yum源的配置是否已經妥當

2.開發工具的支持

[root@www ~]# yum groupinstall -y "Development tools"
[root@www ~]# yum groupinstall -y "Server Platform Development"

實驗步驟:

二、源碼編譯安裝httpd-2.4.9

1、安裝httpd依賴包pcre-devel(yum安裝即可)

[root@www ~]# yum install -y pcre-devel

2、解壓已獲取到的httpd-2.4.9,apr,apr-util軟件包,並安裝:

#→解壓安裝apr
[root@www ~]#tar -xf apr-1.5.0.tar.bz2 -C /usr/src/
[root@www ~]# cd /usr/src/apr-1.5.0
[root@www apr-1.5.0]# ./configure \
> --prefix=/usr/local/apr     #→指定其安裝位置
[root@www apr-1.5.0]# make && make install
 #→解壓安裝apr-util
[root@www ~]#tar -xf apr-util-1.5.3.tar.bz2 -C /usr/src/
[root@www ~]# cd /usr/src/apr-util-1.5.3
[root@www apr-util-1.5.3]# ./configure \
> --prefix=/usr/local/apr-util \    #→指定其安裝位置
> --with-apr=/usr/local/apr     #→指定apr安裝在哪個位置的
[root@www apr-util-1.5.3]# make && make install
 #→解壓安裝httpd
[root@www ~]#tar -xf httpd-2.4.9.tar.bz2 -C /usr/src
[root@www ~]# cd /usr/src/httpd-2.4.9
[root@www httpd-2.4.9]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=most --with-mpm=event
說明
--prefix=/usr/local/apache2  #→指定其安裝位置
--sysconfdir=/etc/httpd2  #→指定配置文件安裝位置
--enable-so   #→啓用基於DSO的方式動態加載模塊
--enable-ssl   #→啓用基於https協議的功能
--enable-cgi   #→啓用基於cgi協議的功能
--enable-rewrite  #→啓用支持URL重寫的功能
--with-zlib   #→指定支持在互聯網上發送數據報文時,通用的壓縮庫的API
--with-pcre  #→指定支持poll的cgi
--with-apr=/usr/local/apr    #→指定par的安裝路徑
--with-apr-util=/usr/local/apr-util/   #→指定par-util的安裝路徑
--enable-modules=most   #→啓用大多數常用的模塊
--enable-mpms-shared=all   #→啓用加載所有的mpm模塊
--with-mpm=event     #→指定接下來httpd的工作模式是event
[root@www httpd-2.4.9]# make && make install

補充:
       (1)構建MPM爲靜態模塊
       在全部平臺中,MPM都可以構建爲靜態模塊。在構建時選擇一種MPM,鏈接到服務器中。如果要改變MPM,必須重新構建。爲了使用指定的MPM,請在執行configure腳本 時,使用參數 --with-mpm=NAME。NAME是指定的MPM名稱。編譯完成後,可以使用 ./httpd -l 來確定選擇的MPM。 此命令會列出編譯到服務器程序中的所有模塊,包括 MPM.
       (2)構建 MPM 爲動態模塊
       在Unix或類似平臺中,MPM可以構建爲動態模塊,與其它動態模塊一樣在運行時加載。 構建 MPM 爲動態模塊允許通過修改LoadModule指令內容來改變MPM,而不用重新
構建服務器程序。在執行configure腳本時,使用--enable-mpms-shared選項即可啓用此特性。當給出的參數爲all時,所有此平臺支持的MPM模塊都會被安裝。還可以在參數中給出模塊列表。默認MPM,可以自動選擇或者在執行configure腳本時通過--with-mpm選項來指定,然後出現在生成的服務器配置文件中。編輯LoadModule指令內容可以選擇不同的MPM.

3、修改httpd的主配置文件,設置其Pid文件的路徑

#編輯/etc/httpd/httpd.conf,添加如下行即可:
PidFile  "/var/run/httpd.pid"

4、提供SysV服務腳本/etc/rc.d/init.d/httpd,內容如下:

#此服務腳本我們複製以前系統自帶的httpd服務的腳本,然後做下修改
[root@www httpd]# cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd2
[root@www httpd]# vim /etc/rc.d/init.d/httpd2
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/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 Apache HTTP Server
# Description: The Apache HTTP Server is an extensible 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"}
INITLOG_ARGS=""
apachectl=/usr/local/apache2/bin/apachectl #→改變一下我們編譯安裝後的程序路徑
httpd=${HTTPD-/usr/local/apache2/bin/httpd} #→改變一下我們編譯安裝後的程序路徑
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
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 syntax error"
    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]# chmod +x /etc/rc.d/init.d/httpd2
[root@www httpd]# chkconfig --add httpd2
[root@www httpd]# chkconfig --list httpd2
httpd2          0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@www httpd]# chkconfig httpd2 on
[root@www httpd]# chkconfig --list httpd2
httpd2          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@www httpd]#
#注意:這時候一定要把系統自動的那個httpd服務給停掉!

5、驗證我們的編譯安裝是否成功了

#啓動我源碼編譯安裝的httpd服務
[root@www httpd]# service httpd2 start
Starting httpd:                                            [  OK  ]
[root@www httpd]#
[root@www httpd]# ps -elFH
1 S root      1037     1  0  80   0 - 18186 poll_s  2180   0 01:17 ?        00:00:00   /usr/local/apache2/bin/httpd
5 S daemon    1039  1037  0  80   0 - 104251 pipe_w 4076   0 01:17 ?        00:00:00     /usr/local/apache2/bin/httpd
5 S daemon    1040  1037  0  80   0 - 104251 pipe_w 4080   0 01:17 ?        00:00:00     /usr/local/apache2/bin/httpd
5 S daemon    1041  1037  0  80   0 - 104251 pipe_w 4088   0 01:17 ?        00:00:00     /usr/local/apache2/bin/httpd
#看到上面的數據沒有,默認啓動了三個進程,工作在event模式下的
#網頁訪問一下:
[root@www httpd]# echo "<h1>Source Apache.<h1>" >/usr/local/apache2/htdocs/index.html
[root@www httpd]# service httpd2 reload #→重載一下配置文件
Reloading httpd:
[root@www httpd]#

wKiom1MunE-BBbpBAABuREOXDOo546.jpg

OK!我的Apache編譯安裝測試成功...告一段落!


三、二進制編譯安裝MYSQL

注意開發環境的支持,按照上面的安裝就行了,這裏我直接就開始解壓安裝

1、準備數據存放的文件系統

#新建一個邏輯卷,並將其掛載至特定目錄,至於爲什麼要用邏輯卷,後面詳說
[root@mysql ~]# fdisk /dev/sda
[root@mysql ~]# mke2fs -t ext4 /dev/sda3
[root@mysql ~]# mkdir -p /databases/data
[root@mysql ~]# vim /etc/fstab
/dev/sda3               /databases/              ext4    defaults        0 0
[root@mysql ~]# mount -a

2、新建用戶以安全方式運行進程

[root@mysql ~]# groupadd -r mysql
[root@mysql ~]# useradd -g mysql -r -s /sbin/nologin -M -d /databases/data mysql
[root@mysql ~]# chown -R mysql:mysql /databases/data

3、安裝並初始化mysql-5.5.33

[root@mysql ~]# cd /usr/local/
[root@mysql local]# ln -sv mysql-5.5.33-linux2.6-x86_64 mysql
`mysql' -> `mysql-5.5.33-linux2.6-x86_64'
[root@mysql local]# cd  mysql
[root@mysql mysql]# chown -R mysql:mysql ./*
[root@mysql mysql]# scripts/mysql_install_db --user=mysql --datadir=/databases/data
[root@mysql mysql]# chown -R root ./*

4、爲mysql提供主配置文件

[root@mysql mysql]# cp support-files/my-large.cnf  /etc/my.cnf
#並修改此文件中thread_concurrency的值爲你的CPU個數乘以2,比如這裏使用如下行:
thread_concurrency = 2
#另外還需要添加如下行指定mysql數據文件的存放位置:
datadir = /databases/data

5、爲mysql提供sysv服務腳本

[root@mysql ~]# cd /usr/local/mysql
[root@mysql mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@mysql mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@mysql mysql]# chkconfig --add mysqld
[root@mysql mysql]# chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@mysql mysql]#

6、修改PATH環境變量,讓系統可以直接使用mysql的相關命令

[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

7、啓動服務並測試

[root@mysql mysql]# service mysqld start
Starting MySQL...                                    [  OK  ]
[root@mysql mysql]# mysql
[root@mysql mysql]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.33-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>       #→成功登錄!
#→爲root用戶設密碼,並刪除不必要的用戶
mysql> use mysql
Database changed
mysql> select host,user,password from user;
+------------------+------+----------+
| host             | user | password |
+------------------+------+----------+
| localhost        | root |          |
| mysql.maoqiu.com | root |          |
| 127.0.0.1        | root |          |
| ::1              | root |          |
| localhost        |      |          |
| mysql.maoqiu.com |      |          |
+------------------+------+----------+
6 rows in set (0.00 sec)
mysql> DELETE FROM user WHERE User = '' ; #→刪除用戶爲空的條目
Query OK, 2 rows affected (0.00 sec)
mysql> DELETE FROM user WHERE User = '::1' ; #→刪除IPV6相關的這個條目
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,password from user;
+------------------+------+----------+
| host             | user | password |
+------------------+------+----------+
| localhost        | root |          |
| mysql.maoqiu.com | root |          |
| 127.0.0.1        | root |          |
+------------------+------+----------+
3 rows in set (0.00 sec)
mysql> FLUSH PRIVILEGES; #→做了操作一定要記得刷新數據庫
Query OK, 0 rows affected (0.01 sec)
mysql> UPDATE user SET password = PASSWORD('guo.150019') WHERE password = '';
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> select host,user,password from user;
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *736C3B5499F163A84CCB2C0F176F3ABC93410FB5 |
| mysql.maoqiu.com | root | *736C3B5499F163A84CCB2C0F176F3ABC93410FB5 |
| 127.0.0.1        | root | *736C3B5499F163A84CCB2C0F176F3ABC93410FB5 |
+------------------+------+-------------------------------------------+
3 rows in set (0.00 sec)
mysql>  #→做了操作一定要記得刷新數據庫

8、爲了使用mysql的安裝符合系統使用規範,並將其開發組件導出給系統使用,這裏還需要進行如下步驟

#輸出mysql的man手冊至man命令的查找路徑:
[root@mysql mysql]# vim /etc/man.config
MANPATH  /usr/local/mysql/man  #→添加此行即可
#輸出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 #→讓系統重新載入系統庫:

好了,我的MYSQL源碼編譯安裝告一段落!


四、編譯安裝PHP-5.4.26

好,回到我們的httpd服務器上面去繼續安裝php...

注意開發環境的支持,除了按照上面安裝那些開發工具包之外我們還需要添加幾個:

[root@www ~]# yum -y groupinstall "Desktop Platform Development"
[root@www ~]# yum -y install bzip2-devel libmcrypt-devel

就行了,這裏我直接就開始解壓安裝了

1、解壓已獲取到的php-5.4.26軟件包,並安裝

[root@www ~]# cd /usr/src/php-5.4.26/
[root@www php-5.4.26]# ./configure--prefix=/usr/local/php --with-openssl --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib--with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache2/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts
#說明:
--prefix=/usr/local/php #→指定其安裝位置
--with-openssl #→指定支持openssl功能
--with-mysql=mysqlnd #→指定與mysql服務器的鏈接
--with-mysqli=mysqlnd #→指定與mysql服務器的鏈接
--with-pdo-mysql=mysqlnd #→指定與mysql服務器的鏈接
--enable-mbstring #→支持多字節string
--with-freetype-dir #→指定安裝的字體庫頭文件
--with-jpeg-dir #→指定jpeg類型的庫
--with-png-dir #→指定支持png類型的庫
--with-zlib #→支持互聯網上通用壓縮庫,先壓縮再傳送,減少帶寬
--with-libxml-dir=/usr #→指定xml庫文件的路徑
--enable-xml #→啓用支持xml功能
--enable-sockets #→啓用php支持套接字功能
--with-apxs2=/usr/local/apache2/bin/apxs #→基於apxs實現讓php編譯成apache模塊
--with-mcrypt #→支持額外的加密庫
--with-config-file-path=/etc #→指定php配置文件放置路徑
--with-config-file-scan-dir=/etc/php.d #→指定php配置文件的分段文件放置路徑
--with-bz2 #→指定支持壓縮庫
--enable-maintainer-zts #→當apache使用worker或event這兩個MPM,編譯時使用該選項
[root@www php-5.4.26]# make && make test && make install

說明:
(1)這裏爲了支持apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項。
(2)如果使用PHP5.3以上版本,爲了鏈接MySQL數據庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定形成依賴),但從PHP 5.4開始它就是默認設置了。

--with-mysql=mysqlnd

--with-mysqli=mysqlnd

--with-pdo-mysql=mysqlnd

2、爲php提供配置文件

[root@www php-5.4.26]# cp php.ini-production /etc/php.ini

3、編輯apache配置文件httpd.conf,以apache支持php

[root@www ~]# vim /etc/httpd2/httpd.conf
#添加以下兩行
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps
#定位至DirectoryIndex index.html
#修改爲:
#DirectoryIndex  index.php  index.html

4、添加測試文件,並測試

#我先在mysql服務器上面建立一個mysql的遠程管理帳號
[root@mysql ~]# mysql -uroot -pguo.150019
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 47
Server version: 5.5.33-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> GRANT ALL PRIVILEGES ON   *.* TO 'guomaoqiu'@'%' IDENTIFIED by 'guo.150019';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES; #→一定要記得刷新數據庫哦!
Query OK, 0 rows affected (0.00 sec)
mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+------------------+-----------+-------------------------------------------+
| host             | user      | password                                  |
+------------------+-----------+-------------------------------------------+
| localhost        | root      | *736C3B5499F163A84CCB2C0F176F3ABC93410FB5 |
| mysql.maoqiu.com | root      | *736C3B5499F163A84CCB2C0F176F3ABC93410FB5 |
| 127.0.0.1        | root      | *736C3B5499F163A84CCB2C0F176F3ABC93410FB5 |
| %                | guomaoqiu | *736C3B5499F163A84CCB2C0F176F3ABC93410FB5 |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
#在我的httpd服務器上面添加一個測試頁面,看PHP和MYSQL是否能正常工作了
[root@www ~]# cd /usr/local/apache2/htdocs/
[root@www htdocs]# mv index.html index.php
[root@www htdocs]# vim index.php
<?php
  $link = mysql_connect('172.16.41.2','guomaoqiu','guo.150019');
        if ($link)
                echo "Connect to Mysql server success!";
        else
                echo "Connect to Mysql server failure!";
        mysql_close();
        phpinfo();
?>
[root@www htdocs]# service httpd2 reload
Reloading httpd:
[root@www htdocs]#

我在瀏覽器裏面訪問一下:

wKioL1Mu5MaBioZsAADOxzJ2RNY643.jpg

  OK!現在我的php和mysql都能工作了,下面我再把mysql的圖形化管理工具phpMyAdmin給安裝上


五、搭建phpMyadmin管理平臺以及wordpress個人博客系統

爲了phpMyadmin這個工具通過單獨的一個頁面服務的方式來訪問外,等下我們還有一個博客系統也需要自己的文檔目錄所以我這裏將使用虛擬機的方式來搭建各個站點:

1、搭建phpMyadmin管理平臺

(1)在http服務器上關閉中心主機,啓用虛擬主機

#編輯主配置文件
[root@www ~]# vim /etc/httpd2/httpd.conf
#定位到下面這行後將此行添加註釋
DocumentRoot "/usr/local/apache2/htdocs"
#DocumentRoot "/usr/local/apache2/htdocs"
#定位到下面這行後將此行取消註釋
#Include /etc/httpd2/extra/httpd-vhosts.conf
Include /etc/httpd2/extra/httpd-vhosts.conf

(2)編輯虛擬主機文件啓用虛擬主機

[root@www ~]# vim /etc/httpd2/extra/httpd-vhosts.conf
 #我現在把中心主機也給定義到這裏面來
 <VirtualHost *:80>
    ServerAdmin [email protected] #→HTTP管理員郵箱
    DocumentRoot "/usr/local/apache2/htdocs" #→中心主機的DocumentRoot
    ServerName www.maoqiu.com
    CustomLog "logs/access_log" combined
    ErrorLog "logs/error_log"
    <Directory "/usr/local/apache2/htdocs"> #→這裏定義的是要對該目錄授權,這是httpd2.4的大改變之一
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

(3)安裝phpMyadmin工具

[root@www ~]# mkdir /usr/local/apache2/htdocs/phpmyadm #→創建的根目錄
   [root@www ~]# tar xf phpMyAdmlin-3.4.10.1-all-languages.tar.bz2
   [root@www ~]# cp -r phpMyAdmin-3.4.10.1-all-languages/* /usr/local/apache2/htdocs/phpmyadm/
   #→將該工具的所有文件拷貝至文至這個工具的根目錄
   [root@www htdocs]# cp config.sample.inc.php config.inc.php
   [root@www htdocs]# vim config.inc.php
   #這行兩個冒號之間我們需要一串cookie碼,隨機生成一個填在裏面
   $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
   $cfg['Servers'][$i]['host'] = '172.16.41.2'; #→這是mysql服務器地址
   [root@www htdocs]# openssl rand -hex 10  #→通過openssl生成一串隨機碼
   ddf5bab147f6cfaef020
   $cfg['blowfish_secret'] = 'ddf5bab147f6cfaef020'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

(4)測試我phpMyadmin能否正常工作了
   在瀏覽器中輸入http://www.maoqiu.com/phpmyadm

wKioL1MwHd3hvY_sAAGZukcc_PY779.jpg


   可以訪問了...現在登錄一下試試

wKiom1MwHxLwTFmuAAMgg4y2Q1o252.jpg

   OK!phpMyadmin可以使用了,下面我把wordpress搭建起來

2、搭建wordpress個人博客系統
(1)解壓安裝wordpress

[root@www ~]# unzip wordpress-3.3.1-zh_CN.zip
[root@www ~]# cd wordpress
#爲其提供配置文件 
[root@www wordpress]# cp wp-config-sample.php wp-config.php
#我之前不是說過這個博客系統需要另外一臺虛擬主機來實現的嗎,所以下面創建一個作爲博客系統根的目錄
[root@www wordpress]# mkdir -p /web/blog/wordpress/htdocs
#再將我現在所在目錄下的文件全部移動到那個目錄中去
[root@www wordpress]# mv ./* /web/blog/wordpress/htdocs/

(2)配置虛擬主機

[root@www ~]# vim /etc/httpd2/extra/httpd-vhosts.conf
#添加以下內容:
<VirtualHost *:80>
    DocumentRoot "/web/blog/wordpress/htdocs" #→這是wordpress博客系統的根目錄
    ServerName www.wordguo.org #→這是它的主機名
    CustomLog "logs/blog-access_log" combined #→訪問日誌
    ErrorLog "logs/blog-error_log" #→錯誤日誌
    <Directory "/web/blog/wordpress/htdocs"> #→定義對於這個文檔根目錄的一個訪問權限
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
#保存退出!

(4)配置數據庫,我們都知道博客系統的賬戶都是存在後端的數據庫中的,故此現需要創建一個博客的數據庫

[root@mysql ~]# mysql -uroot -pguo.150019
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.5.33-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE worddb; #→這是博客系統的數據庫
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON worddb.* TO 'worduser'@'%' IDENTIFIED BY 'guo.150019'; #→我授權worduser用戶對該數據庫具有管理權限,並且它可以在任何遠程主機上登陸該數據庫操作
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| worddb             |#→已經創建好了
+--------------------+
5 rows in set (0.00 sec)
mysql> FLUSH PRIVILEGES; #→千萬要記得刷新數據庫
Query OK, 0 rows affected (0.00 sec)
mysql>

(3)修改wordpress配置文件

[root@www ~]# vim /web/blog/wordpress/htdocs/wp-config.php
#修改下面四項即可
define('DB_NAME', 'worddb'); #→WordPress 數據庫的名稱
define('DB_USER', 'worduser'); #→MySQL 數據庫用戶名
define('DB_PASSWORD', 'guo.150019'); #→MySQL 數據庫密碼
define('DB_HOST', '172.16.41.2'); #→MySQL 主機
#保存退出!

(3)重新加載配置文件

[root@www ~]# service httpd2 reload
Reloading httpd:
[root@www ~]#

(4)測試,在客戶端瀏覽器中輸入http://www.wordpress.org 即可!

   (注意,我這裏並沒有搭建DNS,故此處的名稱解析將在客戶端hosts文件中定義)

wKioL1MwJtOCcnFgAALESdhoCbE984.jpg


OK!看到出來了吧,此時我已經把個人博客的資料填寫好了直接點擊“安裝wordpress”

wKiom1MwJ72QUyKrAAE4_0JHQ_E454.jpg


點擊“登錄” 輸入用戶名和密碼,再點“登錄”

wKiom1MwJ-jhkUOnAAEGbVun4lg140.jpg


wKioL1MwKC7R80J4AAD2Hx0lMWM588.jpg


OK! 我登錄之後因爲第一次安裝wordpress這個系統,直接就到後臺管理頁面了,我點擊首頁即可!

wKiom1MwKXjipb5QAALxZfn66lI800.jpg


六、總結

   以上實驗介紹了httpd、php以及mysl的編譯安裝,構建了一個簡單的LAMP平臺,實現了HTTP+Apache+Mysql+Php+Wordpress/Phpmyadmin的一個簡易場景;在實驗過程當中也因爲自己的馬虎有許多配置都錯了 ,不得不反覆的測試,反覆的修改,最終才搭建出來上面這樣的環境;
   在整個實驗過程中用到的知識點有以下幾點:
   1、當客戶端對httpd服務器發起了一個Php腳本請求時,我們的httpd服務器自身不能解析執行該Php腳本文件的,於是它將此請求交予Php解釋環境來執行;
   2、httpd除了基於CGI和Php通信外,還有多種方式(後面會有實驗案例);
   3、httpd是模塊化的,有core+module構成,我們可以將Php編譯成httpd的一個模塊,讓它在httpd啓動的同時加載該模塊,此時就成爲了httpd的一個子進程、子功能來運行;
   4、如果使用PHP5.3以上版本,爲了鏈接MySQL數據庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了。mysqlnd從php5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定形成依賴),但從PHP 5.4開始它就是默認設置了。編譯php時,如果需要驅動mysql,使用--with-mysql=mysqlnd等幾個選項;
   5、客戶端與httpd之間基於HTTP/HTTPS協議通信、httpd與Php通信時它已經成爲了httpd的一部分,在其內部就完成工作、而Php與Mysql之間通信則通過API基於mysql協議來實現;
   6、如果mysql與其他應用程序不在一主機上那就需要授權具有遠程連接訪問權限的mysql用戶帳號;


OK!自此爲止...
下篇將介紹 分離式LAMP+NFS的平臺搭建
小生能力有限,各位大牛多多指點!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章