1. 程式人生 > >LAMP詳解(二)

LAMP詳解(二)

cgi www perl gre tar.gz emd init.d .html product

編譯安裝LAMP
一、安裝mariadb
二、安裝httpd
三、php編譯
四、apache的代理指令
五、其他


LAMP結合的方式
c---httpd[modules]
1.httpd基於模塊生成子進程,處理動態請求,
2.httpd使用fcgi模塊,反向代理到fpm服務,fpm負責加載資源並處理動態資源
PHP是cpu密集型
mariadb即是IO密集型也是CPU密集型

一般建議fpm和httpd在同一個主機上,mariadb在同一個主機上
但是建議做實驗的時候,三個機器同時做
動態資源是瓶頸:
ps aux | egrep -i "httpd|fpm|mysql" //這三個服務都啟動了
ab -n 1000 -c 200 http://192.168.4.100/pmd/index.php //測試動態資源響應速度
ab -n 1000 -c 100 http://192.168.4.100/a.html //速度接近10倍

編譯安裝LAMP:
httpd:編譯安裝,httpd-2.4,apr,apr-utils
php5:編譯安裝php5.4,php5.3
mariadb:通用二進制安裝,mariadb-5.5版本

註意:任何一個程序包被編譯操作依賴時,需要安裝此程序包的“開發”組件,其包名一般為name-resolve-VERSION
需要先安裝mairadb,因為php依賴

一、安裝mariadb 二進制

