1. 程式人生 > >linux學習44-實現LAMP架構

linux學習44-實現LAMP架構

#實現LAMP架構

1. LAMP介紹

在這裡插入圖片描述

  • 什麼是LAM(M)P
    一套開源組合,用來構建應用程式伺服器

    1. L:linux
    2. A:apache (httpd)
      承載客戶端連線,處理靜態資源,通過客戶端介面卡轉發動態資源至後端伺服器
    3. M: mysql, mariadb
      資料庫選擇,與程式語言沒有關係,與程式設計師解決方案有關係
    4. (M):memcached
    5. P:php, perl, python
      程式執行所需要的環境
  • 資料分類

    1. 非機構化資料
      資料結構不規則或不完整,沒有預定義的資料模型,不方便用資料庫二維邏輯表來表現的資料
    2. 結構化資料
      可以使用關係型資料庫表示和儲存,表現為二維形式的資料。一般特點是:資料以行為單位,一行資料表示一個實體的資訊,每一行資料的屬性是相同的
    3. 半結構化資料
      半結構化資料是結構化資料的一種形式,它並不符合關係型資料庫或其他資料表的形式關聯起來的資料模型結構,但包含相關標記,用來分隔語義元素以及對記錄和欄位進行分層
  • WEB資源型別

    1. 靜態資源
      原始形式與響應內容一致,在客戶端瀏覽器執行
    2. 動態資源
      原始形式通常為程式檔案,需要在伺服器端執行之後,將執行結果返回給客戶端,客戶端與伺服器端看到的原始碼不同
  • httpd怎麼處理動態資源

    1. httpd只是一個純粹的靜態http協議,所能完成的工作為分析使用者請求報文,理解使用者請求資源,根據本地的路徑對映基於本地磁碟載入內容,將內容本身封裝為一個響應報文,併發還給客戶端
    2. 我們很多時候期望web程式通過MIME識別出使用者請求型別後,將執行結果返回給使用者,而不是請求的內容,這就需要通過適配機制(例如CGI),將使用者的動態資源請求,轉發到後端伺服器(例如php),將客戶端請求執行後以資料流的形式,通過web伺服器響應給使用者
  • CGI:Common Gateway Interface(通用閘道器介面)
    可以讓一個客戶端,從網頁瀏覽器通過http伺服器向執行在網路伺服器上的程式傳輸資料;CGI描述了客戶端和伺服器程式之間傳輸的一種標準

    1. 請求流程:
      Client – (httpd) --> httpd – (cgi) --> application server (program file) – (mysql) --> mysql
      1. 客戶端傳送一個請求訪問動態頁面,通過http協議訪問網站
      2. httpd伺服器不能處理動態資源,通過cgi協議,傳送給cgi應用程式
      3. cgi應用程式執行後,通過mysql呼叫資料,再通過httpd將結果返回給客戶端
    2. FastCGI
      早期CGI與web服務是在同一臺主機上的,web伺服器承載大量的使用者請求服務於靜態資源,同時還需要呼叫另一個元件來執行動態資源,生成結果,給單臺伺服器帶來巨大壓力
      FastCGI,通過套接字來完成前後端的分離,前端伺服器通過反向代理的方式與後端伺服器通訊,當動態檔案資料量較大時,通常不會放在本地的檔案中,為了加速較大量資料的解鎖,需要設定專業的資料儲存系統,
      1. 不需要檔案自身做處理,只需要通過API調對方的服務介面
      2. 剝離資料與檔案的關係,單獨儲存
  • php
    PHP是通用伺服器端指令碼程式語言,其主要用於web開發以實現動態web頁面,它也是最早實現將指令碼嵌入HTML原始碼文件中的伺服器端指令碼語言之一。同時,php還提供了一個命令列介面,因此,其也可以在大多數系統上作為一個獨立的shell來使用,意味著php可以在其互動式視窗直接執行

    1. 官方網站
      官網:http://www.php.net/
    2. Zend Engine
      開源的、PHP指令碼語言的直譯器,將PHP程式碼的處理過程分成了兩個階段
      1. 分析PHP程式碼並將其轉換為稱作Zend opcode的二進位制格式opcode(類似Java的位元組碼),並將其儲存於記憶體中
      2. 使用Zend Engine去執行這些轉換後的Opcode
    3. php的加速器
      基於PHP的特殊擴充套件機制如opcode快取擴充套件也可以將opcode緩存於php的共享記憶體中,從而可以讓同一段程式碼的後續重複執行時跳過編譯階段以提高效能。這些加速器並非真正提高了opcode的執行速度,而僅是通過分析opcode後並將它們重新排列以達到快速執行的目的
      1. APC (Alternative PHP Cache)
        遵循PHP License的開源框架,PHP opcode快取加速器,目前的版本不適用於PHP 5.4
        專案地址:http://pecl.php.net/package/APC
      2. eAccelerator
        源於Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,目前encoder已經不在支援。
        專案地址: http://eaccelerator.net/
      3. XCache
        快速而且穩定的PHP opcode快取,經過嚴格測試且被大量用於生產環境,收錄EPEL源
        專案地址:http://xcache.lighttpd.net/
      4. Zend Optimizer和Zend Guard Loader
        Zend Optimizer並非一個opcode加速器,它是由Zend Technologies為PHP5.2及以前的版本提供的一個免費、閉源的PHP擴充套件,其能夠執行由Zend Guard生成的加密的PHP程式碼或模糊程式碼。 而Zend Guard Loader則是專為PHP5.3提供的類似於Zend Optimizer功能的擴充套件
        專案地址:http://www.zend.com/en/products/guard/runtime-decoders
      5. NuSphere PhpExpress
        NuSphere的一款開源PHP加速器,它支援裝載通過NuSphere PHP Encoder編碼的PHP程式檔案,並能夠實現對常規PHP檔案的執行加速。
        專案地址:http://www.nusphere.com/products/phpexpress.htm

