摘要:報文語法格式報文報文請求流程用戶請求先到達(dá)內(nèi)核空間的網(wǎng)絡(luò)協(xié)議棧,內(nèi)核空間通過服務(wù)所監(jiān)聽的套接字,可以將用戶請求轉(zhuǎn)發(fā)給用戶空間的服務(wù)進(jìn)程。作為獨立的守護(hù)進(jìn)程,偵聽一個套接字,接收并響應(yīng)來自前端程序的請求,即為客戶端。
博文參考
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)站或者服務(wù)器的開源軟件,本身都是各自獨立的程序,由于常被放在一起使用,因此稱之為LAMP,LAMP是最強大的網(wǎng)站解決方案特點
LAMP具有Web資源豐富、輕量、快速開發(fā)的特點,其優(yōu)勢在于通用、跨平臺、高性能、低價格,因此LAMP無論是性能、質(zhì)量還是價格都是企業(yè)搭建網(wǎng)站的首選方案。理解Web資源的概念
靜態(tài)資源:原始形式與響應(yīng)給客戶端的結(jié)果一致,如jpeg,html,plaintext,占80%
CGI:Common Gateway Interface動態(tài)資源:原始形式通常為程序文件,需運行對應(yīng)環(huán)境的子進(jìn)程返回執(zhí)行結(jié)果,占20%.但需要IO請求的資源大約為20%.
CGI協(xié)議定義了Web服務(wù)器程序與后端服務(wù)進(jìn)程進(jìn)行數(shù)據(jù)交換的規(guī)范,以prefork為例,Browser并行請求多個資源時,httpd為每個請求建立一個子進(jìn)程,如果請求動態(tài)資源時,httpd調(diào)用php模塊對動態(tài)資源進(jìn)行處理,再返回給Web服務(wù)器響應(yīng)客戶端。過程中httpd與php及mysqld之間的通信就使用了CGI接口。httpd 完整的http請求處理過程
(1) 建立或處理連接:接收請求或拒絕請求; (2) 接收請求:接收來自于網(wǎng)絡(luò)上的主機(jī)請求報文中對某特定資源的一次請求的過程; (3) 處理請求:對請求報文進(jìn)行解析,獲取客戶端請求的資源及請求方法等相關(guān)信息; (4) 訪問資源:獲取請求報文中請求的資源; (5) 構(gòu)建響應(yīng)報文: (6) 發(fā)送響應(yīng)報文: (7) 記錄日志:httpd所支持的處理模型有哪些,他們的分別使用于哪些環(huán)境
MPM:Multipath processing Modules (多路處理模塊) prefork:多進(jìn)程模型,每個進(jìn)程響應(yīng)一個請求; 一個主進(jìn)程:負(fù)責(zé)生成子進(jìn)程及回收子進(jìn)程;負(fù)責(zé)創(chuàng)建套接字;負(fù)責(zé)接收請求,并將其派發(fā)給某子進(jìn)程進(jìn)行處理; n個子進(jìn)程:每個子進(jìn)程處理一個請求; 工作模型:會預(yù)先生成幾個空閑進(jìn)程,隨時等待用于響應(yīng)用戶請求;最大空閑和最小空閑; worker:多進(jìn)程多線程模型,每線程處理一個用戶請求; 一個主進(jìn)程:負(fù)責(zé)生成子進(jìn)程;負(fù)責(zé)創(chuàng)建套接字;負(fù)責(zé)接收請求,并將其派發(fā)給某子進(jìn)程進(jìn)行處理; 多個子進(jìn)程:每個子進(jìn)程負(fù)責(zé)生成多個線程; 并發(fā)響應(yīng)數(shù)量:m*n每個線程:負(fù)責(zé)響應(yīng)用戶請求; m:子進(jìn)程數(shù)量 n:每個子進(jìn)程所能創(chuàng)建的最大線程數(shù)量; event:事件驅(qū)動模型,多進(jìn)程模型,每個進(jìn)程響應(yīng)多個請求; 一個主進(jìn)程 :負(fù)責(zé)生成子進(jìn)程;負(fù)責(zé)創(chuàng)建套接字;負(fù)責(zé)接收請求,并將其派發(fā)給某子進(jìn)程進(jìn)行處理; 子進(jìn)程:基于事件驅(qū)動機(jī)制直接響應(yīng)多個請求; httpd-2.2: 仍為測試使用模型; httpd-2.4:event可生產(chǎn)環(huán)境中使用;請求流程
一次http事物
客戶端通過瀏覽器發(fā)出http請求,請求當(dāng)中包含一部分內(nèi)容,內(nèi)容不是最關(guān)鍵的,關(guān)鍵的是在內(nèi)容前面附加一個http請求首部,用來告訴服務(wù)器端,客戶端是如何請求的,用哪種方法進(jìn)行請求的,請求哪一個虛擬機(jī)等等。 請求發(fā)送到服務(wù)器端后,服務(wù)器端要分析請求,分析這個請求首部用什么url,用什么方法請求,請求哪個主機(jī),用哪個協(xié)議等等。然后構(gòu)建響應(yīng)報文,響應(yīng)時還要告訴客戶端我是怎么響應(yīng)你的,給出響應(yīng)狀態(tài)碼(100-500)??蛻舳死眠@些首部信息完成內(nèi)容之外的交換信息。則這一次http事務(wù)完成。 報文語法格式: request 報文response 報文
請求流程
用戶請求先到達(dá)內(nèi)核空間的網(wǎng)絡(luò)協(xié)議棧,內(nèi)核空間通過web服務(wù)所監(jiān)聽的套接字socket,可以將用戶請求轉(zhuǎn)發(fā)給用戶空間的http服務(wù)進(jìn)程。靜態(tài)資源是http服務(wù)進(jìn)程向內(nèi)核發(fā)請求,去磁盤找到這個資源,沒有就顯示Not Found,有就把加載的資源返回給進(jìn)程,先到內(nèi)核自己的內(nèi)存中。其中進(jìn)程把任務(wù)交給內(nèi)核后到內(nèi)核把資源返回進(jìn)程之間,進(jìn)程處于空閑狀態(tài),我們把這個狀態(tài)稱為阻塞狀態(tài)。拿到資源后,進(jìn)程構(gòu)建響應(yīng)報文,把資源的前面加上響應(yīng)首部,發(fā)到內(nèi)核空間,通過通信子網(wǎng)進(jìn)行向外發(fā)送。即達(dá)成了一次http事務(wù)吧。
靜態(tài)資源:Client -- http 協(xié)議--> httpd
補充: 如果不阻塞,則注冊一個事務(wù),就去做別的事情,等這邊的事情好了,提醒一下就好了,這種機(jī)制叫做AIO機(jī)制。 上面的,內(nèi)核加載完了資源放到了內(nèi)存中,然后又返給進(jìn)程,這個時候又浪費了一次用戶空間,所以有一種Sendfile機(jī)制,可以直接在內(nèi)核里面添加響應(yīng)首部,然后傳給用戶。這樣就省去了一回用戶空間,提高了效率。
動態(tài)資源請求
從磁盤加載后,進(jìn)程將資源傳給PHP,PHP根據(jù)是否用到數(shù)據(jù)庫去調(diào)用數(shù)據(jù)庫,都處理好了,傳遞給進(jìn)程。 客戶端通過http協(xié)議將請求傳給內(nèi)核,那么httpd進(jìn)程通過三種方法與php結(jié)合: 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中的程序,支持不同的存儲、字符、加密解密的功能,這些機(jī)制都是模塊化(extensions)實現(xiàn)的,如php與MySQL的連接需安裝php-mysql模塊。php的模塊是為了豐富 php 功能的擴(kuò)展,而php作為httpd的模塊是為了讓W(xué)eb服務(wù)器支持動態(tài)Web資源解析的功能。httpd與php的結(jié)合方式主要有三種
CGI:由php解釋器與httpd通過CGI通信
Module:不同的mpm需要不同的php程序包,無法混用
prefork:libphp程序包
worker, event:libphp-zts程序包
FastCGI
fcgi是簡裝版的CGI協(xié)議,httpd只把URL重新封裝后通過 FCGI 傳遞給 fcgi 服務(wù)端,動態(tài)資源由 fcgi 服務(wù)器端從 mysql 加載,處理完成再返回給httpd,此時httpd相當(dāng)于是一個反向的代理服務(wù)器,接收任意客戶端的請求,為fcgi Server提供服務(wù)。 此時php以fpm機(jī)制監(jiān)聽在一個套接字上,可運行在另一臺主機(jī)上,如httpd作為一個反向代理服務(wù)器且分發(fā)動態(tài)資源請求給多個fcgi服務(wù)器,以完成更好的動態(tài)資源處理,當(dāng)然需要處理好用戶section丟失的問題,一種方式通過ip地址識別用戶;另一種方式通過綁定cookie,且同步section給多態(tài)服務(wù)器;另一種方式是把section放在多帶帶的具有冗余功能的服務(wù)器中保存在redis(nosql)數(shù)據(jù)庫中; php-fpm工作模式類似于httpd的prefork,主控進(jìn)程接收請求,通過創(chuàng)建子進(jìn)程處理httpd客戶端的并發(fā)請求。子進(jìn)程可按需生成,也可動態(tài)生成,通過連接池機(jī)制管理子進(jìn)程的數(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 #默認(rèn)為開發(fā)環(huán)境 ; Development Value: On #開發(fā)環(huán)境 ; Production Value: Off #生產(chǎn)環(huán)境 date.timezone = Asia/Shanghai #默認(rèn)讀取系統(tǒng)時區(qū),會有waringFastCGI方式安裝php
PHP-FPM 是一個簡單可靠的 FastCGI 進(jìn)程管理器(FastCGI Process Manager),從 PHP 5.3.3 開始就成為了 PHP 的內(nèi)置管理器。Apache 官方網(wǎng)站也提供了配置 Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 運行 php 程序的基本方法和設(shè)置運行方式的簡單介紹。 php-fpm(FastCGI Process Manager)作為獨立的守護(hù)進(jìn)程,偵聽一個套接字,接收并響應(yīng)來自前端程序的請求,即httpd為FastCGI客戶端。對于繁忙的站點能提升并發(fā)性能。因為 Apache 可以專心處理除 php 之外的靜態(tài)網(wǎng)頁及元素,反而 httpd 進(jìn)程本身占用的 CPU 和內(nèi)存可以顯著降低,從而從整體上降低資源消耗。另外一點是方便后期升級為分布式的Web服務(wù)器。代理服務(wù)器
正向:為有限客戶端發(fā)送給任意服務(wù)器,服務(wù)于客戶端
php的配置文件反向:接收來自任意客戶端請求,發(fā)送給有限服務(wù)器,服務(wù)于服務(wù)端
LAMP實驗搭建官方說明:http://php.net/manual/zh/ini....
1. 實驗主框架LAMP采用編譯安裝。 2. 分離HTTPD,PHP,MARIADB。 3. 兩臺服務(wù)器能夠各自被訪問且內(nèi)容相同。程序包準(zhǔn)備
apr-1.5.2.tar.gz apr是apache的運行庫,提供了軟件允許所需要的庫文件。 apr-util-1.5.4.tar.gz 可以理解為apr的擴(kuò)展,支持更加多的數(shù)據(jù)接口與封裝接口。 httpd-2.4.20.tar.bz2 http程序,2.4支持了眾多新特性,最為主要的是event模型。 mariadb-5.6.20.tar.gz 完全開源的關(guān)系型數(shù)據(jù)庫,是mysql的一個分支。 php-5.6.20.tar.gz php程序,負(fù)責(zé)解析動態(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ā)的論壇,可選。軟件準(zhǔn)備
[開發(fā)包組] Development Tools 開發(fā)工具包 [apache] pcre-devel pcre正則表達(dá)式支持庫 openssl-devel openssl開發(fā)包 [PHP] libxml2-devel xml的開發(fā)包 bzip2-devel bzip2的開發(fā)包 libmcrypt-devel 加密擴(kuò)展開發(fā)包 mhash-devel mhash加密開發(fā)包配置文件預(yù)覽表
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 安裝正則表達(dá)式的開發(fā)包pcre-devel 與 openssl的開發(fā)包openssl-devel [root@host1 ~]# rpm -q apr-util && yum remove apr-util -y 查詢apr-util是否安裝,安裝了就卸載,是為了防止默認(rèn)安裝了低版本的apr而使得非?;靵y。 [root@host1 ~]# rpm -q apr && yum remove apr -y 查詢apr是否安裝,安裝了就卸載,是為了防止默認(rèn)安裝了低版本的apr而使得非常混亂。 [root@host1 ~]# rpm -q httpd && yum remove httpd -y 查看httpd是否安裝,安裝了就卸載,是為了防止默認(rèn)安裝了低版本的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 編譯以及復(fù)制文件。 [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 編譯以及復(fù)制文件。 [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 默認(rèn)啟用event模型 [root@host1 source]# make && make install 編譯以及復(fù)制文件。 [root@host1 source]# cd ~ [root@host1 ~]# echo "export PATH=/web/apache/bin:$PATH" > /etc/profile.d/httpd.sh 寫入二進(jìn)制可執(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í)行權(quán)限。 [root@host1 ~]# chkconfig --add httpd 將httpd添加進(jìn)開機(jī)啟動。 [root@host1 ~]# chkconfig --level 3 httpd on 將httpd設(shè)置為在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 指定子進(jìn)程的屬主。 Group apache 指定子進(jìn)程的屬組。 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)頁部署增加一個虛擬主機(jī)。 documentroot "/web/data" 此主機(jī)的根目錄。 servername www.xiao.com 此主機(jī)的服務(wù)器名稱即域名。 errorlog "/web/log/error.log" 錯誤日志存放位置。 customlog "/web/log/access.log" common 訪問日志存放位置已經(jīng)格式指定為common這個內(nèi)置配置。 proxyrequests off 關(guān)閉正想代理。 ProxyPassMatch ^/(.*.php)$ fcgi://192.168.1.3:9000/web/data/$1 將.PHP結(jié)尾的文件的請求都通過fcgi轉(zhuǎn)向192.168.1.3:9000/web/data去。 [root@host1 ~]# mkdir -pv /web/{data,log} 創(chuàng)建日志文件存放目錄。 [root@host1 ~]# service httpd reload 重載配置文件。此虛擬主機(jī)目錄/web/data的屬性。 options none 目錄選項為none。 DirectoryIndex index.php index.html 默認(rèn)的主頁文件為index.php 次之為index.html allowoverride none 目錄配置檢查為none。 require all granted 允許多有主機(jī)訪問,沒有做訪問控制。
[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服務(wù)器中的路徑下?lián)碛邢嗤奈募趴赏ㄟ^http訪問192.168.1.1來調(diào)用PHP服務(wù)器,也就是說此處服務(wù)器只是存放一個對應(yīng)的文件用來映射訪問,真正的操作在PHP服務(wù)器上執(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服務(wù)器中的路徑下?lián)碛邢嗤奈募趴赏ㄟ^http訪問192.168.1.2來調(diào)用PHP服務(wù)器,也就是說此處服務(wù)器只是存放一個對應(yīng)的文件用來映射訪問,真正的操作在PHP服務(wù)器上執(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進(jìn)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的進(jìn)階擴(kuò)展。 --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 啟用加密擴(kuò)展庫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 編譯安裝,復(fù)制文件 [root@host3 php-5.6.20]# cp php.ini-production /etc/php.ini 復(fù)制的配置文件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 復(fù)制php-fpm的啟動腳本。 [root@host3 php-5.6.20]# chmod +x /etc/rc.d/init.d/php-fpm 給予啟動腳本執(zhí)行權(quán)限。 [root@host3 php-5.6.20]# echo "export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH" > /etc/profile.d/php.sh 指定二進(jìn)制可執(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 復(fù)制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 進(jìn)程屬主 group = php 進(jìn)程屬組 listen = 192.168.1.3:9000 監(jiān)聽的IP,端口。 pm = dynamic 指定進(jìn)程管理方式為dynamic,動態(tài)調(diào)整。也可設(shè)置為靜態(tài)static。 pm.max_children = 50 允許的最大的php-fpm子進(jìn)程數(shù)。 pm.start_servers = 5 動態(tài)模式下,PHP啟動時的php-fpm進(jìn)程數(shù)。 pm.min_spare_servers = 2 動態(tài)模式下服務(wù)器空閑時最小的php-fpm進(jìn)程數(shù)。 pm.max_spare_servers = 8 動態(tài)模式下服務(wù)器空閑時最大的php-fpm進(jìn)程數(shù)。 [root@host3 php-5.6.20]# chkconfig --add php-fpm 加入開機(jī)自啟。 [root@host3 php-5.6.20]# chkconfig --level 3 php-fpm on 在level 3下開機(jī)自啟動。 [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 復(fù)制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
二進(jìn)制文件安裝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í)行安裝腳本并且指定進(jìn)程用戶與數(shù)據(jù)存放路徑。 [root@host4 mysql]# chown -R root . 更改屬主為root [root@host4 mysql]# cp support-files/my-large.cnf /etc/my.cnf 復(fù)制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 寫入二進(jìn)制文件路徑。 [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 復(fù)制腳本啟動文件至指定目錄。 [root@host4 mysql]# chmod +x /etc/rc.d/init.d/mysqld 執(zhí)行權(quán)限給腳本啟動文件。 [root@host4 mysql]# chkconfig --add mysqld 添加進(jìn)開機(jī)自啟。 [root@host4 mysql]# chkconfig --level mysqld on 啟用開機(jī)自啟。 [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總結(jié)
1> LAMP架構(gòu)的實驗拖了好多天才動手,結(jié)果現(xiàn)在進(jìn)度到nginx了才開始動手實驗,實驗過程中,編譯安裝就是不斷出錯與解決的問題,遇到出錯一般都是軟件沒有安裝。 2> 在編譯安裝前,一定要檢查是不是已經(jīng)默認(rèn)安裝過了程序,不然會非常亂,比如在這次試驗中,因為本機(jī)已經(jīng)默認(rèn)安裝了httpd-2.2與apr-1.3.9,apr-util-1.3.X ,所以導(dǎo)致在start httpd的時候啟動了2.2的版本,通過rpm -qi才知道。 3> 在編譯安裝完成后,要完成收尾工作,比如配置文件,鏈接庫,鏈接二進(jìn)制文件,鏈接include文件,加啟動腳本等。 4> 最后的網(wǎng)頁部署沒有仔細(xì)列出步驟,但大致以寫出,可以通過google等方式自行查詢,這里選擇使用的php網(wǎng)頁為discuz! 根據(jù)喜好也可選擇其他如word press等。 5> 此次架構(gòu)實驗為第一步的初步搭建LAMP的基本架構(gòu),后續(xù)會在學(xué)習(xí)的基礎(chǔ)上進(jìn)一步迭代添加如日志服務(wù)器,DNS服務(wù)器,負(fù)載均衡服務(wù)器,代理服務(wù)器等。 6> 由于本次實驗PHP是基于FASTCGI來將PHP服務(wù)器獨立出來的,所以所有網(wǎng)頁文件都需要在每一個服務(wù)器上存放一份,會非常麻煩,解決方案就是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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40713.html
摘要:參與企業(yè)將作為本次黑客松大賽的戰(zhàn)略合作伙伴月日月日選手報名選手可關(guān)注云原生技術(shù)社區(qū)公眾號,后續(xù)公眾號會發(fā)布黑客召集令,填寫個人團(tuán)隊參賽信息報名。月日日賽題篩選公布此階段中,報名入圍的個人團(tuán)隊選手會收到大賽組委會邀約參賽通知。 showImg(https://segmentfault.com/img/bVbuXYj?w=900&h=500); 9月,坐標(biāo)北京。CNBPA(云原生技術(shù)實踐聯(lián)...
摘要:阿里云學(xué)生組團(tuán)活動詳情介紹配置服務(wù)器服務(wù)器購買成功之后,找到你服務(wù)器的公網(wǎng)地址。這里我把公網(wǎng)隱藏了設(shè)置安全組服務(wù)器需要端口放行,否則你的端口是無法訪問的,因為安全需要,所以云服務(wù)器存在安全組這個東西。前文概述出于好奇,我用學(xué)生優(yōu)惠租了一臺阿里云服務(wù)器,打算做一些Java web的開發(fā),但是畢竟是第一次接觸這樣的東西,還是比較陌生,在這個過程中遇到了一些問題(肯定會遇到問題的),但是呢,在網(wǎng)上...
摘要:阿里云學(xué)生組團(tuán)活動詳情介紹配置服務(wù)器服務(wù)器購買成功之后,找到你服務(wù)器的公網(wǎng)地址。這里我把公網(wǎng)隱藏了找到你的公網(wǎng)找到你的公網(wǎng)設(shè)置安全組服務(wù)器需要端口放行,否則你的端口是無法訪問的,因為安全需要,所以云服務(wù)器存在安全組這個東西。前文概述 出于好奇,我用學(xué)生優(yōu)惠租了一臺阿里云服務(wù)器,打算做一些Java web的開發(fā),但是畢竟是第一次接觸這樣的東西,還是比較陌生,在這個過程中遇到了一些問題(肯定會遇...
閱讀 2890·2021-08-20 09:37
閱讀 1616·2019-08-30 12:47
閱讀 1101·2019-08-29 13:27
閱讀 1692·2019-08-28 18:02
閱讀 757·2019-08-23 18:15
閱讀 3094·2019-08-23 16:51
閱讀 938·2019-08-23 14:13
閱讀 2156·2019-08-23 13:05