tar xvf mariadb-10.1.8-linux-glibc_214-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.1.8-linux-x86_64/ mysql
id mysql || useradd -r mysql
cd mysql
chown root:mysql ./*
mkdir /mydata/data/ -pv
chown mysql.mysql /mydata/data/ -R
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x
chkconfig --add mysqld

mkdir /etc/mysql
cp support-files/my-large.cnf /etc/mysql/my.cnf
vim my.cnf
[mysqld]
data_dir = /mydata/data
skip_name_resolve = on
innodb_file_per_table = on

scripts/mysql_install_db --user=mysql --skip-name-resolve --datadir=/mydata/data
service mysqld start
後續:
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
. /etc/profile.d/mysql.sh

vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
ldconfig
ldconfig -p |grep mysql

ln -sv /usr/local/mysql/include/ /usr/include/
錯誤:libjemalloc.so.1: cannot open shared object file: No such file or directory
libjemalloc.so.1 //找不到
yum install jemalloc -y

httpd-2.4.9
php-5.4.26

yum group install "Server Platform Development" "Development Tools"
yum install apr-devel -y
yum install apr-util-devel -y
yum install pcre-devel -y
yum install openssl-devel -y


二、安裝httpd
tar xvf httpd-2.4.9.tar.bz2 -C /usr/local/
ln -sv httpd-2.4.9/ httpd
./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24
--enable-so --enable-ssl --enable-rewrite --with-zlib --with-pcre --with-apr=/usr --with-apr-util=/usr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
//默認使用的是prefork模型
make -j 4 && make install
編譯安裝http2.4
# 各編譯參數詳解
--prefix:#安裝路徑
--sysconfdir:#指定配置文件路徑
--enable-so:#DSO兼容,DSO=Dynamic Shared Object,動態共享對象,可實現模塊動態生效
--enable-ssl:#支持SSL/TLS,可以實現https訪問
--enable-cgi:#支持CGI腳本(默認對非線程的MPM模式開啟)
--enable-rewrite:#啟用Rewrite功能,url重寫
--enable-deflate:#支持壓縮
--with-z:#使用指定的zlib庫,不指定路徑會自動尋找
--with-pcre:#使用指定的PCRE庫,不指定路徑會自動尋找,支持perl擴展的正則表達式
--with-apr:#指定apr安裝路徑
--with-apr-util:#指定apr-util安裝路徑
--enable-modules:#支持動態啟用的模塊,可選參數有“all”,“most”,“few”,“reallyall”
--enable-mpms-shared:#支持動態加載的MPM模塊,可選“all”
--with-mpm:#設置默認啟用的MPM模式

vim /etc/profile.d/apache.sh
export PATH=/usr/local/apache24/bin:$PATH
source /etc/profile.d/apache.sh
apachectl start
瀏覽器測試一下

vim /usr/lib/systemd/system/httpd.service //提供unit啟動腳本

三、php編譯
要確定自己的mpm使用的是哪個模塊profork則,php編譯成php進程式的模塊的php5,worker或event,php5對應php5-zts
因為:進程式的mpm和線程式的mpm是不兼容的
yum install libxml2-devel libmcrypt-devel bzip2-devel -y
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config
--enable-mbstring --with-png-dir --with-jpeg-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache24/bin/apxs --with-mycrypt --with-config-file-path=/etc/ --with-config-file-scan-dir=/etc/php.d --with-bz2
make -j 4 && make install
//編譯為httpd的模塊

cp php.ini-production /etc/php.ini

vim httpd.conf
AddType application/x-httpd-php .php
Directory index.php index.htm
編輯測試頁為index.php

四、apache的代理指令
這幾個都是APACHE的代理指令:
1、ProxyPass:
語法:ProxyPass [path] !|url
它主要是用作URL前綴匹配,不能有正則表達式,它裏面配置的Path實際上是一個虛擬的路徑,在反向代理到後端的url後,path是不會帶過去的,使用示例:

1)、ProxyPass /images/ !
這個示例表示,/images/的請求不被轉發。
2)、ProxyPass /mirror/foo/ http://backend.example.com/
我們假設當前的服務地址是http://example.com/,如果我們做下面這樣的請求:
http://example.com/mirror/foo/bar
那將被轉成內部請求:
http://backend.example.com/bar
註:配置的時候,不需要被轉發的請求,要配置在需要被轉發的請求前面。
2、ProxyPassMatch:
語法:ProxyPassMatch [regex] !|url
這個實際上是url正則匹配,而不是簡單的前綴匹配,匹配上的regex部分是會帶到後端的url的,這個是與ProxyPass不同的。使用示例:
1、ProxyPassMatch ^/images !
這個示例表示對/images的請求,都不會被轉發。
2、ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com$1
這個示例表示對所有gif圖片的請求,都被會轉到後端,如此時請求http://example.com/foo/bar.gif,
那內部將會轉換為這樣的請求http://backend.example.com/foo/bar.gif。
3、ProxyPassReverse
語法:ProxyPassReverse [路徑] url
它一般和ProxyPass指令配合使用,此指令使Apache調整HTTP重定向應答中Location, Content-Location,
URI頭裏的URL,這樣可以避免在Apache作為反向代理使用時,。後端服務器的HTTP重定向造成的繞過反向代理的問題。參看下面的示例:
ProxyPass /example http://www.example.com/
ProxyPassReverse /example http://www.example.com/
ProxyPassReverse的作用就是反向代理,如果沒有加這樣的反向代理設置的情況下,訪問http://www.test.com
/example/a,如果www.example.com對請求進行了redirect至http://www.example.com/b,那麽,客
戶端就會繞過反向代理,進而訪問http://www.test.com/example/b。如果設置了反向代理,則會在轉交HTTP重定向應答到客戶
端之前調整它為http://www.test.com/example/a/b,即是在原請求之後追加上了redirect的路徑。
var html = document.getElementById("artContent").innerHTML;
document.getElementById("artContent").innerHTML = html;

五、其他
centos7上實現lamp(module)機制,
1.三者分離於三臺主機
2.一個虛擬主機用於提供phpMyadmin對mysql進行管理,基於圖形化;另一個提供wordpress
3.xcache
4.為phpmyadmin提供https虛擬主機
Centos7,lamp(php-fpm)
1.三者分離於三臺主機
2.一個虛擬主機用於提供phpMyadmin對mysql進行管理,基於圖形化;另一個提供wordpress
3.xcache
Centos7:編譯安裝lamp
1.三者分離於三臺主機
2.一個虛擬主機用於提供phpMyadmin對mysql進行管理,基於圖形化;另一個提供wordpress
3.xcache
4.嘗試mpm為非prefork機制

編譯安裝參考博客:http://blog.51cto.com/cuchadanfan/1688813

LAMP詳解(二)