摘要:報文語法格式報文報文請求流程用戶請求先到達內(nèi)核空間的網(wǎng)絡協(xié)議棧,內(nèi)核空間通過服務所監(jiān)聽的套接字,可以將用戶請求轉發(fā)給用戶空間的服務進程。作為獨立的守護進程,偵聽一個套接字,接收并響應來自前端程序的請求,即為客戶端。
博文參考
http://www.178linux.com/51895 http://www.178linux.com/63734 http://www.178linux.com/5187人物背景 LAMP
Linux Apache Mysql,MariaDB Perl,PHP,Python: 一組常用來搭建動態(tài)網(wǎng)站或者服務器的開源軟件,本身都是各自獨立的程序,由于常被放在一起使用,因此稱之為LAMP,LAMP是最強大的網(wǎng)站解決方案特點
LAMP具有Web資源豐富、輕量、快速開發(fā)的特點,其優(yōu)勢在于通用、跨平臺、高性能、低價格,因此LAMP無論是性能、質(zhì)量還是價格都是企業(yè)搭建網(wǎng)站的首選方案。理解Web資源的概念
靜態(tài)資源:原始形式與響應給客戶端的結果一致,如jpeg,html,plaintext,占80%
CGI:Common Gateway Interface動態(tài)資源:原始形式通常為程序文件,需運行對應環(huán)境的子進程返回執(zhí)行結果,占20%.但需要IO請求的資源大約為20%.
CGI協(xié)議定義了Web服務器程序與后端服務進程進行數(shù)據(jù)交換的規(guī)范,以prefork為例,Browser并行請求多個資源時,httpd為每個請求建立一個子進程,如果請求動態(tài)資源時,httpd調(diào)用php模塊對動態(tài)資源進行處理,再返回給Web服務器響應客戶端。過程中httpd與php及mysqld之間的通信就使用了CGI接口。httpd 完整的http請求處理過程
(1) 建立或處理連接:接收請求或拒絕請求; (2) 接收請求:接收來自于網(wǎng)絡上的主機請求報文中對某特定資源的一次請求的過程; (3) 處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息; (4) 訪問資源:獲取請求報文中請求的資源; (5) 構建響應報文: (6) 發(fā)送響應報文: (7) 記錄日志:httpd所支持的處理模型有哪些,他們的分別使用于哪些環(huán)境
MPM:Multipath processing Modules (多路處理模塊) prefork:多進程模型,每個進程響應一個請求; 一個主進程:負責生成子進程及回收子進程;負責創(chuàng)建套接字;負責接收請求,并將其派發(fā)給某子進程進行處理; n個子進程:每個子進程處理一個請求; 工作模型:會預先生成幾個空閑進程,隨時等待用于響應用戶請求;最大空閑和最小空閑; worker:多進程多線程模型,每線程處理一個用戶請求; 一個主進程:負責生成子進程;負責創(chuàng)建套接字;負責接收請求,并將其派發(fā)給某子進程進行處理; 多個子進程:每個子進程負責生成多個線程; 并發(fā)響應數(shù)量:m*n每個線程:負責響應用戶請求; m:子進程數(shù)量 n:每個子進程所能創(chuàng)建的最大線程數(shù)量; event:事件驅(qū)動模型,多進程模型,每個進程響應多個請求; 一個主進程 :負責生成子進程;負責創(chuàng)建套接字;負責接收請求,并將其派發(fā)給某子進程進行處理; 子進程:基于事件驅(qū)動機制直接響應多個請求; httpd-2.2: 仍為測試使用模型; httpd-2.4:event可生產(chǎn)環(huán)境中使用;請求流程
一次http事物
客戶端通過瀏覽器發(fā)出http請求,請求當中包含一部分內(nèi)容,內(nèi)容不是最關鍵的,關鍵的是在內(nèi)容前面附加一個http請求首部,用來告訴服務器端,客戶端是如何請求的,用哪種方法進行請求的,請求哪一個虛擬機等等。 請求發(fā)送到服務器端后,服務器端要分析請求,分析這個請求首部用什么url,用什么方法請求,請求哪個主機,用哪個協(xié)議等等。然后構建響應報文,響應時還要告訴客戶端我是怎么響應你的,給出響應狀態(tài)碼(100-500)。客戶端利用這些首部信息完成內(nèi)容之外的交換信息。則這一次http事務完成。 報文語法格式: request 報文response 報文
請求流程
用戶請求先到達內(nèi)核空間的網(wǎng)絡協(xié)議棧,內(nèi)核空間通過web服務所監(jiān)聽的套接字socket,可以將用戶請求轉發(fā)給用戶空間的http服務進程。靜態(tài)資源是http服務進程向內(nèi)核發(fā)請求,去磁盤找到這個資源,沒有就顯示Not Found,有就把加載的資源返回給進程,先到內(nèi)核自己的內(nèi)存中。其中進程把任務交給內(nèi)核后到內(nèi)核把資源返回進程之間,進程處于空閑狀態(tài),我們把這個狀態(tài)稱為阻塞狀態(tài)。拿到資源后,進程構建響應報文,把資源的前面加上響應首部,發(fā)到內(nèi)核空間,通過通信子網(wǎng)進行向外發(fā)送。即達成了一次http事務吧。
靜態(tài)資源:Client -- http 協(xié)議--> httpd
補充: 如果不阻塞,則注冊一個事務,就去做別的事情,等這邊的事情好了,提醒一下就好了,這種機制叫做AIO機制。 上面的,內(nèi)核加載完了資源放到了內(nèi)存中,然后又返給進程,這個時候又浪費了一次用戶空間,所以有一種Sendfile機制,可以直接在內(nèi)核里面添加響應首部,然后傳給用戶。這樣就省去了一回用戶空間,提高了效率。
動態(tài)資源請求
從磁盤加載后,進程將資源傳給PHP,PHP根據(jù)是否用到數(shù)據(jù)庫去調(diào)用數(shù)據(jù)庫,都處理好了,傳遞給進程。 客戶端通過http協(xié)議將請求傳給內(nèi)核,那么httpd進程通過三種方法與php結合: modules: 把 php 編譯成為 httpd 的模塊 cgi: fastcgi: php要聯(lián)系mysql。要用PHP代碼扮演客戶端,經(jīng)過mysql協(xié)議聯(lián)系。 Client -- http --> httpd --> libphp5.so () -- mysql --> MySQL serverPHP 簡介
php是可嵌入html中的程序,支持不同的存儲、字符、加密解密的功能,這些機制都是模塊化(extensions)實現(xiàn)的,如php與MySQL的連接需安裝php-mysql模塊。php的模塊是為了豐富 php 功能的擴展,而php作為httpd的模塊是為了讓Web服務器支持動態(tài)Web資源解析的功能。httpd與php的結合方式主要有三種
CGI:由php解釋器與httpd通過CGI通信
Module:不同的mpm需要不同的php程序包,無法混用
prefork:libphp程序包
worker, event:libphp-zts程序包
FastCGI
fcgi是簡裝版的CGI協(xié)議,httpd只把URL重新封裝后通過 FCGI 傳遞給 fcgi 服務端,動態(tài)資源由 fcgi 服務器端從 mysql 加載,處理完成再返回給httpd,此時httpd相當于是一個反向的代理服務器,接收任意客戶端的請求,為fcgi Server提供服務。 此時php以fpm機制監(jiān)聽在一個套接字上,可運行在另一臺主機上,如httpd作為一個反向代理服務器且分發(fā)動態(tài)資源請求給多個fcgi服務器,以完成更好的動態(tài)資源處理,當然需要處理好用戶section丟失的問題,一種方式通過ip地址識別用戶;另一種方式通過綁定cookie,且同步section給多態(tài)服務器;另一種方式是把section放在多帶帶的具有冗余功能的服務器中保存在redis(nosql)數(shù)據(jù)庫中; php-fpm工作模式類似于httpd的prefork,主控進程接收請求,通過創(chuàng)建子進程處理httpd客戶端的并發(fā)請求。子進程可按需生成,也可動態(tài)生成,通過連接池機制管理子進程的數(shù)量和狀態(tài),有活動、空閑、未激活等幾種狀態(tài)。Module形式安裝php
yum -y install php #作為httpd的modules rpm -ql | grep php rpm -ql php-common #公共組件,能夠被httpd與php解釋器調(diào)用 #作為httpd模塊的php配置文件:/etc/httpd/conf.d/php.conf #php核心的配置文件:/etc/php.ini, /etc/php.d/*.ini vi /etc/php.ini 格式:[section_id] ;;;;;;;;;;;;;;;;;;; ; Quick Reference ; ;;;;;;;;;;;;;;;;;;; ; display_errors ; Default Value: On #默認為開發(fā)環(huán)境 ; Development Value: On #開發(fā)環(huán)境 ; Production Value: Off #生產(chǎn)環(huán)境 date.timezone = Asia/Shanghai #默認讀取系統(tǒng)時區(qū),會有waringFastCGI方式安裝php
PHP-FPM 是一個簡單可靠的 FastCGI 進程管理器(FastCGI Process Manager),從 PHP 5.3.3 開始就成為了 PHP 的內(nèi)置管理器。Apache 官方網(wǎng)站也提供了配置 Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 運行 php 程序的基本方法和設置運行方式的簡單介紹。 php-fpm(FastCGI Process Manager)作為獨立的守護進程,偵聽一個套接字,接收并響應來自前端程序的請求,即httpd為FastCGI客戶端。對于繁忙的站點能提升并發(fā)性能。因為 Apache 可以專心處理除 php 之外的靜態(tài)網(wǎng)頁及元素,反而 httpd 進程本身占用的 CPU 和內(nèi)存可以顯著降低,從而從整體上降低資源消耗。另外一點是方便后期升級為分布式的Web服務器。代理服務器
正向:為有限客戶端發(fā)送給任意服務器,服務于客戶端
php的配置文件反向:接收來自任意客戶端請求,發(fā)送給有限服務器,服務于服務端
LAMP實驗搭建官方說明:http://php.net/manual/zh/ini....
1. 實驗主框架LAMP采用編譯安裝。 2. 分離HTTPD,PHP,MARIADB。 3. 兩臺服務器能夠各自被訪問且內(nèi)容相同。程序包準備
apr-1.5.2.tar.gz apr是apache的運行庫,提供了軟件允許所需要的庫文件。 apr-util-1.5.4.tar.gz 可以理解為apr的擴展,支持更加多的數(shù)據(jù)接口與封裝接口。 httpd-2.4.20.tar.bz2 http程序,2.4支持了眾多新特性,最為主要的是event模型。 mariadb-5.6.20.tar.gz 完全開源的關系型數(shù)據(jù)庫,是mysql的一個分支。 php-5.6.20.tar.gz php程序,負責解析動態(tài)請求。 xcache-3.2.0.tar.gz PHP的加速器程序,能夠通過緩存來加速PHP。 phpMyAdmin-4.6.0-all-languages.zip 圖形化數(shù)據(jù)庫管理工具,基于PHP開發(fā),可選。 wordpress-4.5.zip 基于PHP開發(fā)的開源的blog平臺,可選。 Discuz_X3.1_SC_GBK.zip 基于PHP開發(fā)的論壇,可選。軟件準備
[開發(fā)包組] Development Tools 開發(fā)工具包 [apache] pcre-devel pcre正則表達式支持庫 openssl-devel openssl開發(fā)包 [PHP] libxml2-devel xml的開發(fā)包 bzip2-devel bzip2的開發(fā)包 libmcrypt-devel 加密擴展開發(fā)包 mhash-devel mhash加密開發(fā)包配置文件預覽表
httpd編譯安裝 編譯安裝Web Server 1 (192.168.1.1)
[root@host1 ~]# yum groupinstall "Development Tools" -y 安裝依賴的包組“Development Tools” [root@host1 ~]# yum install pcre-devel openssl-devel -y 安裝正則表達式的開發(fā)包pcre-devel 與 openssl的開發(fā)包openssl-devel [root@host1 ~]# rpm -q apr-util && yum remove apr-util -y 查詢apr-util是否安裝,安裝了就卸載,是為了防止默認安裝了低版本的apr而使得非常混亂。 [root@host1 ~]# rpm -q apr && yum remove apr -y 查詢apr是否安裝,安裝了就卸載,是為了防止默認安裝了低版本的apr而使得非常混亂。 [root@host1 ~]# rpm -q httpd && yum remove httpd -y 查看httpd是否安裝,安裝了就卸載,是為了防止默認安裝了低版本的httpd。 [root@host1 ~]# useradd -s /sbin/nologin -r apache 創(chuàng)建系統(tǒng)用戶并不能登陸,創(chuàng)建用戶時會自動創(chuàng)建相同名稱的組。 [root@host1 source]# cd source/ cd到存放源碼的目錄。 [root@host1 source]# tar xf source/apr-1.5.2.tar.gz 解壓apr [root@host1 source]# tar xf source/apr-util-1.5.4.tar.gz 解壓apr-util [root@host1 source]# tar xf source/httpd-2.4.20.tar.bz2 解壓httpd [root@host1 source]# cd apr-1.5.2 cd到apr-1.5.2的目錄。 [root@host1 apr-1.5.2]# ./configure --prefix=/usr/local/apr 編譯安裝的環(huán)境檢查,生成編譯安裝配置清單文件,并制定程序存放位置。 [root@host1 apr-1.5.2]# make && make install 編譯以及復制文件。 [root@host1 apr-1.5.2]# cd ../apr-util-1.5.4 cd到apr-util目錄 [root@host1 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 檢查環(huán)境,生成編譯安裝配置清單文件,指定程序存放位置以及apr的安裝位置。 [root@host1 apr-util-1.5.4]# make && make install 編譯以及復制文件。 [root@host1 apr-util-1.5.4]# cd ../httpd-2.4.20 cd到httpd-2.4.20的目錄。 [root@host1 httpd-2.4.20]# ./configure 檢查環(huán)境,生成編譯安裝配置清單文件。 > --prefix=/web/apache 指定程序存放位置。 > --sysconfdir=/etc/httpd 指定配置文件存放位置。 > --enable-so 啟用共享對象 > --enable-ssl 啟用ssl > --enable-cgi 啟用cgi > --enable-rewrite 啟用rewrite重寫 > --with-zlib 啟用zlib庫 > --with-pcre 啟用pcre正則 > --with-apr=/usr/local/apr 指定apr位置 > --with-apr-util=/usr/local/apr-util 指定apr-util位置 > --enable-modules=most 啟用大部分模塊 > --enable-mpms-shared=all 啟用所有的MPM模型,prefork worker event > --with-mpm=event 默認啟用event模型 [root@host1 source]# make && make install 編譯以及復制文件。 [root@host1 source]# cd ~ [root@host1 ~]# echo "export PATH=/web/apache/bin:$PATH" > /etc/profile.d/httpd.sh 寫入二進制可執(zhí)行文件路徑至$PATH變量。 [root@host1 ~]# ln -s /web/apache/include /usr/include/httpd 在/usr/include中創(chuàng)建鏈接指向httpd的頭文件 [root@host1 ~]# echo "PidFile "/var/run/httpd.pid"" >> /etc/httpd/httpd.conf 將PID的路徑寫入httpd的配置文件 [root@host1 ~]# echo "MANPATH /web/apache/man" >> /etc/man.config 將httpd的man文件路徑寫入man的配置文件。 [root@host1 ~]# vim /etc/rc.d/init.d/httpd 創(chuàng)建啟動腳本,并修改一下主要變量的參數(shù)的值,腳本在本文最后提供。 .... apachectl=/web/apache/bin/apachectl httpd=${HTTPD-/web/apache/bin/httpd} prog=httpd pidfile=${PIDFILE-/var/run/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd} .... [root@host1 ~]# chmod +x /etc/rc.d/init.d/httpd 給予啟動腳本執(zhí)行權限。 [root@host1 ~]# chkconfig --add httpd 將httpd添加進開機啟動。 [root@host1 ~]# chkconfig --level 3 httpd on 將httpd設置為在level 3都啟動。 [root@host1 ~]# service httpd start 腳本啟動httpd。配置文件
[root@host1 ~]# vim /etc/httpd/httpd.conf 配置httpd.conf LoadModule proxy_module modules/mod_proxy.so 啟用代理模塊。 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 啟用基于fcgi的傳輸模塊。 User apache 指定子進程的屬主。 Group apache 指定子進程的屬組。 Include /etc/httpd/extra/httpd-vhosts.conf 開啟此項會自動去讀hyyp-vhosts.conf這個配置文件。 AddType application/x-httpd-php .php 增加類型識別PHP。 AddType application/x-httpd-php-source .phps 增加類型識別PHPS。 [root@host1 ~]# vim /etc/httpd/extra/httpd-vhosts.conf 編輯httpd-vhost.conf網(wǎng)頁部署增加一個虛擬主機。 documentroot "/web/data" 此主機的根目錄。 servername www.xiao.com 此主機的服務器名稱即域名。 errorlog "/web/log/error.log" 錯誤日志存放位置。 customlog "/web/log/access.log" common 訪問日志存放位置已經(jīng)格式指定為common這個內(nèi)置配置。 proxyrequests off 關閉正想代理。 ProxyPassMatch ^/(.*.php)$ fcgi://192.168.1.3:9000/web/data/$1 將.PHP結尾的文件的請求都通過fcgi轉向192.168.1.3:9000/web/data去。 [root@host1 ~]# mkdir -pv /web/{data,log} 創(chuàng)建日志文件存放目錄。 [root@host1 ~]# service httpd reload 重載配置文件。此虛擬主機目錄/web/data的屬性。 options none 目錄選項為none。 DirectoryIndex index.php index.html 默認的主頁文件為index.php 次之為index.html allowoverride none 目錄配置檢查為none。 require all granted 允許多有主機訪問,沒有做訪問控制。
[root@host1 ~]# cd source/ [root@host1 source]# cp Discuz_X3.2_SC_UTF8.zip /web/data [root@host1 data]# unzip Discuz_X3.2_SC_UTF8.zip [root@host1 data]# chown -R apache:apache . 注:需要在fastcgi指定的PHP服務器中的路徑下?lián)碛邢嗤奈募趴赏ㄟ^http訪問192.168.1.1來調(diào)用PHP服務器,也就是說此處服務器只是存放一個對應的文件用來映射訪問,真正的操作在PHP服務器上執(zhí)行。
編譯安裝Web Server 2 (192.168.1.2)
編譯安裝過程與web sever1相同文件配置
[root@host2 ~]# vim /etc/httpd/httpd.conf 與web1基本一致,就不做解釋了。 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so User apache Group apache Include /etc/httpd/extra/httpd-vhosts.conf AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps [root@host2 ~]# vim /etc/httpd/extra/httpd-vhosts.conf網(wǎng)頁部署documentroot "/web/data" servername www.xiao.com errorlog "/web/log/error.log" customlog "/web/log/access.log" common proxyrequests off ProxyPassMatch ^/(.*.php)$ fcgi://192.168.1.3:9000/web/data/$1 [root@host2 ~]# mkdir -pv /web/{data,log} [root@host2 ~]# service httpd restartoptions none DirectoryIndex index.php index.html allowoverride none require all granted
[root@host2 ~]# cd source/ [root@host2 source]# cp Discuz_X3.2_SC_UTF8.zip /web/data [root@host2 data]# unzip Discuz_X3.2_SC_UTF8.zip [root@host2 data]# chown -R apache:apache . 注:需要在fastcgi指定的PHP服務器中的路徑下?lián)碛邢嗤奈募趴赏ㄟ^http訪問192.168.1.2來調(diào)用PHP服務器,也就是說此處服務器只是存放一個對應的文件用來映射訪問,真正的操作在PHP服務器上執(zhí)行。php server
編譯安裝php server (192.168.1.3)
[root@host3 ~]# yum groupinstall "Development Tools" -y 安裝依賴包組。 [root@host3 ~]# yum install "libxml2-devel" "bzip2-devel" "libmcrypt-devel" "mhash-devel" -y 安裝依賴的包。 [root@host3 ~]# useradd -s /sbin/nologin -r php 創(chuàng)建php程序的屬主。 [root@host3 ~]# cd source/ [root@host3 source]# tar xf php-5.6.20.tar.gz 解壓php源碼包 [root@host3 source]# cd php-5.6.20 CD進php-5.6.20目錄 [root@host3 php-5.6.20]# ./configure 檢查環(huán)境,生成編譯安裝配置清單文件。 --prefix=/usr/local/php 指定php程序安裝位置。 --with-mysql=mysqlnd 指定mysql為mysqlnd驅(qū)動,mysqlnd是新版的mysql的驅(qū)動。 --with-openssl 啟用openssl --with-mysqli=mysqlnd 指定mysqli為mysqlnd驅(qū)動,mysqli為php-mysql的進階擴展。 --enable-mbstring 支持Multi-Byte String ,編碼庫。 --with-freetype-dir 啟用freetype字體引擎。 --with-jpeg-dir 啟用支持jpeg格式的圖片。 --with-png-dir 啟用支持png格式的圖片。 --with-zlib 啟用支持zlib數(shù)據(jù)壓縮。 --with-libxml-dir=/usr 啟用xml的支持庫,支持xml格式的文件 --enable-xml 啟用xml功能。 --enable-sockets 啟用套接字。 --enable-fpm 啟用fpm,fastcgi管理器。 --with-mcrypt 啟用加密擴展庫mcrypt。 --with-config-file-path=/etc 指定配置文件php.ini路徑。 --with-config-file-scan-dir=/etc/php.d 指定配置文件目錄,php.d --with-bz2 [root@host3 php-5.6.20]# make && make install 編譯安裝,復制文件 [root@host3 php-5.6.20]# cp php.ini-production /etc/php.ini 復制的配置文件php.ini。 [root@host3 php-5.6.20]# cp lamp/php-5.6.20/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm 復制php-fpm的啟動腳本。 [root@host3 php-5.6.20]# chmod +x /etc/rc.d/init.d/php-fpm 給予啟動腳本執(zhí)行權限。 [root@host3 php-5.6.20]# echo "export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH" > /etc/profile.d/php.sh 指定二進制可執(zhí)行文件。 [root@host3 php-5.6.20]# echo "/usr/local/php/lib" > /etc/ld.so.conf.d/php.conf 寫入庫文件。 [root@host3 php-5.6.20]# ln -sv /usr/local/php/include /usr/include/php 寫入頭文件。 [root@host3 php-5.6.20]# echo "MANPATH /usr/local/php/man" >> /etc/man.config 寫入man文件。 [root@host3 php-5.6.20]# cp etc/php-fpm.conf.default etc/php-fpm.conf 復制php-fpm的配置文件。 [root@host3 php-5.6.20]# vim etc/php-fpm.conf 編輯php-fpm.conf pid = /usr/local/php/var/run/php-fpm.pid PID路徑 user = php 進程屬主 group = php 進程屬組 listen = 192.168.1.3:9000 監(jiān)聽的IP,端口。 pm = dynamic 指定進程管理方式為dynamic,動態(tài)調(diào)整。也可設置為靜態(tài)static。 pm.max_children = 50 允許的最大的php-fpm子進程數(shù)。 pm.start_servers = 5 動態(tài)模式下,PHP啟動時的php-fpm進程數(shù)。 pm.min_spare_servers = 2 動態(tài)模式下服務器空閑時最小的php-fpm進程數(shù)。 pm.max_spare_servers = 8 動態(tài)模式下服務器空閑時最大的php-fpm進程數(shù)。 [root@host3 php-5.6.20]# chkconfig --add php-fpm 加入開機自啟。 [root@host3 php-5.6.20]# chkconfig --level 3 php-fpm on 在level 3下開機自啟動。 [root@host3 php-5.6.20]# service php-fpm start 腳本啟動。xcache加速PHP
[root@host3 source]# tar xf xcache-3.2.0.tar.gz [root@host3 source]# cd xcache-3.2.0 [root@host3 xcache-3.2.0]# /usr/local/php/bin/phpize 啟用php的環(huán)境檢查,通過后生成xcache的configure文件 [root@host3 xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config 檢查環(huán)境,生成編譯安裝配置清單文件,開啟xcache,指定php-config的位置,php-config存放了php的配置信息。 [root@host3 xcache-3.2.0]# make && make install [root@host3 xcache-3.2.0]# mkdir /etc/php.d [root@host3 xcache-3.2.0]# cp xcache.ini /etc/php.d 復制xcache.ini到php.d目錄下。 [root@host3 xcache-3.2.0]# vim /etc/php.d/xcache.ini 配置xcache.ini extension = /usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/xcache.so 指定共享對象位置。網(wǎng)頁部署
[root@host3 ~]# mkdir -pv /web/data [root@host3 ~]# cd source/ [root@host3 source]# cp Discuz_X3.2_SC_UTF8.zip /web/data [root@host3 data]# unzip Discuz_X3.2_SC_UTF8.zip [root@host3 data]# chown -R php:php . 注:此處的網(wǎng)頁文件才是用戶通過httpd訪問到的網(wǎng)頁文件,也就是說用戶在訪問192.168.1.1時訪問的網(wǎng)頁是位于192.168.1.3上的。DBserver
二進制文件安裝DBserver (192.168.1.4)
[root@host4 ~]# useradd -s /sbin/nologin -r mysql 創(chuàng)建系統(tǒng)用戶musql,不允許登陸。 [root@host4 ~]# cd source/ [root@host4 source]# tar xf mariadb-5.5.48-linux-x86_64.tar.gz -C /usr/local/ 解壓源碼文件并且解壓至指定目錄。 [root@host4 source]# cd /usr/local [root@host4 local]# ln -sv mariadb-5.5.48-linux-x86_64 mysql 連接目錄為mysql目錄 [root@host4 local]# cd mysql [root@host4 mysql]# chown -R mysql:mysql . 將mysql目錄下的文件遞歸的屬主屬組都改為mysql [root@host4 mysql]# bash scripts/mysql_install_db --user=mysql --datadir=/mysql/data 執(zhí)行安裝腳本并且指定進程用戶與數(shù)據(jù)存放路徑。 [root@host4 mysql]# chown -R root . 更改屬主為root [root@host4 mysql]# cp support-files/my-large.cnf /etc/my.cnf 復制mysql的配置文件 [root@host4 mysql]# vim /etc/my.cnf 配置my.cnf thread_concurrency = 4 內(nèi)核數(shù)量*2,指定內(nèi)部并發(fā)數(shù)量,決定性能。 datadir= /mysql/data 指定數(shù)據(jù)存放位置。 [root@host4 mysql]# echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh 寫入二進制文件路徑。 [root@host4 mysql]# echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf 寫入庫文件。 [root@host4 mysql]# ln -sv /usr/local/mysql/include /usr/include/mysql 寫入頭文件。 [root@host4 mysql]# echo "MANPATH /usr/local/mysql/man" >> /etc/man.config 寫入man文件。 [root@host4 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld 復制腳本啟動文件至指定目錄。 [root@host4 mysql]# chmod +x /etc/rc.d/init.d/mysqld 執(zhí)行權限給腳本啟動文件。 [root@host4 mysql]# chkconfig --add mysqld 添加進開機自啟。 [root@host4 mysql]# chkconfig --level mysqld on 啟用開機自啟。 [root@host4 mysql]# service mysqld start 啟動mysql網(wǎng)頁部署
[root@host4 ~]# mysql MariaDB [(none)]> create database dz ; MariaDB [(none)]> use dz ; MariaDB [dz]> create table ; MariaDB [dz]> grant all on dz.* to dzadmin@"192.168.1.3" identified by "redhat" ; MariaDB [dz]> flush privileges ; MariaDB [dz]> exit總結
1> LAMP架構的實驗拖了好多天才動手,結果現(xiàn)在進度到nginx了才開始動手實驗,實驗過程中,編譯安裝就是不斷出錯與解決的問題,遇到出錯一般都是軟件沒有安裝。 2> 在編譯安裝前,一定要檢查是不是已經(jīng)默認安裝過了程序,不然會非常亂,比如在這次試驗中,因為本機已經(jīng)默認安裝了httpd-2.2與apr-1.3.9,apr-util-1.3.X ,所以導致在start httpd的時候啟動了2.2的版本,通過rpm -qi才知道。 3> 在編譯安裝完成后,要完成收尾工作,比如配置文件,鏈接庫,鏈接二進制文件,鏈接include文件,加啟動腳本等。 4> 最后的網(wǎng)頁部署沒有仔細列出步驟,但大致以寫出,可以通過google等方式自行查詢,這里選擇使用的php網(wǎng)頁為discuz! 根據(jù)喜好也可選擇其他如word press等。 5> 此次架構實驗為第一步的初步搭建LAMP的基本架構,后續(xù)會在學習的基礎上進一步迭代添加如日志服務器,DNS服務器,負載均衡服務器,代理服務器等。 6> 由于本次實驗PHP是基于FASTCGI來將PHP服務器獨立出來的,所以所有網(wǎng)頁文件都需要在每一個服務器上存放一份,會非常麻煩,解決方案就是NFS,留在下一次實驗來補充完善。httpd啟動腳本(centos6)
#!/bin/bash # # httpd Startup script for the Apache HTTP Server # # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve # HTML files and CGI. # processname: httpd # config: /etc/httpd/conf/httpd.conf # config: /etc/sysconfig/httpd # pidfile: /var/run/httpd.pid # 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 swallowing up a pass-phrase prompt if # mod_ssl needs a pass-phrase from the user. 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, server binary, and short-form for messages. apachectl=/web/apache/bin/apachectl httpd=${HTTPD-/web/apache/bin/httpd} prog=httpd pidfile=${PIDFILE-/var/run/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd} RETVAL=0 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 10 $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=$? echo $"not reloading due to configuration syntax error" failure $"not reloading $httpd due to configuration syntax error" else killproc -p ${pidfile} $httpd -HUP RETVAL=$? fi echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} $httpd RETVAL=$? ;; restart) stop start ;; condrestart) if [ -f ${pidfile} ] ; then stop start fi ;; reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}" exit 1 esac exit $RETVAL
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40713.html
摘要:參與企業(yè)將作為本次黑客松大賽的戰(zhàn)略合作伙伴月日月日選手報名選手可關注云原生技術社區(qū)公眾號,后續(xù)公眾號會發(fā)布黑客召集令,填寫個人團隊參賽信息報名。月日日賽題篩選公布此階段中,報名入圍的個人團隊選手會收到大賽組委會邀約參賽通知。 showImg(https://segmentfault.com/img/bVbuXYj?w=900&h=500); 9月,坐標北京。CNBPA(云原生技術實踐聯(lián)...
摘要:阿里云學生組團活動詳情介紹配置服務器服務器購買成功之后,找到你服務器的公網(wǎng)地址。這里我把公網(wǎng)隱藏了設置安全組服務器需要端口放行,否則你的端口是無法訪問的,因為安全需要,所以云服務器存在安全組這個東西。前文概述出于好奇,我用學生優(yōu)惠租了一臺阿里云服務器,打算做一些Java web的開發(fā),但是畢竟是第一次接觸這樣的東西,還是比較陌生,在這個過程中遇到了一些問題(肯定會遇到問題的),但是呢,在網(wǎng)上...
摘要:阿里云學生組團活動詳情介紹配置服務器服務器購買成功之后,找到你服務器的公網(wǎng)地址。這里我把公網(wǎng)隱藏了找到你的公網(wǎng)找到你的公網(wǎng)設置安全組服務器需要端口放行,否則你的端口是無法訪問的,因為安全需要,所以云服務器存在安全組這個東西。前文概述 出于好奇,我用學生優(yōu)惠租了一臺阿里云服務器,打算做一些Java web的開發(fā),但是畢竟是第一次接觸這樣的東西,還是比較陌生,在這個過程中遇到了一些問題(肯定會遇...
閱讀 2849·2021-08-20 09:37
閱讀 1607·2019-08-30 12:47
閱讀 1090·2019-08-29 13:27
閱讀 1685·2019-08-28 18:02
閱讀 749·2019-08-23 18:15
閱讀 3084·2019-08-23 16:51
閱讀 931·2019-08-23 14:13
閱讀 2125·2019-08-23 13:05