Apache服務配置與LAMP部署以及服務管理優化
一、LAMP部署
1.linux系統基本環境
修改計算機名稱 配置網卡IP地址 搭建DNS 關閉selinux
注意:檢查httpd的rpm包是否安裝,如果已經安裝需要卸載後源碼安裝(最好是源碼安裝)
2.安裝配置apache(就是httpd)
上傳httpd源碼包,並解壓到/usr/src目錄
源碼編譯安裝:./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
然後執行make && make install編譯安裝(沒有報錯就是正確的)
到/usr/local/bin目錄下查看是否生成腳本文件(如果沒有說明編譯安裝失敗,重新安裝)
補充:優化執行路徑:
ln -s /usr/local/httpd/bin/* /usr/local/bin(創建生成編譯安裝的httpd下的bin目錄下所有軟鏈接)
PATH=$PATH:/usr/local/httpd/bin/
注意:檢查確認安裝以及創建鏈接結果如下說明安裝成功
修改配置文件httpd:vim /usr/local/httpd/conf/httpd.conf
修改服務名字
cp /usr/lcoal/httpd/bin/apachectl /etc/init.d/httpd(把腳本添加到該目錄下,可以使用service命令啓動服務)
修改配置文件/etc/init.d/httpd
添加——chkconfig: 35 85 15(35級別啓動、開機時第85項啓動、關機時第15項關閉)
1.chkconfig --add httpd(添加httpd服務) 2.chkconfig httpd on/off 3.service httpd start/stop
測試是否成功
3、安裝PHP環境
安裝zlib提供數據壓縮用的函式庫和安裝libxml2是一個xml的c語言版的解析器
上傳安裝源碼包libmcrypt、mhash、mcrypt(注意按照順序安裝)
安裝源碼包libmcrypt
tar zxf libmcrypt-2.5.8.tar.gz 》cd libmcrypt-2.5.8 》./configure》make && make install
創建軟鏈接可以簡便使用命令:ln -s /usr/local/lib/libmcrypt* /usr/lib/
安裝源碼包mhash
tar zxf mhash-0.9.9.9.tar.gz 》cd mhash-0.9.9.9 》./configure 》make && make install
創建軟鏈接可以簡便使用命令:ln -s /usr/local/lib/libmhash* /usr/lib/
安裝源碼包mcrypt
tar zxf mcrypt-2.6.8.tar.gz 》cd mcrypt-2.6.8 》./configure 》make && make install
補充:解決錯誤執行export LD_LIBRARY_PATH=/usr/local/lib: LD_LIBRARY_PATH
再繼續./configure和make && make insatll
安裝php源碼包
./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring
--with-apxs2=/usr/local/httpd/bin/apxs \\編譯共享的 Apache 2.0 模塊
--with-mysql=/usr/local/mysql \\啓用mysql的支持
編譯成功後make && make install進行編譯安裝
覆蓋php.ini主配置文件:cp /root/php-5.6.31/php.ini-development /usr/local/php5/php.ini
編輯httpd的主配置文件添加httpd對php的支持:vim /usr/local/httpd/conf/httpd.conf
添加(隨便位置添加就好):AddType application/x-httpd-php .php(注意php和.之前有空格)和DirectoryIndex index.php index.html
測試php與apache的環境(成功的話如下圖):vim /usr/local/httpd/htdocs/test1.php
<?php
phpinfo();
?>
php配置添加加速模塊
補充:開啓子配置項如下圖(應該可以在配置文件中找到,取消註釋就好)
配置自配置文件:vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
其他兩種虛擬站點的子配置文件配置:
基於IP的虛擬站點
基於端口的虛擬站點
端口需要在開啓子配置文件下面添加兩項
Listen 192.168.0.121:81
Listen 192.168.0.121.8
4、安裝配置Mysql
1.安裝依賴包:yum -y install ncurses-devel
2.安裝cmake工具
然後gmake && gmake install
3.解壓編譯安裝mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc
然後make && make install
4.優化路徑以及優化管理
運行/etc/profile文件(沒有權限記得加權限)
5.初始化數據庫,啓動mysql服務
創建用戶組和用戶,設置爲屬主目錄
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
路徑優化
ln -s /usr/local/mysql/bin/* /usr/bin
下圖爲安裝成功
測試php和mysql是否能夠合併使用
編寫php文件
<?php
$link=mysqli_connect("localhost","root","123456");
if(!$link) echo "FAILD!Apache連接錯誤,用戶名密碼不對";
else echo "OK!Apache可以連接";
?>
結果如下爲成功
三、普遍的工作部署結構圖
如上圖是較爲簡單普遍的工作佈局,在一臺服務器上搭建LAMP平臺21
搭建途中的防火牆路由服務器
外網的網卡配置 內網的網卡配置
先iptables清空防火牆重新配置
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 192.168.0.21
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p udp --dport 67 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -P INPUT DROP
iptables -t nat -A PREROUTING -i eth0 -d 192.168.0.21 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.21
因爲重啓防火牆會還原,就可以用iptables-save > /my/myiptables.txt命令把配置信息保存到我創建的/my/myiptables.txt文件下,下一次就可以用iptables-restore < /my/myiptables.txt命令還原配置
配置內網辦公電腦的IP地址以及網卡信息,並用該計算機測試能否ping通本機或ping通www.baidu.com之類的網,如下圖,表示防火牆配置成功,能夠ping通外網,實現了多路複用功能,內網可以訪問外網(後面測試外網訪問內網的網站)
四、LAP + MySQL分離安裝部署結構圖
這裏以紅色區域爲例子,把php和httpd搭建在一個服務器,mysql單獨搭建在一個服務器上
如果MySQL和php不在同臺機器:
如果使用PHP5.3以上版本,爲了鏈接MySQL數據庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了
--with-mysql=mysqlnd 啓用mysql的支持
PHP編譯安裝時--with-mysql=/usr/local/mysql變爲--with-mysql=mysqlnd
./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=mysqlnd --with-config-file-path=/usr/local/php5 --enable-mbstring
測試
LAP+ MySQL測試apache + Mysql+PHP三者的環境
vim /usr/local/httpd/htdocs/test2.php
<?php
$link=mysql_connect('192.168.1.104','abc','123456');
if($link) echo "恭喜你,PHP連接數據庫成功";
mysql_close();
?>
注意: 默認情況下mysql數據庫不允許使用root用戶遠程連接
在mysql數據庫中手動創建遠程登錄用戶:
grant all on *.* to 'abc'@'192.168.1.103' identified by '123456';
五、Apache服務管理優化
以下圖爲實例
一臺DNS服務器,這裏不需要DHCP和防火牆IP地址爲192.168.1.1
一臺辦公電腦Windows系統,IP地址設置爲192.168.1.23,DNS設置爲DNS服務器IP地址192.168.1.1
一臺服務器搭建LAMP平臺IP地址爲192.168.1.21,上面創了兩個網頁,一個是www.baidu.com,一個爲www.qq.com
用電腦訪問網頁測試(我這裏因爲創建的名字不是index.html所以需要加上路徑):
DNS配置主配置文件
DNS解析www.baidu.com的zone文件
DNS解析www.qq.com的zone文件
1.Apache服務日誌管理
在/var/log(默認情況下存放) 由rsyslogd程序產生(系統日誌)
Aphche服務的日誌可以在主配置文件裏配置日誌存放位置:vim /usr/local/httpd/conf/httpd.conf
錯誤日誌文件: 訪問記錄日誌文件:
這裏的common爲:日誌的展示格式
apache中日誌記錄格式主要有兩種:普通型common和複合型combined(安裝默認爲common)
注意:一般有子配置文件我們會在子配置文件中去設置日誌
子配置文件的好處之一:可以分開創建和查看以及分析各個網頁的日誌文件
打開子配置文件:vim /usr/local/httpd/conf/extra/httpd-vhosts1.conf
我們到該目錄下查看,可以查看生成了我們在配置文件中設置的各個日誌文件
.pid文件:存放httpd的進程號
實時查看日誌命令:tail -f
存在的問題:隨着網站訪問量增大,默認情況日誌文件越來越大
措施:對日誌進行分割
Apache自帶日誌分割工具
Apache自帶的日誌分割工具:rotatelogs 分割工具位置:/usr/local/bin/rotatelogs
使用方法:
ErrorLog "|/usr/local/httpd/bin/rotatelogs -l /usr/local/httpd/logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/httpd/bin/rotatelogs -l /usr/local/httpd/logs/access_%Y%m%d.log 86400" common
在子配置文件日誌配置項進行修改(這裏用www.baidu.com來試驗)
配置好後重啓服務,到存放日誌的位置查看,就可以查看到訪問記錄
使用第三方日誌分割工具cronolog
下載源碼包解壓進行編譯安裝
tar zxf cronolog-1.6.2.tar.gz
安裝完會在 /usr/local/sbin/cronolog 文件
使用方法(跟rotatelogs相似)
ErrorLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/test/error_%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/test/access_%Y%m%d.log" common
安裝日誌分析系統
1.下載源碼包
2.在/usr/local下建立文件夾/usr/local/awstats
3.解壓之後目錄移動到/usr/local/awstats
4.給awstats_configure.pl可執行權限
5.運行腳本awstats_configure.pl
運行後進行手動一步一步選擇如下圖
6.修改站點統計配置文件:指定統計的具體日誌文件路徑
我的剛剛是默認路徑爲/etc/awstats下
編輯配置文件:LogFile="/usr/local/httpd/logs/access_log"(你想統計哪個日誌)
7.手動創建/var/lib/awstats這個目錄:mkidr /var/lib/awstats
8.然後給awstats_updateall.pl文件執行權限,運行該文件
結果如下圖:
然後是用辦公電腦訪問,如下圖就是成功了
我這裏的網址爲:http://www.baidu.com/awstats/awstats.pl?config=www.baidu.com
2.Apache訪問控制與安全
分爲客戶機地址限制訪問和用戶密碼驗證訪問
客戶機地址限制訪問
地址限制,修改Apache主配置文件
配置之後除了192.168.1.21這個ip其他ip都無法訪問
用戶密碼驗證訪問
Apache自帶的工具可以實現
1.創建用戶認證數據庫命令:/usr/local/httpd/bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin
2.weadmin爲用戶,然後系統會讓你輸入密碼
3.因爲這個網頁配置在主配置文件,所以在Apache主配置文件中添加認證項目(添加的位置如下圖所示)
AuthName "AWStats Directory"
AuthType Basic
AuthUserFile /usr/local/httpd/conf/.awspwd
require valid-user
再次用辦公電腦進行訪問測試,如下圖所示
3.Apache優化訪問
Apache訪問保持
注意:源碼安裝是默認開啓保持,rpm安裝是默認關閉
在子配置文件目錄中的httpd_default.conf
/etc/httpd.conf
KeepAlive Off
KeepAliveTimeout 15
網頁壓縮模塊
作用:apache中gzip模塊可以使用gzip壓縮算法來實現對apache服務器發佈的網頁內容進行壓縮後再傳輸到客戶端瀏覽器
不同版本之間的區別:
apache 1.x:沒有內建網頁壓縮技術,使用的是額外的第三方mod_gzip模塊來執行壓縮。壓縮比率高,高出4%~6%壓縮量
apache 2.x:內建使用mod_deflate,壓縮速度快
apache 2.0.45開始:mod_deflate使用DeflateCompressionLevel指令來設置壓縮級別,1最快壓縮比最低,9最慢壓縮比最高,默認6
1.查看檢查模塊:apachectl -t -D DUMP_MODULES | grep "deflate"
2.停止服務,重新到解壓的目錄編譯安裝(編譯時加上模塊選項)
./configure --prefix=/usr/local/httpd/ --enable-deflate --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
3.修改主配置文件添加開啓mod_deflate模塊
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
DeflateCompressionLevel 9
setOutputFilter DEFLATE
4.啓動服務檢查(下圖爲成功)
網頁緩存模塊
作用:Apache的mod_expires模塊會自動生成頁面頭部信息中的Express標籤和Cache-Control標籤,客戶端瀏覽器根據標籤決定下次訪問是在本地機器的緩存中獲取頁面,不需要再次向服務器發出請求
配置mod_expires模塊與mod_deflate模塊相似
1.檢查模塊:apachectl -t -D DUMP_MODULES | grep "expires"
2.重新編譯安裝
./configure --prefix=/usr/local/httpd/ --enable-deflate -enable-expires --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
make && make install
修改主配置文件,啓用mod_expires模塊
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
4.重啓檢測(下圖爲成功)
防盜鏈模塊
www.baidu.com上的網頁用一張圖片頁面(使用本地圖片資源),www.qq.com使用www.baidu.com的圖片鏈接作爲該網頁上的圖片(本地沒有圖片,使用網上資源)如下
兩個頁面的html編寫圖片路徑不同(www.qq.com圖片使用www.baidu.com的流量資源),如下圖
www.baidu.com的html文件編寫 www.qq.com的html文件編寫
baidu網站目錄下有圖片,qq網站目錄下沒有
防盜鏈的使用(防止別人是用自己的資源流量)
使用Apache中的一個模塊:mod_rewrite
1.檢查模塊(成功如下):apachectl -t -D DUMP-MODULES | grep "rewrite"
2.如果沒有,關閉服務,重新編譯
./configure --prefix=/usr/local/httpd/ --enable-deflate --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-expires
make && make install
3.在配置文件中添加啓動模塊(我網站配置在子配置文件中所以在子配置文件中啓用模塊)
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://abc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://abc.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.abc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.abc.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/error.png
4.測試www.qq.com網站訪問的應該是你配置的另一個圖片