2. 在httpd中使用php的方法

  • httpd+php結合的方式:

    1. Modules:將php編譯成依附於httpd服務的子模組,處理動態資源時,生成子程序處理,配置檔案生效需要重啟httpd服務
      1. 缺點
        每啟動一個httpd程序就會裝載一次php模組,不論是否使用
      2. 啟動
        配置檔案生效需要重啟httpd服務
    2. FastCGI:PHP以獨立的伺服器使用(fastcgi server)執行,用fpm實現,php本身只是直譯器,配合fpm,讓php以守護程序的方式執行,監聽在某個套接字上,接收前端的httpd的請求
      1. 執行過程
        請求資源先發送給httpd,通過httpd內部的fastcgi客戶端模組,通過此模組能夠作為客戶端去請求fastcgi的服務端(fpm執行的php server),通常為tcp協議的9000埠
      2. 啟動
        配置檔案生效需要重啟php-fpm服務
        systemctl start php-fpm
        php配置
      3. 版本要求
        1. CentOS 6:需要編譯安裝httpd-2.4, php-5.3.3+
          PHP-5.3.2之前:預設不支援fpm機制;需要自行打補丁並編譯安裝
          httpd-2.2:預設不支援fcgi協議,需要自行編譯此模組
        2. CentOS 7:
          httpd-2.4:rpm包預設編譯支援fcgi模組
          php-fpm包:專用於將php運行於fpm模式
      4. 模組要求
        在HTTPD伺服器上必須啟用proxy_fcgi_module模組,充當PHP客戶端,檢視方式:
        1. httpd –M |grep fcgi
        2. cat /etc/httpd/conf.modules.d/00-proxy.conf
  • 在LAMP中設計的PHP程式

    1. php-mysql
      讓mysql支援php直譯器
    2. php
      php直譯器主程式包,包含向Apache HTTP伺服器新增php直譯器支援的模組
    3. php-fpm
      (FastCGI Process Manager)是PHP FastCGI的另一種備選方案,具有一些額外的特性,對任何規模的站點都有用,特別是比較繁忙的站點
  • php通用配置檔案
    配置檔案在php直譯器啟動時被讀取

    1. 主配置檔案
      /etc/php.ini
    2. 子配置檔案
      /etc/php.d/*.ini
    3. 配置檔案來源:安裝php或php-fpm都會通過依賴關係安裝php-common
      [[email protected] ~]$rpm -qf /etc/php.ini
      php-common-5.4.16-45.el7.x86_64
      
    4. /etc/php.ini配置檔案格式
      1. 格式
        [foo]:Section Header   
        directive = value 
        
      2. 描述
        [foo]:表示段落名稱
        ;:沒空格的表示可以啟用的選項
        ;:加空格的表示純粹的說明資訊
    5. /etc/php.ini配置檔案常用項
      1. php.ini的核心配置選項文件:
        http://php.net/manual/zh/ini.core.php
      2. php.ini配置選項列表:
        http://php.net/manual/zh/ini.list.php
      max_execution_time= 30  	  <==最長執行時間30s,高併發情況下,可以考慮調小
      max_input_time = 60 		  <==最大輸入時間
      memory_limit = 128M  	 	  <==記憶體大小,生產不夠,可調大 
      display_errors off 		      <==顯示錯誤資訊,除錯使用,不要開啟,否則可能暴露重要資訊
      display_startup_errors off	  <==建議關閉,啟動錯誤資訊
      post_max_size 8M 			  <==最大上傳資料大小,生產可能臨時要調大,比下面項要大
      upload_max_filesize 2M		  <==最大上傳檔案,生產可能要調大
      max_file_uploads = 20		  <==同時上傳最多檔案數
      date.timezone =Asia/Shanghai  <==指定時區
      short_open_tag=on 			  <==開啟短標籤,如<? phpinfo();?> ,原格式為<?php  phpinfo(); ?>
      
  • 以下實驗會用到的測試程式碼

    1. php測試程式碼
      <?php
      echo date("Y/m/d H:i:s");
      phpinfo();
      ?>
      
    2. Php使用mysql擴充套件連線資料庫
      <?php
      $conn = mysql_connect(‘mysqlserver','username','password');
      	if ($conn)
      		echo "OK";
      	else
      		echo "Failure";
      ?>
      
    3. Php使用mysqli擴充套件連線資料庫測試程式碼
      <?php
      $mysqli=new mysqli("mysqlserver",“username",“password");
      	if(mysqli_connect_errno()){
      		echo "Failure";
      			$mysqli=null;
      			exit;
      		}
      		echo “OK";
      		$mysqli->close();
      ?>
      
    4. 使用pdo擴充套件連線資料庫的測試程式碼1
      <?php
      $dsn='mysql:host=localhost;dbname=mysql';
      $username='root';
      $passwd='centos';
      $dbh=new PDO($dsn,$username,$passwd);
      var_dump($dbh);
      ?>
      
    5. 使用pdo擴充套件連線資料庫的測試程式碼2
      try {
      	$user='root';
      	$pass=‘centos';
      	$dbh = new PDO('mysql:host=localhost;dbname=mysql', $user, $pass);
      	foreach($dbh->query('SELECT user,host from user') as $row) {
      		print_r($row);
      	}
      	$dbh = null;
      } catch (PDOException $e) {
      	print "Error!: " . $e->getMessage() . "<br/>";
      	die();
      }
      ?>
      

3. 實現LAMP架構

  • 以模組(Modules)方式實現
    CentOS 7:涉及安裝程式
    Modules:httpd, php, php-mysql, mariadb-server
    CentOS 6:涉及安裝程式
    Modules:httpd, php, php-mysql, mysql-server

    1. 安裝,如果已經安裝了httpd,直接安裝php,會通過依賴關係會預設安裝php-cli和php-common
      [[email protected] ~]$yum install php
      
    2. 安裝成功後,會在/etc/httpd/conf.d/下生成新的配置檔案,php.conf
      [[email protected] ~]$vim php.conf 
      <FilesMatch \.php$>
      SetHandler application/x-httpd-php   <==所有以.php結尾的檔案,都交給httpd-php處理
      </FilesMatch>
      DirectoryIndex  index.php            <==設定預設主頁
      php_value session.save_handler "files"       		
      php_value session.save_path    "/var/lib/php/session"	 <==儲存session目錄
      
    3. 在httpd模組目錄下,/etc/httpd/conf.modules.d/會增加一個php模組配置檔案,10-php.conf
      [[email protected] conf.modules.d]$vim 10-php.conf 
      <IfModule prefork.c>    <==只要在prefork.c模型下才會裝載名為php5_module的模組
        LoadModule php5_module modules/libphp5.so
      </IfModule>
      
      也就是說httpd以執行緒模式執行的話,需要裝入的模組為php-zts,在extras倉庫
    4. 檢查php5模組是否已裝載,如果未載入,需要檢查配置檔案和安裝的程式包是否相匹配
      [email protected] conf.modules.d]$httpd -M
      
    5. 測試,在httpd頁面路徑下建一個.php檔案,然後訪問主頁,如果可以看到php設定環境介面,說明php模組可以正常執行
      [[email protected] html]$vim index.php
      <?php
                phpinfo();
      ?>
      
    6. 安裝mysql,同時讓php支援連線mysql,需要元件為 php-mysq
      [[email protected] ~]$yum -y install  mariadb-server  php-mysql
      
    7. 在web伺服器主機,編輯一個測試程式碼
      <?php
          $conn = mysql_connect('127.0.0.1','root','');  <本機測試用,生產環境不可以用root,配置檔案容易丟
              if ($conn)
                      echo "OK";
              else
                      echo "Failure";
      ?>
      
    8. 重啟服務後,訪問web頁面,如果出現“Failure”錯誤,說明php擴充套件沒有問題,只是連線資料庫失敗,可能是資料庫沒有啟動,或者賬號密碼錯誤,或者資料伺服器埠錯誤等。如果出現ok介面,說明可以正常連線至資料庫,IMP平臺也就搭建成功,php程式放在網頁目錄下就可以對外提供服務了
  • 以FastCGI實現(php-fpm)
    php包與php-fpm包是互斥的,只能安裝一種,如果測試機上有php需要先解除安裝
    FastCGI涉及程式:httpd, php-fpm, php-mysql, mariadb-server

    1. 安裝程式包,httpd、php-mysql、mariadb-server
      [[email protected] ~]$yum install httpd php-mysql php-fpm mariadb-server -y
      
    2. 修改mysql資料庫配置檔案,不允許反向解析ip
      [[email protected] ~]$vim /etc/my.cnf.d/server.cnf
      [mysqld]
      skip_name_resolve=ON
      
    3. httpd要適配到FastCGI服務端,依賴於模組proxy_fcgi_module,2.4預設啟動狀態,2.2需要在epel源安裝
      [[email protected] ~]$httpd -M |grep cgi
      proxy_fcgi_module (shared)
      
    4. 編輯fastCGI伺服器端配置檔案/etc/php-fpm.conf用來配置php守護程序工作特性(如何管理自己的程序),/etc/php.ini依然生效,用來配置載入那些模組,修改了模組設定,就需要要重啟php-fpm服務
      [[email protected] ~]$vim /etc/php-fpm.conf
      include=/etc/php-fpm.d/*.conf            <==模組化配置載入此目錄下所有的配置檔案
      [global]
      pid = /run/php-fpm/php-fpm.pid   		 <==守護程序的pid
      error_log = /var/log/php-fpm/error.log   <==錯誤日誌
      log_level = notice     					 <==日子記錄級別
      daemonize = no     						 <==表示是否以守護程序的方式執行,定義為no,因為要託管到		systemd上
      ;;;;;;;;;;;;;;;;;;;;
      ; Pool Definitions ;
      ;;;;;;;;;;;;;;;;;;;;
      ; See /etc/php-fpm.d/*.conf  			 <==Connection Pool連線池的定義都在php-fpm.d/下模組化的配置檔案中
      
    5. 定義連線池的配置檔案
      [[email protected] ~]$vim /etc/php-fpm.d/www.conf
      [www]  					   <==連線池的名字,此名可以自定義
      listen = 127.0.0.1:9000    <==監聽在哪個地址哪個埠上,本機所有ipv4地址可用修改為0.0.0.0
      listen.backlog = -1        <==佇列長度,-1表示在伺服器承載範圍內不設限,佇列時放在記憶體中的,防止didos攻擊,推薦設限
      #listen.allowed_clients = 127.0.0.1    <==訪問控制,註釋掉
      user = apache     		   <==表示子程序以哪個身份執行
      group = apache
      pm = dynamic       		   <==定義管理連線池的模式,有兩個值static和dynamic
      	    static: 		   <==靜態模式,直接啟用所有子程序
      	    dynamic: 		   <==動態管理模式
      		    following directives:
      		    pm.max_children:'最大連線數,動態靜態都有用,預設值50,通過壓測確定'
      			pm.start_servers:'服務啟動時啟動的程序數,此引數動態模式有用,預設值5'
      			pm.min_spare_servers:'空閒程序數,此引數動態模式有用,預設值5'
      			pm.max_spare_servers:'最大空閒程序數,此引數動態模式有用,預設值35'
      pm.max_requests = 500     <==程序最大服務數,達到此值就會kill生成新的,設為0表示不設限
      pm.status_path = /status  <==pm狀態頁面
      ping.path = /ping  		  <==判斷服務工作狀態的URL
      ping.response = pong      <==判斷/ping後返回的結果,可以自定義
      php_value[session.save_handler] = files     			<==定義會話管理模式
      php_value[session.save_path] = /var/lib/php/session     <==會話儲存路徑,確保此檔案存在,且apache有讀寫許可權
      
    6. 建立session(會話)管理目錄,並且修改為apache具有讀寫許可權
      [[email protected] ~]$mkdir /var/lib/php/session
      [[email protected] ~]$chown apache.apache /var/lib/php/session/
      
    7. 在虛擬主機上配置http,需要手動指明預設主頁檔案使用index.php
      1. '編輯http配置檔案,新增FCGI的配置'
      [[email protected] data]$vim /etc/httpd/conf.d/text.conf
      DirectoryIndex index.php       <==指明預設主頁檔案為index.php
      <VirtualHost *:80>
      ServerName www.v9.com
      DocumentRoot /data/virtual/v9.com
      ProxyRequests Off              <==關閉正向代理
      ProxyPassMatch ^/(.*\.php)$  fcgi://192.168.50.115:9000/apps/vhosts/b.net/$1  <==反向代理,以php結尾的URL,轉發給fcgi由/apps/vhosts/b.net/$1提供,後面的$1是指前面的/(.*\.php)
      
      <Directory "/data/virtual/v9.com">   <==授權限制目錄
      Options None
      AllowOverride None
      Require all granted
      </Directory>
      </VirtualHost>
      
    8. 在指定的頁面路徑下建一個網頁測試檔案,重啟服務
      [[email protected] v9.com]$ vim /data/virtual/v9.com/index.php
      <?php
              phpinfo();
      ?>
      

4. 常見LAMP應用

  • phpmyadmin
    一個以PHP為基礎,以Web-Base方式架構在網站主機上的MySQL的資料庫管理工具,讓管理者可用Web介面管理MySQL資料庫
    1. 獲取站點
      下載:https://www.phpmyadmin.net/downloads/
    2. 佈置phpmyadmin
      1. 將工具包解壓後,移動至httpd服務的DocumentRoot下,做一個指向軟連線,方便切換版本
        1. '解壓檔案'
        [[email protected] ~]$tar xf phpMyAdmin-4.0.10.20-all-languages.tar.gz
        2. '移動至頁面目錄下'
        [[email protected] ~]$mv phpMyAdmin-4.0.10.20-all-languages /data/virtual/
        3. '做軟連線'
        [[email protected] ~]$ln -sv phpMyAdmin-4.0.10.20-all-languages v9.com
        
      2. 進入phpMyAdmin-4.0.10.20-all-languages目錄,將配置檔案模板,修改為配置檔案,去掉sample
        [[email protected] ~]$cp  config.sample.inc.php   config.inc.php
        
      3. 修改配置檔案config.inc.php
        [[email protected] ~]$vim /data/virtual/phpMyAdmin-4.0.10.20-all-languages/config.inc.php
        $cfg['blowfish_secret'] = '123456';         <==輸入一個隨機字串
        $cfg['Servers'][$i]['host'] = 'localhost';  <==修改連線地址,與資料庫中授權的使用者地址要相同
        
      4. 安裝php相關元件,重啟服務後,即在httpd頁面登入工具,賬號密碼為資料庫授權的賬戶
        yum install php-mbstring      <==多字元支援
        yum install php-mcrypt        <==加密相關
        systemctl  restart  php-fpm   <==重啟php-fpm
        
  • WordPress
    WordPress是一款開源的個人網站搭建程式,使用者可以在支援PHP和MySQL資料庫的伺服器上架設屬於自己的網站
    1. 獲取地址
      https://cn.wordpress.org/
    2. 部署WordPress
      1. 將獲得的壓縮包,解壓到網頁目錄中,進入目錄找到配置檔案模板,將其重新命名為wp-config.php
        [[email protected] ~]$cd /var/www/html/wordpress-4.9
        [[email protected] wordpress-4.9]$cp  wp-config-sample.php   wp-config.php
        
      2. 修改配置檔案許可權,保證Apache有讀寫許可權
        [[email protected] ~]$chmod 666 wp-config.php 
        
      3. 在資料庫中建立一個網站專用資料庫,專用賬戶
        [[email protected] ~]$mysql
        MariaDB [(none)]> CREATE DATABASE wpdb;
        MariaDB [(none)]> GRANT ALL ON phptest.* TO 'wpuser'@'172.20.0.%'IDENTIFIED BY 'centos';
        
      4. 編輯配置檔案,修改如下項,以連線資料庫
        [[email protected] ~]$vim /var/www/html/wordpress-4.9/wp-config.php
        define('DB_NAME', 'phptest');     <==指定資料庫名
        define('DB_USER', 'root');      <==指定使用者名稱
        define('DB_PASSWORD', '');      <==指定密碼
        define('DB_HOST', '192.168.50.115');       <==指定主機
        
      5. 或者將配置檔案刪除,訪問網站,會出現配置頁面,填寫相關資訊後,會生成配置檔案,將內容複製到wordpress目錄下生成一個配置檔案wp-config.php

5. 將httpd/fpm分別以獨立主機執行

  • 獨立搭建伺服器優點

    1. 不需要檔案自身做處理,只需要通過API調對方的服務介面
    2. 剝離資料與檔案的關係,單獨儲存
  • 搭建過程
    規劃以110為httpd伺服器,107為php-fpm伺服器,基於FastCGI

    1. 在107上安裝php,如果需要連線資料庫,還要安裝php-mysql元件
      [[email protected] ~]$yum install php-fpm  php-mysql
      
    2. php伺服器沒有httpd服務,所以將web的php相關程式單獨存放在一個目錄下,新建目錄/data/website
      [[email protected] ~]$mkdir /data/website
      
    3. 修改Php伺服器的監聽埠,預設情況是監聽本地127.0.0.1上,需要修改為監聽在網路ip,或者直接寫埠,表示所有地址的9000都可以訪問,重啟服務
      [[email protected] website]$vim /etc/php-fpm.d/www.conf
      listen = 9000
      [[email protected] website]$systemctl restart php-fpm
      [[email protected] website]$ss -ntl
      State      Recv-Q Send-Q     Local Address:Port           
      LISTEN     0      128          *:9000 <==看到*就說明所有地址都可以訪問
      
    4. 在110伺服器上安裝Apache服務,並修改配置檔案為代理伺服器
      [[email protected] ~]$yum install httpd
      [[email protected] ~]$vim /etc/httpd/conf.dfcgi.conf
      DirectoryIndex index.php
      ProxyRequests Off
      ProxyPassMatch ^/(.*\.php)$  fcgi://192.168.50.107:9000/data/website/$1   <==目標地址改為php伺服器
      

6 搭建虛擬主機,在同一臺伺服器上執行2個網站

  • 實驗目標
    實現LAMP架構,在web伺服器上維護兩個網站
  • 使用的網頁資源
    1. wordpress-4.9.4-zh_CN.tar.gz
    2. Discuz_X3.2_SC_UTF8.zip
  • 搭建過程
    1. 資料庫伺服器

      1. 先搭建資料庫伺服器,這裡以伺服器C(107)為例
        [[email protected] ~]$yum install mariadb-server
        
      2. 計劃執行兩個網頁,所以在資料庫中建立相應資料庫和賬戶
        1. '為wordpress網頁建立資料庫和賬戶'
        [[email protected] ~]$mysql -e "CREATE DATABASE wpdb;GRANT ALL ON wpdb.* TO 	[email protected]'192.168.50.%' IDENTIFIED BY 'centos'"
        2. '為Discuz網頁建立資料庫和賬戶'
        [[email protected] ~]$mysql -e "CREATE DATABASE Dzdb;GRANT ALL ON Dzdb.* TO 	[email protected]'192.168.50.%' IDENTIFIED BY 'centos'"
        
    2. php-fpm伺服器

      1. 伺服器B(110),安裝php-fpm,連線資料庫元件php-mysql
        [[email protected] ~]$yum install   php-fpm  php-mysql
        
      2. 分別建立2個網站對應的網頁目錄,Discuz稍後重新命名
        [[email protected] ~]$mkdir /data/wordpress
        
      3. 在官網獲取頁面檔案包wordpress-4.9.4-zh_CN.tar.gz和Discuz_X3.2_SC_UTF8.zip,分別解壓至對應網頁目錄
        [[email protected] ~]$tar xvf wordpress-4.9.4-zh_CN.tar.gz
        [[email protected] ~]$unzip Discuz_X3.2_SC_UTF8.zip 
        'Discuz解壓後的目錄為upload,重新命名為discuz'
        [[email protected] ~]$mv upload/ discuz
        
      4. 修改wordpress配置檔案
        1. '進入wordpress目錄下,將配置檔案模板修改為配置檔案'
        [[email protected] ~]$mv wp-config-sample.php  wp-config.php
        2. '修改配置檔案'
        [[email protected] ~]$vim /data/wordpress/wp-config.php
        /** WordPress資料庫的名稱 */
        define('DB_NAME', 'wpdb');
        /** MySQL資料庫使用者名稱 */
        define('DB_USER', 'wpuser');
        /** MySQL資料庫密碼 */
        define('DB_PASSWORD', 'centos');
        /** MySQL主機 */
        define('DB_HOST', '192.168.50.107');
        
      5. 讓Apache對discuz目錄具有寫許可權
        [[email protected] /data]$setfacl -R -m u:apache:rwx discuz/
        
    3. httpd伺服器

      1. 安裝httpd服務
        [[email protected] ~]$yum -y install  httpd
        
      2. 修改httpd配置檔案,定義兩個虛擬主機,並授權目錄
        [[email protected] ~]$vim /etc/httpd/conf.d/test.conf
        DirectoryIndex index.php         <==指定預設網頁檔案為index.php
        <VirtualHost *:80>       		 <==設立虛擬主機
        ServerName www.wordpress.net     <==服務名
        DocumentRoot /data/wordpress/    <==web服務頁面路徑
        ProxyRequests Off       		 <==不啟用正向代理
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1        <==啟用反向代理
        <Directory "/data/wordpress/">   <==授權虛擬主機服務目錄
        Require all granted
        </Directory>
        </VirtualHost>
        
        <VirtualHost *:80>               <==第二個虛擬機器
        ServerName www.discuz.net
        DocumentRoot /data/discuz/
        ProxyRequests Off
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/discuz/$1
        <Directory "/data/discuz/">
        Require all granted
        </Directory>
        </VirtualHost>
        
    4. 客戶端
      在客戶端D上修改hosts檔案,模擬DNS解析,登入網頁檢測

      [[email protected]  ~]$vim /etc/hosts
      192.168.50.110  www.wordpress.net  www.discuz.net
      

