每日一記:WWW服務器相關知識點

WWW服務器 :
瀏覽器比較常支持的協議有:http、https、ftp、telnet等等,還有類似news、gopher
WWW server/client 間數據傳輸的方式:
GET :瀏覽器直接向WWW服務器要求網址列上面的資源,是最常見的;使用GET的方式可以直接在網址列輸入變量
POST :也是客戶端向服務器端提出的要求,要求裏面含有比較多的數據;POST不是使用網址列的功能
HEAD :服務器端響應給client端的一些數據文件頭而已;
OPTIONS :服務器點響應給Client端 的一些允許的功能與方法;
DELETE :刪除某些資源的舉動

https :加密的網頁數據(SSL)及第三方公正單位,是透過SSL加密的機制
SSL 有CA,CA就是公正單位,你可以自行產生一把密鑰且製作出必要的憑證數據並向CA單位註冊

LAMP需要的軟件:
httpd : 提供Apache主程序
mysql : MySQL 客戶端程序
mysql-server : MySQL 服務器程序
php : PHP主程序含給apache使用的模塊
php-devel :PHP的發展工具,與PHP外掛的加速軟件有關
php-mysql : 提供給PHP程序讀取MySQL數據庫的模塊
安裝必要的LAMP軟件,php-devel可以先忽略:yum install httpd mysql mysql-server php php-mysql

