1、安裝 apache2.4.23javascript
新版本的 httpd-2.4 新增如下特性; php
新增模塊;css
mod_proxy_fcgi(可提供 fcgi 代理) html
mod_ratelimit(限制用戶帶寬) java
mod_request(請求模塊,對請求作過濾) mysql
mod_remoteip(匹配客戶端的 IP 地址)linux
對於基於 IP 的訪問控制作了修改,再也不支持 allow,deny,order 機制,而是統一使用 require 進行 nginx
還新增如下幾條新特性; web
一、MPM 支持在運行時裝載;不過要開啓這種特性,在編譯安裝要啓用這三種功能;sql
--enable-mpms-shared=all --with-mpm=event
二、支持 event
三、支持異步讀寫
四、在每一個模塊及每一個目錄上指定日誌級別
五、加強版的表達式分析器
六、每請求配置:,
七、毫秒級別的 keepalive timeout
八、基於 FQDN 的虛擬主機再也不須要 NameVirtualHost 指令
九、支持使用自定義變量
安裝環境:操做系統:Centos7.2,關閉 selinux
檢查 httpd 包是否安裝,如查安裝則卸載
[root@www ~]# rpm -q httpd
一、安裝 apache2.4.23
下載源碼包:
httpd-2.4.23.tar.gz
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
zlib-1.2.8.tar.gz pcre-8.39.tar.gz
注:apr(Apache Portable Runtime)Apache 可移植運行庫,它是一個對操做系統調用的抽 象庫,用來實現 Apache 內部組件對操做系統的使用,提升系統的可移植性。
安裝 openssl
安裝 apache2.4.23 時提示 openssl 版本太低,centos7 自帶版本 openssl-1.0.1e
下載 openssl(先裝)
yum install openssl-devel.x86_64
安裝 apr 和 apr-util
[root@www ~]# tar zxf apr-1.5.2.tar.gz
[root@www ~]# cd apr-1.5.2/
[root@www apr-1.5.2]# ./configure --prefix=/usr/local/apr
[root@www apr-1.5.2]# make && make install
[root@www ~]# tar zxf apr-util-1.5.4.tar.gz
[root@www ~]# cd apr-util-1.5.4/
[root@www apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@www apr-util-1.5.4]# make && make install
安裝 zlib
[root@www ~]# tar zxf zlib-1.2.8.tar.gz
[root@www ~]# cd zlib-1.2.8/
[root@www zlib-1.2.8]# ./configure --prefix=/usr/local/zlib
[root@www zlib-1.2.8]# make && make install
安裝 pcre
[root@www ~]# tar zxf pcre-8.39.tar.gz
[root@www ~]# cd pcre-8.39/
[root@www pcre-8.39]# ./configure --prefix=/usr/local/pcre
[root@www pcre-8.39]# make && make install
[root@www ~]# mv /usr/bin/openssl /usr/bin/openssl.1.0.1e
[root@www ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
安裝 apache2.4.23
[root@www ~]# tar zxf httpd-2.4.23.tar.gz
[root@www ~]# cd httpd-2.4.23/
[root@www httpd-2.4.23]# ./configure --prefix=/usr/local/http-2.4.23 --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate
相關參數解釋:
--enable-so:支持動態共享模塊(即打開 DSO 支持)
--enable-rewrite:支持 url 重寫
--enable-ssl:支持 ssl --with-ssl=/usr/local/openssl:指定 ssl 安裝位置
--enable-cgi:啓用 cgi --enable-cgid:MPM 使用的是 event 或 worker 要啓用 cgid
--enable-modules=most:明確指明要靜態編譯到 httpd 二進制文件的模塊,爲 空格分隔的模塊名列表、all 或者 most,all 表示包含全部模塊,most 表示包含大部分經常使用模 塊
--enable-mods-shared=most:明確指明要以 DSO 方式編譯的模塊,爲空格分隔 的模塊名列表、all 或者 most,all 表示包含全部模 塊,most 表示包含大部分模塊
--enable-mpms-shared=all:啓用 MPM 全部支持的模式,這樣 event、worker、prefork 就會以 模塊化的方式安裝,要用哪一個就在 httpd.conf 裏配置就行了。
--with-mpm=event:指定啓用的 mpm 模式,默認使用 enevt 模式,在 apache 的早期版本 2.0 默認 prefork,2.2 版本是 worker,2.4 版本是 event.
--with-pcre=/usr/local/pcre:支持 pcre
--with-z=/usr/local/zlib:使用 zlib 壓縮庫
--with-apr=/usr/local/apr:指定 apr 的安裝路徑
--with-apr-util=/usr/local/apr-util:指定 apr-util 的安裝路徑
--enable-expires:激活彧經過配置文件控制 HTTP 的「Expires:」和「Cache-Control:」頭內容,即 對網站圖片、js、css 等內容,提供客戶端瀏覽器緩存的設置。這個是 apache 調優的一個重 要選項之一。
--enable-deflate:提供對內容的壓縮傳輸編碼支持,通常是 html、js、css 等內容的站點。使 用此參數會打打提升傳輸速度,提高訪問者訪問的體驗。在生產環境中,這是 apache 調優 的一個重要選項之一。
[root@www httpd-2.4.23]# make && make install
優化 http 程序執行路徑
[root@www httpd-2.4.23]# ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin/
修改配置文件 httpd.conf,設置其中的 ServerName 值 (在vim /usr/local/http-2.4.23/conf)
例如:ServerName www.benet.com
開啓 apache 服務器:
# /usr/local/http-2.4.23/bin/apachectl start
開機後自動啓動
[root@www httpd-2.4.23]# cp /usr/local/http-2.4.23/bin/apachectl /etc/init.d/httpd
編輯 /etc/init.d/httpd 文件,在首行 #!/bin/sh 下面加入這行:
[root@www httpd-2.4.23]# vi /etc/init.d/httpd
# chkconfig: 35 85 15 (在 3 和 5 啓動模式下的--啓動優先級)
將 Apache 加入開機自動啓動:
[root@www httpd-2.4.23]# chkconfig --add httpd
[root@www httpd-2.4.23]# chkconfig httpd on
啓動編譯好的 Apache 2.4.23:
[root@www httpd-2.4.23]# service httpd start
[root@www httpd-2.4.23]# netstat -anplt | grep 80
tcp6 0 0 :::80 :::* LISTEN 4807/httpd
客戶端測試訪問(注意防火牆)
2、Apache 的優化配置:
apache 所運行的硬件環境都是對性能影響最大的因素,即便不能對硬件進行升級,也最好 給 apache 一個單獨的主機以避免受到其餘應用的干擾。各個硬件指標中,對性能影響最大的 是內存,對於靜態內容(圖片、javascript 文件、css 文件等),它決定了 apache 能夠緩存多 少內容,它緩存的內容越多,在硬盤上讀取內容的機會就越少,大內存能夠極大提升靜態站 點的速度;對動態高負載站點來講,每一個請求保存的時間更多一些,apache 的 mpm 模塊會 爲每一個請求派生出相應的進程或線程分別處理,而進程或線程的數量與內存的消耗近似成正 比,所以增大內存對提升動態站點的負載和運行速度也極爲有利 其次是硬盤的速度,靜態站點尤其突出,apache 不斷的在讀取文件併發送給相應的請求, 硬盤的讀寫是極其頻繁的;動態站點也要不斷的加載 web 程序(php 等),一個請求甚至要讀 取十幾個文件才能處理完成,所以儘量的提升硬盤速度和質量對提升 apache 的性能是有 積極意義的。
最後是 cpu 和網絡,cpu 影響的是 web 程序執行速度,網絡影響流量大小。
一、apache 的工做模式:
Apache HTTP 服務器被設計爲一個強大的、靈活的可以在多種平臺以及不一樣環境下工做的服 務器。這種模塊化的設計就叫作「多進程處理模塊」(Multi-Processing Module,MPM),也叫 作工做模式。 Prefork 模式(一個非線程型的) : 其主要工做方式是:當 Apache 服務器啓動後,mpm_prefork 模塊會預先建立多個子進程(默 認爲 5 個),每一個子進程只有一個線程,當接收到客戶端的請求後,mpm_prefork 模塊再將 請求轉交給子進程處理,而且每一個子進程同時只能用於處理單個請求。若是當前的請求數將 超過預先建立的子進程數時,mpm_prefork 模塊就會建立新的子進程來處理額外的請求。 Apache 老是試圖保持一些備用的或者是空閒的子進程用於迎接即將到來的請求。這樣客戶 端的請求就不須要在接收後等候子進程的產生。 因爲在 mpm_prefork 模塊中,每一個請求對應一個子進程,所以其佔用的系統資源相對其餘 兩種模塊而言較多。不過 mpm_prefork 模塊的優勢在於它的每一個子進程都會獨立處理對應 的單個請求,這樣,若是其中一個請求出現問題就不會影響到其餘請求。Prefork 在效率上 要比 Worker 要高,可是內存使用大得多不擅長處理高併發的場景。 Apache 在 prefork 工做模式下影響性能的重要參數說明
Apache 在 prefork 工做模式下影響性能的重要參數說明
# prefork MPM
<IfModule mpm_prefork_module> StartServers 5
#apache 啓動時候默認開始的子進程數 MinSpareServers 5
#最小的閒置子進程數 MaxSpareServers 10
#最大的閒置子進程數 MaxRequestWorkers 250
#MaxRequestWorkers 設置了容許同時的最大接入請求數量。任何超過
MaxRequestWorkers 限制的請求將進入等候隊列,在 apache2.3.1 之前的版本
MaxRequestWorkers 被稱爲 MaxClients,舊的名字仍舊被支持。
MaxConnectionsPerChild 500
注 4:查看 Apache 加載的模塊
[root@www ~]#apachectl -t -D DUMP_MODULES
或
[root@www ~]# apachectl -M
或
[root@www ~]# apachectl –l (小寫 L,只顯示靜態模塊)
3.重啓 httpd 服務
Worker 模式(多線程多進程):
和 prefork 模式相比,worker 使用了多進程和多線程的混合模式,worker 模式也一樣會先預 派生一些子進程,而後每一個子進程建立一些線程,同時包括一個監聽線程,每一個請求過來會 被分配到一個線程來服務。線程比起進程會更輕量,由於線程是經過共享父進程的內存空間, 所以,內存的佔用會減小一些,在高併發的場景下會比 prefork 有更多可用的線程,表現會 更優秀一些;另外,若是一個線程出現了問題也會致使同一進程下的線程出現問題,若是是 多個線程出現問題,也只是影響 Apache 的一部分,而不是所有。因爲用到多進程多線程, 須要考慮到線程的安全了,在使用 keep-alive 長鏈接的時候,某個線程會一直被佔用,即便 中間沒有請求,須要等待到超時纔會被釋放(該問題在 prefork 模式下也存在) 總的來講,prefork 方式速度要稍高於 worker,然而它須要的 cpu 和 memory 資源也稍多於 woker。
Apache 在 worker 工做模式下影響性能的重要參數說明
# worker MPM
<IfModule mpm_worker_module>
StartServers 3
#apache 啓動時候默認開始的子進程數
MinSpareThreads 75
#最小空閒數量的工做線程
MaxSpareThreads 250
#最大空閒數量的工做線程
ThreadsPerChild 25
#每一個子進程產生的線程數量
MaxRequestWorkers 400
#與 prefork 模式相同
MaxConnectionsPerChild 0
#與 prefork 模式相同
注 4:進程與線程的區別
線程是指進程內的一個執行單元,也是進程內的可調度實體. 與進程的區別:
(1)地址空間:進程內的一個執行單元;進程至少有一個線程;它們共享進程的地址空間;而進程 有本身獨立的地址空間;
(2)資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源
(3)線程是處理器調度的基本單位,但進程不是.
(4)兩者都可併發執行.
進程和線程都是由操做系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對 應用的併發性。
進程和線程的區別在於:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程. 線程的劃分尺度小於進程,使得多線程程序的併發性高。 另外,進程在執行過程當中擁有獨立的內存單元,而多個線程共享內存,從而極大地提升了程 序的運行效率。
Event 模式:
這是 Apache 最新的工做模式,是 worker 模式的變種,它把服務進程從鏈接中分離出來,一 worker 模式不一樣的是在於它解決了 keep-alive 長鏈接的時候佔用線程資源被浪費的問題,在 event 工做模式中,會有一些專門的線程用來管理這些 keep-alive 類型的線程,當有真實請
求過來的時候,將請求傳遞給服務器的線程,執行完畢後,又容許它釋放。這加強了在高並 發場景下的請求處理。event 模式不能很好的支持 https 的訪問(HTTP 認證相關的問題)。
三、開啓 apache 的 Gzip(deflate)功能
gzip 能夠極大的加速網站,有時壓縮比率高到 80%,最少都有 40%以上,仍是至關不錯的。
在 Apache2 以後的版本,模塊名不叫 gzip,而叫 mod_deflate
未使用 Gzip
若是要開啓 deflate 的話,必定要打開下面二個模塊 (進主配:vim /etc/http/conf/httpd.conf)
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
設置壓縮比率,取值範圍在 1(最低) 到 9(最高)之間,不建議設置過高,雖然有很高的壓縮率, 可是佔用更多的 CPU 資源.
mod_deflate 模塊檢查及安裝
[root@www ~]# /usr/local/http-2.4.23/bin/apachectl -M | grep deflate
deflate_module (shared)
若是沒有安裝:
a.編譯時安裝方法
編譯的時候跟上--enable-deflate便可實現安裝
b.DSO 方式安裝
[root@www ~]# cd /root/httpd-2.4.23/modules/filters/ #切到 apache 源碼包 mod_deflate 所在 的目錄下
# /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c #以 dso 的方式編譯安裝到 apache 中 # /usr/local/http2.2/bin/apxs -c -i -a /root/httpd-2.2.17/modules/metadata/mod_headers.c#以 dso 的方式編譯安裝到 apache 中 若是報錯:
緣由是缺乏 zlib-devel 的安裝包,裝上就能夠了。
[root@www filters]# ll /usr/local/http-2.4.23/modules/mod_deflate.so
#檢查 mod_deflate 是 否安裝,成功安裝這裏會顯示出該文件
-rwxr-xr-x. 1 root root 98144 Oct 22 23:14 /usr/local/http-2.4.23/modules/mod_deflate.so
apxs 命令參數說明:
-i 此選項表示須要執行安裝操做,以安裝一個或多個動態共享對象到服務器的 modules 目 錄中。
-a 此選項自動增長一個 LoadModule 行到 httpd.conf 文件中,以啓用此模塊,或者,若是 此行已經存在,則啓用之。
-c 此選項表示須要執行編譯操做。 若是重啓的時候出現錯誤
須要在 LoadModule deflate_module modules/mod_deflate.so 的前面加載 zlib.so
這裏須要注意的是 LoadModule deflate_module 須要放在 LoadModule php5_module 以後
LoadFile /usr/lib/libz.so(x64 系統中該庫文件位於/usr/lib64 目錄下,能夠軟連接到/usr/lib 下 或者就在 LoadModule deflate_module modules/mod_deflate.so 這行的上一行添加 LoadFile /usr/lib64/libz.so 便可
從新啓動 httpd:
# /usr/local/http2.4.23/bin/apachectl graceful #優雅啓動 httpd 服務
修改 Apache 配置文件開啓 gzip 壓縮傳輸:()
http.conf 修改、增長配置參數
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
打開 httpd.conf 後,先將上面兩行配置前面的#號去掉,這樣 apache 就會啓用這兩個模塊, 其中 mod_deflate 是壓縮模塊,就是對要傳輸到客戶端的代碼進行 gzip 壓縮;mod_headers 模塊的做用是告訴瀏覽器頁面使用了 gzip 壓縮,若是不開啓 mod_headers 那麼瀏覽器就會 對 gzip 壓縮過的頁面進行下載,而沒法正常顯示。 在 httpd.conf 中加入如下代碼,能夠加到任何空白地方,不瞭解 apache 的話,若是擔憂加 錯地方,就放到 http.conf 文件的最後一行
<IfModule mod_deflate.c>
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
#AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x- httpd- php
#AddOutputFilterByType DEFLATE image/*
AddOutputFilterByType DEFLATE text/*
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript
application/javascript application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
</IfModule>
修改完成後保存退出並重啓 httpd 服務 使用谷歌瀏覽器測試訪問,
以下圖顯示結果:(提示:在訪問測試頁以前按 F12 鍵)
四、配置 mod_expires 模塊
這個很是有用的優化,mod_expires 能夠減小 20-30%左右的重複請求,讓重複的用戶對指定 的頁面請求結果都 CACHE 在本地,根本不向服務器發出請求。但要注意更新快的文件不要 這麼作。
這個模塊控制服務器應答時的 Expires 頭內容和 Cache-Control 頭的 max-age 指令。有效期 (expiration date)能夠設置爲相對於源文件的最後修改時刻或者客戶端的訪問時刻。 未啓用 expire 的效果:
[root@www htdocs]# curl -I 192.168.31.83
HTTP/1.1 200 OK
Date: Tue, 25 Oct 2016 15:52:37 GMT
Server: Apache/2.4.23 (Unix)
Last-Modified: Sun, 23 Oct 2016 15:34:10 GMT
ETag: "8c9f-53f8a01b18080"
Accept-Ranges: bytes
Content-Length: 35999
Vary: Accept-Encoding
Content-Type: image/png
啓用 expire 緩存:
mod_expires 的安裝配置:
啓用 expires_module
LoadModule expires_module modules/mod_expires.so
而後添加 Expires 配置規則
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "now plus 1 month"
ExpiresByType application/x-javascript "now plus 5 day"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/bmp "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/png "access plus 1 minute"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresDefault "now plus 0 minute"
</IfModule
驗證:
[root@www htdocs]# curl -I 192.168.31.83
HTTP/1.1 200 OK
Date: Tue, 25 Oct 2016 16:00:57 GMT
Server: Apache/2.4.23 (Unix)
Last-Modified: Sun, 23 Oct 2016 15:34:10 GMT
ETag: "8c9f-53f8a01b18080"
Accept-Ranges: bytes
Content-Length: 35999
Cache-Control: max-age=60
Expires: Tue, 25 Oct 2016 16:01:57 GMT
Vary: Accept-Encoding
Content-Type: image/png
四、Apache 禁止目錄遍歷
將 Options Indexes FollowSymLinks 中的 Indexes 去掉,就能夠禁止 Apache 顯示該目錄結構。
Indexes 的做用就是當該目錄下沒有 index.html 文件時,就顯示目錄結構。
一、主配置中啓用 httpd-default.conf
Include conf/extra/httpd-default.conf
二、修改 httpd-default.conf
文件:/usr/local/http-2.4.23/conf/extra/httpd-default.conf
找到
ServerTokens Full
ServerSignature On
改爲
ServerTokens Prod
ServerSignature off
重啓 apache 測試
六、Apache 日誌切割
爲何要分割日誌 隨着網站的訪問愈來愈大,WebServer 產生的日誌文件也會愈來愈大,若是不對日誌進行分 割,那麼只能一次將大的日誌(如 Apache 的日誌)整個刪除,這樣也丟失了不少對網站比較 寶貴的信息,由於這些日誌能夠用來進行訪問分析、網絡安全監察、網絡運行情況監控等, 所以管理好這些海量的日誌對網站的意義是很大的。
方法 1:使用 rotatelogs(apache 自帶的工具)每隔一天記錄一個日誌
輯 Apache 的主配置文件,更改內容以下:
註釋掉以下兩行
ErrorLog logs/error_log
CustomLog logs/access_log common
而後添加以下兩行
ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
注:其中 86400 爲輪轉的時間單位爲秒
驗證:查看 logs 目錄下的日誌文件
[root@www ~]# ls /usr/local/http-2.4.23/logs/ (若是沒有的稍等,有緩存)
access_20161026.log access_log deflate_log.log error_20161026.log error_log httpd.pid
因爲 apache 自帶的日誌輪詢工具 rotatelogs,聽說在進行日誌切割時容易丟日誌,所以咱們 一般使用 cronolog 進行日誌輪詢。
方法 二、使用 cronolog 爲每一天創建一個新的日誌
安裝 cronolog 程序
下載 cronolog
[root@www ~]# tar zxf cronolog-1.6.2.tar.gz
[root@www ~]# cd cronolog-1.6.2/
[root@www cronolog-1.6.2]# ./configure && make && make install
主配置文件中的使用方法
ErrorLog "|/usr/local/sbin/cronolog logs/error-%Y%m%d.log"
CustomLog "|/usr/local/sbin/cronolog logs/access-%Y%m%d.log" combined
若是 Apache 中有多個虛擬主機,最好每一個虛擬主機中放置一個這樣的代碼,並將日誌文件 名改爲不一樣的名字。
擴展:
這個保證了天天一個文件夾文件夾下每一個小時產生一個 log CustomLog "|/usr/local/sbin/cronolog logs /%Y%m%d/access_log.%H" combined
按天輪詢(生產環境常見用法,推薦使用): CustomLog "|/usr/local/sbin/cronolog logs/access_www_%Y%m%d.log" combined
按小時輪詢(生產環境較常見用法): CustomLog "|/usr/local/sbin/cronolog logs /access_www_ %Y%m%d%H.log" combined
驗證:查看 logs 目錄下的日誌文件
[root@www ~]# ls /usr/local/http-2.4.23/logs/
access-20161026.log access_log deflate_log.log error-20161026.log error_log httpd.pid
注意:
這兩個管道日誌文件程序還有一點不一樣之處是使用 cronolog 時若是日誌是放在某個不存 在的路徑則會自動建立目錄,而使用 rotatelogs 時不能自動建立,這一點要特別注意
七、配置防盜鏈
有時候,你的網站莫名其妙的訪問量變大,不要高興的太早,有多是被別人盜鏈了。 舉個例子:好比你搭了個 discuz 論壇,裏面有些熱點圖片、視頻;而後別人將他網站上訪問 圖片的地址重定向到你的 discuz 上,這樣他的服務器就能夠空閒出來了;也就是說別人訪問 他網站的圖片視頻,消耗的確是你服務器的資源; 解決這個問題的方法是配置下防盜鏈,讓外來的盜不了鏈;
方法 1:Apache 防盜鏈的第一種實現方法,能夠用 rewrite 實現。
首先要確認 Apache 的 rewrite module 可用:
[root@www ~]# apachectl -M | grep rewrite
rewrite_module (shared)
打開 httpd.conf,確保有這麼一行配置:
LoadModule rewrite_module modules/mod_rewrite.so
而後在找到本身網站對應的配置的地方(如在主配置文件中或虛擬主機中),
加入下列代碼: ServerName www.benet.com
#防盜鏈配置
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png[R,NC,L]
防盜鏈配置的說明:
若是訪問不了 把域名改成ip
先要在htdoce裏放入兩張圖片:
<img src="1.jpg">
<img src="2.jpg">
而後再打開一臺:安裝apache
第一臺:
3、fcgi 模式編譯安裝 LAMP+xcache
php 的工做模式:
php 在 lamp 環境下共有三種工做模式:CGI 模式、apache 模塊、FastCGI 模式。
CGI 模式下 運行 PHP,性能不是很好。做爲 apache 的模塊方式運行,在之前的課程中編譯安裝 lamp 已 經介紹過了。
FastCGI 的方式和 apache 模塊的不一樣點在於:
FastCGI 方式 PHP 是一處獨立的 進程,全部 PHP 子進程都由 PHP 的一個叫做 php-fpm 的組件負責管理;而 apache 模塊化方 式運行的 PHP,則是 apache 負責調用 PHP 完成工做。PHP 的 FastCGI 方式性能要比 apache 模塊化方式強不少,今天咱們以 FastCGI 方式編譯安裝 lamp。 FastCGI 工做機制: 首先客戶端發起請求,請求分爲 2 種,一種是靜態請求它能夠直接由 Apache 直接響應返回; 另外一種是動態的請求,如其中包含中 php 或者 Perl 這種腳本解釋性語言,則由 Apache 服務 器經過fastcgi協議調用php服務器執行並返回給Apache由Apache返回解釋執行後的結果, 若是這個過程當中涉及到對數據的操做,此時 php 服務器還會還會經過 mysql 協議調用 mysql 服務器。
編譯環境及各軟件版本:(三臺初始環境)web、php、mysql
主機規劃
至少 3 臺主機,操做系統都是 centos7.2.網段在 192.168.197.0/24 網關 192.168.197.2
分配以下: 1 臺 httpd 服務器(192.168.31.83)
1 臺 php 服務器(192.168.31.141)
1 臺 mysql 服務器(192.168.31.225)
編譯安裝 LAMP
編譯安裝 apache(請參考前面 apache 的安裝)
編譯安裝 mysql(請參考 mysql 安裝)
FastCGI 方式安裝 php
一、解決依賴關係 [root@phpserver ~]# yum -y install libxml2-devel lzip2-devel libcurl-devel openssl-devel bzip2-devel
安裝 libmcrypt
[root@phpserver ~]# tar zxf libmcrypt-2.5.7.tar.gz
[root@phpserver ~]# cd libmcrypt-2.5.7/
[root@phpserver libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
二、編譯安裝 php
[root@phpserver ~]# tar zxf php-5.6.27.tar.gz
[root@phpserver ~]# cd php-5.6.27/
[root@phpserver php-5.6.27]# ./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2--enable-maintainer-zts
[root@phpserver php-5.6.27]# make && make install
三、提供 php 配置文件
[root@phpserver php-5.6.27]# cp php.ini-production /etc /php.ini
四、爲 php-fpm 提供腳本
[root@phpserver php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@phpserver php-5.6.27]# chmod +x /etc/init.d/php-fpm
[root@phpserver php-5.6.27]# chkconfig --add php-fpm
[root@phpserver php-5.6.27]# chkconfig php-fpm on
五、提供 php-fpm 配置文件並編輯:
# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@phpserver ~]# vi /usr/local/php5.6/etc/php-fpm.conf
修改內容以下:
pid = run/php-fpm.pid
listen = 192.168.31.141:9000(phpip)
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
啓動 php-fpm 服務:
[root@phpserver ~]# service php-fpm start
Starting php-fpm done
[root@phpserver ~]# netstat -anpt | grep php-fpm
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN
25456/php-fpm: mast
[root@phpserver ~]# firewall-cmd --permanent --add-port=9000/tcp success
[root@phpserver ~]# firewall-cmd --reload Success
在該主機上新建虛擬主機目錄用於存放網頁文件
[root@phpserver ~]# mkdir -p /var/www/benet
至此 php 安裝配置完畢,下面配置 apache 經過 fastcgi 協議調用 php
六、配置 apache(切換到 apache 主機上操做)
在 Apache2.4 之後已經專門有一個模塊針對 FastCGI 的實現,此模塊爲 mod_proxy_fcgi.so, 它實際上是做爲 mod_proxy.so 模塊的擴充,所以,這兩個模塊都要加載
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
[root@www ~]# apachectl -M | grep proxy
proxy_module (shared)
proxy_fcgi_module (shared)
創建一個目錄做爲虛擬主機的家目錄
[root@www ~]# mkdir -p /var/www/benet
編輯主配置文件 httpd.conf,開啓虛擬主機
啓用 Include conf/extra/httpd-vhosts.conf
同時定位 AddType;添加下面兩行:讓 apache 能識別 php 格式的頁面
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
而且定位至 DirectoryIndex:支持 php 格式的主頁
DirectoryIndex index.php index.html #添加 index.php
配置虛擬主機支持使用 fcgi
[root@www ~]# vi /usr/local/http-2.4.23/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@benet.com
DocumentRoot "/var/www/benet"
ServerName www.benet.com
ServerAlias benet.com
ErrorLog "logs/benet.com-error_log"
CustomLog "logs/benet.com-access_log" common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.31.141:9000/var/www/benet/$1
<Directory "/var/www/benet">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
三方模塊支持 PHP-FPM 實現。
測試 LAMP 環境:
在 mysql 主機上建立用於 php 服務器鏈接的 mysql 帳戶
mysql> grant all on *.* to testuser@'%' identified by '123456’;
注意防火牆要容許 mysql 鏈接。
在 php 服務器上的/var/www/benet 目錄下建立.php 的測試頁:
[root@phpserver ~]# cat /var/www/benet/index.php
<?php
phpinfo();
?>
[root@phpserver ~]# cat /var/www/benet/test1.php
<?php
$link=mysql_connect('192.168.31.225','testuser','123456');
if ($link)echo "connection success......";
mysql_close();
?>
測試訪問 php 測試頁:
看到上面兩個測試頁說明 apache、php、mysql 之間能夠協同工做了。
七、壓力測試
網站性能壓力測試是服務器網站性能調優過程當中必不可缺乏的一環。只有讓服務器處在高壓 狀況下,才能真正體現出軟件、硬件等各類設置不當所暴露出的問題。 性能測試工具目前最多見的有如下幾種:ab、http_load、webbench、siege。今天咱們專門 來介紹 ab。
ab 是 apache 自帶的壓力測試工具。ab 很是實用,它不只能夠對 apache 服務器進行網站訪 問壓力測試,也能夠對或其它類型的服務器進行壓力測試。好比 nginx、tomcat、IIS 等。 下面咱們開始介紹有關 ab 命令的使用:
查看 ab 是否安裝成功,能夠切換到上述目錄下,使用 ab –V 命令進行檢測。
以下: [root@www ~]# /usr/local/http-2.4.23/bin/ab -V
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
若是 ab –V 命令出錯,能夠 exporexport LD_LIBRARY_PATH="/usr/local/openssl/lib/", 就能夠了。
八、CentOS7.2 下安裝 php加速軟件 Xcache(在 php 主機上完成下面的操做)
說明:
php 安裝目錄:/usr/local/php5.6
php.ini 配置文件路徑:/etc/php.ini
php 網頁根目錄:/var/www/benet
1)安裝 xcache
wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz #下載
[root@phpserver ~]# tar zxf xcache-3.2.0.tar.gz #解壓
[root@phpserver ~]# cd xcache-3.2.0/ #進入安裝目錄
[root@phpserver xcache-3.2.0]# /usr/local/php5.6/bin/phpize#用 phpize 生成 configure 配置文 件
[root@phpserver xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config #配置
[root@phpserver xcache-3.2.0]# make && make install #編譯、安裝
Installing shared extensions: /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/
安裝完成以後,出現下面的界面,記住如下路徑,後面會用到
/usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/
2)建立 xcache 緩存文件
# touch /tmp/xcache
# chmod 777 /tmp/xcache
3)拷貝 xcache 後臺管理程序到網站根目錄
[root@phpserver xcache-3.2.0]# cp -r htdocs/ /var/www/benet/xcache
4)配置 php 支持 xcache
vi / etc/php.ini #編輯配置文件,在最後一行添加如下內容
[xcache-common]
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so(這是上面的路徑)
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
xcache.var_count =1
xcache.var_slots =8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval =300
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory =""
將 xcache 目錄拷貝到 apache 主機的網頁文檔目錄下
[root@phpserver ~]# scp -r /var/www/benet/xcache/ root@192.168.31.83:/var/www/benet/
6)測試 service php-fpm restart #重啓 php-fpm
瀏覽器打開網站根目錄下面的 xcache
http://http://192.168.31.83/xcache 能夠看到以下頁面: (httpdip)
至此,Linux 下安裝 php 加速軟件 Xcache 教程完成
查看 xcache 的命中率:
九、部署 bbs 論壇
Discuz 的程序文件解壓,而且將 upload 中全部文件放置到網站目錄(php 服務器的操做)
#unzip Discuz_7.0.0_FULL_SC_UTF8.zip -d discus
# mv Discuz/upload/ /var/www/benet/bbs
設置 php-fpm 的服務用戶爲下面文件的屬主或者對其設置寫權限,不然安裝時會報錯
#cd /var/www/benet/bbs
#chown -R nobody config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/
#chmod -R 777 uc_server/data/
修改 php.ini 文件
short_open_tag = On
service php-fpm restart(重啓)
web 服務器也須要有靜態文件(apache 服務器上操做)
#unzip Discuz_7.0.0_FULL_SC_UTF8.zip -d discus
# mv Discuz/upload/ /var/www/benet/bbs
設置 httpd 的服務用戶對指定文件也須要有寫權限
#cd /var/www/benet/bbs
#chown -R daemon config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/
在數據庫服務器上建立 bbs 數據庫及受權賬戶
mysql> create database bbsdb;
Query OK, 1 row affected (0.01 sec)
mysql> grant all on bbsdb.* to runbbs@'%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.03 sec)
置完成以後,輸入 httd://192.168.31.83/bbs/install 便可安裝
填寫數據庫的相關信息,添加數據庫服務器的地址和 MariaDB 建立的數據庫和用戶密碼,而 後在設置 bbs 的管理員賬號密碼就能夠繼續安裝了。 剩下的根據提示安裝便可。
出現上面這種狀況是因爲 php 服務器安裝了 discuz 以後致使程序發生變化從而致使動態服 務器和靜態服務器的程序不一致,只須要手動把 bbs 服務器的文件和 web 服務器進行一次 同步便可,若是想實現自動同步,須要使用其餘服務,如 initory+rsync、sersync 等工具。
#scp -r /var/www/benet/bbs/* root@192.168.31.83:/var/www/benet/bbs/
動態服務器和靜態服務器同步文件以後,再次訪問 bbs 的網址就正常了。