7 CentOS7編譯安裝LAMP,基於fastcgi方式

  • 編譯環境
    1. httpd可移植執行庫
      apr-1.6.3.tar.gz
      apr-util-1.6.1.tar.gz
    2. Apache原始碼
      httpd-2.4.34.tar.bz2
    3. mariadb二進位制檔案
      mariadb-10.2.15-linux-x86_64.tar.gz
    4. php直譯器
      php-7.1.18.tar.bz2
    5. 頁面檔案
      wordpress-4.9.4-zh_CN.tar.gz
  • 編譯順序
    mariadb–>httpd–>php
    mariadb和httpd先後可以隨意,php依賴於mariadb,需要最後安裝
  • 編譯流程
    1. 準備開發包組
      [[email protected] ~]$yum groupinstall "Development Tools"
      
    2. 編譯httpd
      1. 安裝依賴包
        [[email protected] ~]$yum install pcre-devel openssl-devel expat-devel -y
        
      2. 官方下載httpd原始碼,以及依賴的apr包(apr-1.6.3.tar.gz、apr-util-1.6.1.tar.gz 、httpd-2.4.34.tar.bz2),匯入linux中,然後解壓縮
        [[email protected] srcd]$tar xf apr-1.6.3.tar.gz 
        [[email protected] srcd]$tar xf apr-util-1.6.1.tar.gz 
        [[email protected] srcd]$tar xf httpd-2.4.34.tar.bz2 
        
      3. 將apr和apr-util整個目錄拷貝到httpd-2.4.34/srclib/目錄下,並且改名(必須)為apr和apr-util
        [[email protected] srcd]$cp -r apr-1.6.3 httpd-2.4.34/srclib/apr
        [[email protected] srcd]$cp -r apr-util-1.6.1 httpd-2.4.34/srclib/apr-util
        
      4. 編譯,./configure作用,檢查系統環境和配置生成makefile檔案,檢查所有所需要的編譯操作的依賴環境是否可以滿足,如果可以滿足,將檢查結果和命令列定義的選項特性結合makefile.in生成為makefile檔案
        –enable-so \ enable表示啟用某個內建特性;
        –disable表示禁用程式自帶的特性;
        –with表示需要呼叫另外一個軟體程式一起安裝;
        –without表示不結合;
        '進入httpd解壓後的目錄,執行configure'
        ./configure\
        --prefix=/app/httpd24\
        --enable-so\      		  <==是否支援動態模組
        --enable-ssl\  			  <==是否支援加密
        --enable-cgi\    
        --enable-rewrite\
        --with-zlib\     
        --with-pcre\      		  <==正則表示式
        --with-included-apr\      <==表示已經將apr相關需要編譯的內容放在httpd相關的路徑下,可以一起編譯
        --enable-modules=most\    <==是否支援大部分模組
        --enable-mpms-shared=all\
        --with-mpm=prefork        <==是否支援mpm的prefork工作模型
        
      5. 構造和安裝,make為專案管理工具,組織專案間的依賴關係