Apache中的重要檔案和目錄:
/etc/httpd/conf/httpd.conf : httpd最主要的配置文件
/etc/httpd/conf.d/*.conf :(很多的額外參數檔,擴展名是.conf)如果不想修改原始配置文件,可以將自己的額外參數檔獨立出來;方便維護
/usr/lib64/httpd/modules/, /etc/httpd/modules/ : 要使用的模塊檔案默認放置在這個目錄中
/var/www/html :默認首頁所在目錄,預設首頁爲index.html
/var/www/error/ : 在瀏覽器上出現的錯誤信息就以這個目錄的默認信息爲主
/var/www/icons/ : 此目錄提供Apache默認給予的一些小圖示,可以隨意使用;當輸入http://localhost/icons/ 時所顯示的數據所在
/var/www/cgi-bin/ : 默認給一些可執行的CGI(網頁程序)程序放置的目錄;當輸入
http://localhost/cgi-bin/ 時所顯示的數據所在
/var/log/httpd/ :預設的Apache登錄檔都放在這裏;
/usr/sbin/apachectl :Apache的主要執行檔,就是一個script腳本;可以主動的偵測系統上面的一些設定值
/usr/sbin/httpd :主要的Apache 二進制執行文件
/usr/bin/htpasswd :Apache密碼保護;Apache提供一個最基本的密碼保護方式,該密碼的產生就是透過這個指令來達成的

MySQL的重要檔案和目錄:
/etc/my.conf : MySQL的配置文件,包括要進行MySQL數據庫的優化,或者是針對,MySQL 進行一些額外的參數指定,都可以在這個檔案裏面達成
/var/lib/mysql/ : MySQL數據庫檔案放置的所在處;當有啓動任何MySQL的服務時,在備份時,這個目錄要完整的備份下來

PHP的重要檔案與目錄:
/etc/httpd/conf.d/php.conf : 系統主動將PHP設定參數寫入這個檔案,這個檔案在Apache重新啓動時被讀入
/etc/php.ini : PHP的主要配置文件
/usr/lib64/httpd/modules/libphp5.so : 是PHP軟件提供給Apache使用的模塊;這也是我們能否在Apache 網頁上面設計PHP程序語言的最重要的東西,務必存在
/etc/php.d/mysql.ini , /usr/lib64/php/modules/mysql.so : PHP是否可以支持MySQL接口,就看這個;是由php-mysql軟件提供的
/usr/bin/phpize , /usr/include/php/ : 如果未來要安裝PHP加速器以讓瀏覽速度加快的話,這個檔案與目錄就得要存在,否則加速器軟件就無法編譯成功;是由php-devel軟件所提供

Apache配置文件httpd.conf的基本設定格式:
<設定項目>
此設定項目內的相關參數
..........
</設定項目>
例如:針對首頁 /var/www/html/ 目錄提供一些額外的功能:
<Directory "/var/www/html">
Options Indexes
............
</Directory>

httpd.conf配置文件針對服務器環境的設定項目:
ServerTokens OS :告知客戶端服務器的版本與操作系統而已,不需要更動他
ServerRoot "/etc/httpd" :服務器設定的最頂層目錄,有點類似chroot,包括logs、modules等等的數據都該放置到此目錄底下(若未宣告成絕對路徑時)
PidFile run/httpd.pid : 放置PID的檔案,可方便Apache軟件的管理,只有相對路徑;
考慮ServerRoot設定值,所以檔案在 /etc/httpd/run/httpd.pid
Timeout 60 :不論接收或傳送,當持續聯機等待超過60秒則該次聯機就終端;不需要修改這個原始值
KeepAlive On : 最好將預設的Off 改爲On
是否允許持續性的聯機,亦即一個TCP聯機可以具有多個檔案資料傳送的要求
MaxKeepAliveRequests 500 : 可以將原本的100改爲500或更改;0 代表不限制
KeepAliveTimeout 15 : 在允許KeepAlive的條件下,該次聯機在最後一次傳輸後等待延遲的秒數;設定15 即可
<ifModule prefork.c> 底下兩個perfork,worker與內存管理有關
StartServers 8 啓動httpd時,喚醒幾個PID來處理服務的意思
MinSpareServers 5 最小的預備使用的PID數量
MaxSpareServers 20 最大的預備使用的PID數量
ServerLimit 256 服務器的限制
MaxClients 256 最多可以容許多少個客戶端同時聯機到httpd的意思
MaxRequestsPerChild 4000
</IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

CentOS將這兩個模塊放到不同的執行檔中,分別是:
/usr/sbin/httpd :使用prefork 模塊;
/usr/sbin/httpd.worker :使用worker 模塊;
查閱 /etc/sysconfig/httpd 能夠知道系統默認提供prefork模塊
可透過修改/etc/sysconfig/httpd 來使用worker模塊

LoadModule auth_basic_module modules/mod_auth_basic.so 加載模塊的設定項目
Include conf.d/.conf :因爲這行,放置到/etc/httpd/conf.d/.conf的設定都會被讀入
User apache
Group apache : prework、worker等模塊所啓動的process之擁有者與羣組設定
ServerAdmin [email protected] :email改成自己的email即可
ServerName www.centos.vbird : 自行設定好自己的主機名較佳
UseCanonicalName Off : 是否使用標準主機名,請使用Off

針對編碼的設定:調整配置文件httpd.conf裏的第747行左右
AddDefaultCharset UTF-8 <===將這行批註掉,修改過這行後,最好清除下瀏覽器的快 取(cache)

網頁首頁及目錄相關之權限設定(DocumentRoot 與 Directory)
DocumentRoot "/var/www/html" <==可以改成你放置首頁的目錄;特別注意設定這個目錄的權限以及SELinux的相關規則與類型(type)
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory> 這個設定值是針對WWW服務器[預設環境]而來的,因爲針對[/]的設定,建議保留上述的默認值
<Directory "/var/www/html"> 針對特定目錄(首頁)的限制,底下參數很重要
Options Indexes FollowSymLinks 建議拿掉Indexes比較妥當
AllowOverride None
Order allow,deny
Allow from all
</Directory>

關於PHP的配置文件: /etc/httpd/conf.d/php.conf
PHP配置文件其實是在: /etc/php.ini
PHP常見的與安全方面較相關的設定:/etc/php.ini

httpd-manual :提供Apache參考文件的一個軟件;
mrtg : 利用類似繪圖軟件自動產生主機流量圖標的軟件;
mod_perl :讓你的www服務器支持perl寫的網頁程序(例如webmail程序);
mod_python :讓你的www服務器支持python寫的網頁程序;
mod_ssl : 讓你的www可以支持https這種加密過後的傳輸模式;

PHP提供的上傳/下載容量限制修改: /etc/php.ini
post_max_size = 20M <==大約在672 行左右,默認是8M,例如修改成20M
file_uploads = On <==一定要是On才行(默認值),大概在791行左右
upload_max_filesize = 2M <==大約在800行左右,預設是2M
memory_limit = 128M <==大約在405行左右,預設爲128M

www服務的啓動與測試PHP模塊:
除了systemctl的啓動方式,Apache也自行提供一支script: 即 apachectl 指令(自行man查看)

MySQL 的基本設定:
當初次啓動MySQL後,系統纔會針對數據庫進行初始化的建立
啓動MySQL(設定MySQL root密碼與新增MySQL用戶賬號)
以手動的方式連上MySQL數據庫: mysql -u root ,這裏的root並不是Linux系統中的root
MySQL預設監聽的端口在 port 3306
給MySQL的管理員root設定密碼: mysqladmin -u root password 'your password'
登入時輸入密碼:mysql -u root -p
MySQL數據庫中默認存在的 mysql 數據庫是記錄MySQL賬號、主機等重要信息的主數據庫

效能調教 /etc/my.cnf : 參看書籤
MySQL root 密碼忘記的處理:
1、利用網絡上的一些工具處理(自行查找)
2、如果數據庫內容並不是很重要,刪除也無所謂的,則可以將MySQL關閉後,將/var/lib/mysql/* 目錄內的數據刪除,在重新啓動MySQL,此時數據庫會重建,root又沒有密碼欄了

啓動某個目錄的CGI(perl)程序執行權限(FastCGI加強版CGI):
執行CGI程序得到 /var/www/cgi-bin/目錄下執行
建議安裝 mod_perl 、mod_python 兩個軟件
在其他目錄底下執行CGI程序需要設置:
利用新目錄下的Options 參數設定或使用ScriptAlias的功能

找不到網頁時的顯示信息通知:
Apache的錯誤信息設定在配置文件的332行左右,預設是批註掉的,將批註拿掉後即生效
例如: ErrorDocument 404 /missing.html
其中 missing.html 檔案必須要放置在首頁目錄下,亦即是/var/www/html/missing.html
且所有配置文件當中(包括/etc/httpd/conf.d/*.conf)只能存在一個ErrorDocument 404...的設定值,且以較晚出現的設定爲主
錯誤信息代碼意義:
100-199 :一些基本的信息
200-299 :客戶端的要求已成功的達成
300-399:Client 的需求需要其他額外的動作,例如 redirected等等
400-499:Client的要求沒有辦法完成(例如找不到網頁)
500-599:主機的設定錯誤問題
編輯missing.html 檔案,自定義出錯提示內容,以網頁的格式編輯

瀏覽權限的設定動作(order,limit):
透過apache內建的order項目來處理
order deny,allow :以deny優先處理,但沒有寫入規則的則默認爲allow;常用於:拒絕所有,開放特定的條件;
order allow,deny :以allow爲優先處理,但沒有寫入規則的則默認爲deny;常用於:開放所有,拒絕特定的條件
如果allow與deny的規則中有重複的,則以預設的情況(order的規範)爲主
例如:首頁目錄讓 192.168.1.101及政府部門無法聯機,其他的則可以聯機
符合: [開放所有,拒絕特定] 的條件,建議將allow的規則寫在最上方
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from 192.168.1.101
Deny from .gov.tw
</Directory>
先允許所有,再拒絕單獨的
如果想要讓某個網域或者是IP無法瀏覽的話,最好還是利用iptables來處理比較妥當

限制客戶端動作的設定: Limit
例如:讓用戶在/var/www/html/lan這個目錄下僅能記性最簡單的GET,POST,OPTIONS的功能,除了這幾個之外的其他功能都不允許
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/lan">
AllowOverride none
Options FllowSymLinks
#先允許
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
#再規定除了這三個動作之外,其他的動作都不允許
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

服務器狀態說明網頁:mod_status模塊查詢主機目前的狀態,該模塊默認是關閉的
啓動這個模塊:
vim /etc/httpd/conf/httpd.conf
LoadModule status_module modules/mod_status.so 就是模塊的加載
ExtendedStatus On 將這個打開,信息會比較多
<Location /server-status>
SetHandler server-status
Order deny ,allow
Deny from all
Allow from 192.168.1.0/24
Allow from 127.0.0.1
</Location>
設定完成,重啓httpd服務,在瀏覽器輸入 http://主機IP/server-status即可顯示apache服務器狀態信息

.htaccess 與認證網頁設定:
1、建立受保護的目錄
2、設定Apache所需參數:使用Apache默認提供的認證功能
3、建立密碼檔案
4、重新啓動Apache即可
參考書籤<建立受保護的目錄>內容

Apache默認讀取的賬號/密碼設定數據是由htpasswd所建立的,語法爲:
htpasswd [-cmdD] 密碼文件文件名 用戶賬號
選項與參數:
-c :建立後面的密碼檔案;如果該檔案已經存在,則原本的數據會被刪除
如果只是要新增使用者(檔案已存在時),不必加上-c的參數
-m :不使用預設的CRYPT加密,改用MD5方式加密密碼
-d :使用更復雜的SHA方式來加密
-D :刪除掉後面接的那個使用者賬號
例如: htpasswd -c /var/www/apache.passwd test 新建立test賬號,加-c參數
htpasswd /var/www/apache.passwd test1 加入test1賬號,不加-c參數

虛擬主機的設定:
建議將虛擬主機的設定建立一個新的檔案在/etc/httpd/conf.d/.conf中,方便虛擬主機配置文件搬移,且修改時不會影響到原有的httpd.conf
httpd.conf內有的Include參數將/etc/httpd/conf.d/
.conf的檔案都讀入到配置文件當中

PHP強化模塊(eacceletator)與Apache 簡易效能測試
安裝eacceletator 源碼:
1、下載源碼,解壓縮,切換到解壓縮後的目錄
2、利用phpize進行PHP程序的預處理; 直接輸入phpize即可
3、編譯 ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config
4、make ; manke install ,新編譯的模塊會被放置到 /usr/lib64/php/modules/eaccelerator.so
5、讓PHP使用這個模塊: echo "/usr/lib64/php/modules/" >> /etc/ld.so.conf.d/php.conf
6、ldconfig
7、修改php.ini,在最底下加入幾行(見書籤,修改php.ini文件)
8、建立eaccelerator的暫存數據,設定好權限
mkdir /tmp/ eaccelerator
chmod 777 /tmp/ eaccelerator
重啓httpd服務,在瀏覽器輸入 http://主機IP/phpinfo.php即可看到內容(表格式的
如果PHP更新了,則eaccelerator模塊需要重新配置一次

利用ab程序來確認主機的一些基本效能:
ab [-dSK] [-c number] [-n number] 網頁檔名
選項與參數:
-d : 不要顯示saved table的百分比資料;通常不要那個數據,所以會加-d
-k : 還記得上面的KeepAlive 吧,加入-k 纔會以這樣的功能測試
-S :不顯示長信息,僅顯示類似min/avg/max的簡短易懂信息
-c : 同時有多少個[同時聯機]的設定(可想成同時聯機的IP)
-n : 同一個聯機建立幾個要求通道(可想成同一個IP要求的幾條聯機)
根據這個軟件的輸出可知道每秒鐘的傳輸速率、最大傳輸速度等
例如:ab -dSk -c100 -n100 http://localhost/phpinfo.php

syslog與logrotate :
Apache登錄文件主要記錄兩個信息,分別是:
/var/log/httpd/access_log : 用戶端正常要求的記錄信息
/var/log/httpd/error_log : 用戶錯誤要求的數據,包括服務器設定錯誤的信息等
使用預設的Apache時,系統已經作了一個logrotate供使用;使用源碼自己安裝的apache時,得手動建立 /etc/logrotate.d/httpd 檔案(參考默認裏面的內容)
該檔案內容加上: compress 可以讓備份登錄檔可以被壓縮

兩款常見的分析軟件:
登錄文件分析軟件:webalizer,使用yum 或者Tarball安裝
配置文件在 /etc/webalizer.conf
軟件默認會將輸出的結果放置到/var/www/usage,且這個目錄僅本機可查閱;可以更改輸出結果放置的目錄
設定好並執行webalizer指令後,在瀏覽器輸入: http://主機名/usage/webalizer 查看結果

登錄文件分析軟件:awstats 在官網使用源碼或者RPM來安裝
這個軟件是以perl來執行的,安裝前確認 mod_perl已經安裝且CGI的執行權限已經啓動了
安裝好後,將awstatsti提供的Apache設定數據給他複製到conf.d下
cp /usr/local/awstats/tools/httpd_conf /etc/httpd/conf.d/awstats.conf
重新啓動Apache即生效
配置文件在 /etc/awstats 目錄下,該目錄下有個範例文件 awstats.model.conf,該配置文件[檔名]格式爲: awstats.主機名.conf
cd /etc/awstats
cp awstats.model.conf awstats.www.conf
vim awstats.www.conf
找到底下這幾行,並且修改一下內容:
LogFile="/var/log/httpd/access_log" 51行:確定登錄文件所在的位置
LogType=W 63行:針對WWW的登錄檔分析
LogFormat=1 122行:Apache的登錄檔格式
SiteDomain="www.centos.vbird" 153行:主機的hostname
HostAliases="localhost 127.0.0.1 REGEX[centos.vbird$]"
DirCgi="/awstats" 212行:能夠執行awstats的目錄
Dirlcons="/awstatsicons" 222行:awstats一些小圖標的目錄
AllowToUpdataStatsFromBrowser=0 239行:不要利用瀏覽器來更新
Lang="tw" 905行:是語系設定

測試是否可以產生正確的分析資料:
cd /usr/local/awstats/wwwroot/cgi-bin
perl awstats.pl -config=www -update -output > index.html
ls -l 查看產生的文件
建立保護目錄的 .htaccess檔案
在瀏覽器輸入 http://主機IP/awstats/ 就能看到輸出的圖表了
還可以將分析的動作規定在每天某時進行:
例如:vim /usr/local/awstats/wwwroot/cgi-bin/awstats.sh
cd /usr/local/awstats/wwwroot/cgi-bin
perl awstats.pl -config=www -update -output > index.html
chmod 755 /usr/local/awstats/wwwroot/cgi-bin/awstats.sh
vim /etc/crontab
0 3 * root /usr/local/awstats/wwwroot/cgi-bin/awstats.sh

SSL所需軟件與憑證檔案及默認的https :
要達成讓apache支持https協議,必須要有mod_ssl 軟件才行,使用yum即可安裝
CentOS 6.x預設提供了SSL機制所需要的私鑰與憑證檔案
/etc/httpd/conf.d/ssl.conf:mode_ssl 提供的Apache配置文件;
/etc/pki/tls/private/localhost.key :系統私鑰文件,可以用來製作憑證的
/etc/pki/tls/certs/localhost.crt :就是加密過的憑證檔(signed certificate)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章