一、 服務器status頁
內生的status信息,可以通過web予以顯示, 可以映射為url地址進行訪問
1. 配置路徑有幾種不同方式
如果URL可以映射到文件系統映射上,盡量用directory
1) 配置文件系統路徑訪問屬性
## 簡單來說,就是實實在在存在的路徑,在/etc/httpd/conf/httpd.conf 中配置下面容器。并且支持正則表達式 <Directory [~] ""> </Directory> ## 對于文件 <File [~] ""> </File>
2) 配置URL訪問文件路徑,不一定是實實在在存在的路徑,有可能是系統內生的文件,只是通過web的形式來顯示。比如status頁面
<Location [~] ""> </Location> ## 專門用于做正則表達式 <LocationMatch ""> </LocationMatch>
2. 處理器:當文件被調用時,apache的內部表現形式, 每一種文件類型,都有種隱式的處理形式。
## 對于status頁面而言,顯式定義處理為,事例 <Location /server-status> SetHandler server-status # 使用server-status處理器處理/server-status AuthType Basic # 基本授權 AuthName "Server Status" # 授權名稱 AuthUserFile "/etc/httpd/conf/.htpasswd" # 授權認證文件所在位置 Require valid-user Order deny,allow Allow from all </Location> ## 此設置相當于把server-status 頁面映射到 , 并且只有特定用戶才可以訪問 ## 用命令創建用戶認證文件 htpasswd -c -m /etc/httpd/conf/.htpasswd tom htpasswd -m /etc/httpd/conf/.htpasswd jerry ## 用宿主機嘗試進行訪問
二、 配置httpd服務器支持壓縮
使用mod_deflate模塊支持頁面壓縮
## 檢查deflate模塊是否裝載 httpd -M | grep deflate Syntax OK deflate_module (shared) ## 在配置文件中配置deflate模塊屬性: 創建/etc/httpd/conf.d/deflate.conf 文件為一下內容 SetOutputFilter DEFLATE # mod_deflate configuration # Restrict compression to these MIME types AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1) DeflateCompressionLevel 9 # Netscape 4.x has some problems. BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html ## 然后重啟服務后,進行測試
可以看到Content-Encoding顯示為gzip, 說明文件輸出確實以gzip形式進行
三、 httpd相關的工具
1. curl命令
curl是基于URL語法在命令行方式下工作的文件傳輸工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協議。curl支持HTTPS認證,并且支持HTTP的 POST、PUT等方法, FTP上傳, kerberos認證,HTTP上傳,代理服務器, cookies, 用戶名/密碼認證, 下載文件斷點續傳,上載文件斷點續傳,,http代理服務器管道( proxy tunneling), 甚至它還支持IPv6, socks5代理服務器,,通過http代理服務器上傳文件到FTP服務器等等,功能十分強大。
curl的常用選項:
-A/–user-agent <string> 設置用戶代理發送給服務器
-basic 使用HTTP基本驗證
–tcp-nodelay 使用TCP_NODELAY選項
-e/–referer <URL> 來源網址
–cacert <file> CA證書 (SSL)
–compressed 要求返回是壓縮的形勢
-H/–header <line>自定義頭信息傳遞給服務器
-I/–head 只顯示響應報文首部信息
–limit-rate <rate> 設置傳輸速度
-u/–user <user[:password]>設置服務器的用戶和密碼
-0/–http1.0 使用HTTP 1.0
2. 資源限定以及相關命令
軟限定: 可以超管但是,只能超過一定量的時間
硬限定:決不能超過的限制
ulimit
-n [N]: 顯示或限定能打開的最大的文件句柄數;
-u [N]: 所能夠運行的最多進程數;
配置文件:/etc/security/limits.conf,擴展配置:/etc/security/limits.d/*.conf
3. ab 命令, 服務器標準壓力測試軟件
-c: 模擬的并發數
-n: 總請求數
其他壓力測試工具: http_load, webbench, seige, tcp_copy(使用真實環境下的請求重放)
4. httpd RPM安裝后產生的自帶工具
httpd: Apache 服務器。
apachectl:Apache HTTP 服務器控制工具。當自行編譯沒有服務腳本時,可以使用這個作為服務腳本
ab:Apache HTTP 服務器性能基準工具。
ulimit : 資源限定查看和修改命令
apxs:Apache 擴展工具。
configure:配置源代碼。
dbmmanage:為基本認證創建和更新 DBM 格式的用戶認證文件。
htcacheclean:清理磁盤緩存。
htdigest:為摘要認證創建和更新用戶認證文件。
htdbm:操作 DBM 密碼數據庫。
htpasswd:為基本認證創建和更新用戶認證文件。
httxt2dbm:為 RewriteMap 創建 dbm 文件。
logresolve:將 Apache 日志文件中的 IP 地址解析到主機名稱。
rotatelogs:不關閉 Apache 而切換日志文件。
suexec:執行外部程序前切換用戶。當用戶請求的文件不能被appache用戶請求時,可以臨時以特定用戶身份來獲取。
四、 httpd 2.4編譯安裝
1. 解決依賴關系, httpd-2.4 依賴高版本的apr(apache portable runtime)和apr-util軟件包。 并且依賴pcre-devel perl兼容的正則表達式庫
1) 安裝開發工具和pcre-devel包
# yum -y install pcre-devel # yum -y groupinstall "Development tools"
2) 編譯安裝apr-1.5.2
# tar -xf apr-1.5.2.tar.gz # cd apr-1.5.2 # ./configure --prefix=/usr/local/apr # make && make install
3) 編譯安裝apr-util-1.5.4
# tar -xf apr-util-1.5.4.tar.gz # cd apr-util-1.5.4 # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr # make && make install
2. 編譯配置httpd-2.4.12
1) httpd-2.4新特性:
MPM支持在運行時裝載;
–enable-mpms-shared=all –with-mpm=event
支持event
異步讀寫
在每模塊及每目錄上指定日志級別
每請求配置;<If>, <Elseif>
增強版的表達式分析器
毫秒級的keepalive timeout
基于FQDN的虛擬主機不再需要NameVirtualHost指令
支持使用自定義變量
新增了一些模塊:mod_proxy_fcgi, mod_ratelimit, mod_request, mod_remoteip
對于基于IP的訪問控制做了修改,不再支持使用order, allow, deny這些機制;而是統一使用require進行
2) httpd-2.4編譯安裝
## 編譯安裝 # tar -xf httpd-2.4.12.tar.gz # cd httpd-2.4.12 # ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-ssl --enable-cgi --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event # make && make install ## configure 個選項意義 --prefix=/usr/local/apache : 設置安裝路徑 --sysconfdir=/etc/httpd24 : 設置配置文件安裝路徑 --enable-ssl : 支持使用ssl庫 --enable-cgi : 支持使用cgi腳本 --enable-rewrite : 支持重寫 --with-zlib : 支持使用壓縮庫 --with-pcre : 支持使用perl正則表達式庫 --with-apr=/usr/local/apr : apr安裝位置 --with-apr-util=/usr/local/apr-util : apr-util安裝位置 --enable-modules=most : 編譯支持大部分模塊 --enable-mpms-shared=all : 編譯支持所有mpms模塊 --with-mpm=event : 默認使用event模塊 ## 導出頭文件 # ln -sv /usr/local/apache/include /usr/include/httpd ## 導出庫文件, httpd沒有額外的庫文件生成,如果有的話,創建/etc/ld.so.conf.d/httpd24.conf, 并且把庫文件目錄添加在其中,并執行下面命令 # ldconfig # idconfig -p 用于查看已經裝載的庫文件 ## 導出man手冊。 在/etc/man.config 中添加 MANPATH /usr/local/apache/man ## 導出二進制程序,創建/etc/profile.d/httpd.sh 寫入下面一行 export PATH=/usr/local/apache/bin:$PATH
3) 預備服務腳本,使用老版本httpd的服務腳本進行修改
# cp /etc/init.d/httpd /etc/init.d/httpd24 # vim /etc/init.d/httpd24 修改如下幾行 apachectl=/usr/local/apache/bin/apachectl ## 設置新的apachectl 路徑 httpd=/usr/local/apache/bin/httpd ## 新的httpd路徑 prog=httpd24 ## 程序名稱改為http24 pidfile=${PIDFILE-/var/run/httpd24.pid} ## 重新修改pid文件路徑 lockfile=${LOCKFILE-/var/lock/subsys/httpd24} ## 設置新的鎖文件名,防止沖突 # vim /etc/httpd24/httpd.conf 添加下面一行指令,來修改pid文件地址 PidFile "/var/run/httpd24.pid" 添加httpd24服務, 設置開機自動啟動,關閉老版本httpd防止版本沖突 # chkconfig --add httpd24 # chkconfig httpd off # chkconfig httpd24 on # service httpd24 start # ss -tnlp | grep "httpd" tcp LISTEN 0 128 :::80 :::* users:(("httpd",44350,4),("httpd",44352,4),("httpd",44353,4),("httpd",44354,4)) # ps aux | grep "httpd" root 44350 0.0 0.1 76980 2320 ? Ss 18:07 0:00 /usr/local/apache/bin/httpd daemon 44352 0.0 0.2 421240 4132 ? Sl 18:07 0:01 /usr/local/apache/bin/httpd daemon 44353 0.0 0.2 486776 4752 ? Sl 18:07 0:01 /usr/local/apache/bin/httpd daemon 44354 0.0 0.2 421240 4160 ? Sl 18:07 0:01 /usr/local/apache/bin/httpd 可以看到,一個主進程,另外event默認配置為三個工作進程,默認用戶為daemon
4) 新特性,基于IP訪問控制
允許所有主機訪問:Require all granted
拒絕所有主機訪問:Require all deny
控制某主機的訪問: ## 基于ip Require ip IPADDR Require not ip IPADDR IPADDR: 單個IP地址, 例如172.16.100.7 Network/Netmask, 例如172.16.0.0/255.255.0.0 Network/Length, 例如172.16.0.0/16 Net: 172.16 例如: Require ip 172.16.0.0/16 ## 基于主機名 Require host HOSTNAME Require not host HOSTNAME HOSTNAME: FQDN:具體的主機 DOMAIN: 域名, 例如 www.playground.com
原創文章,作者:以馬內利,如若轉載,請注明出處:http://www.www58058.com/4705
以馬內利的文章每次都比其它同學更有深度。贊
@stanley:I/O模型糾結了老半天,不知道該怎么表達,看了好幾遍,還是覺得理解的很淺
求前輩出一個完整的httpd+openssl的教程,從編譯安裝到配置一步一步下來,面向小白的,多謝!
(原因是網上看了很多教程,但是都是httpd和openssl分開講的,里面很多細節都不太明白,新手希望能有一個一步一步跟著做的教程是最好的,先實現結果,再追求理論細節。再次感謝?。?/p>
@淺藍:httpd + openssl 就是實現https協議啦,我這個系列的總結中,我寫過一個實現https的,
http://www.www58058.com/archives/4671
我也是個新手,就是一邊學一邊總結。 僅供參考