http服務器程序
httpd Apache
nginx
lightttpd
httpd介紹
特性:
1. 高度模塊化:Core+Modules
2. DSO:Dynamic Shared Ojbect動態加/卸載
3. MPM:Multi-processing Module多路處理模塊
4. 虛擬主機:IP,Port,FQDN
5. CGI:通用網關接口
6. 反向代理(和正向代理的區別:正向代理距離客戶端近,加速客戶端的訪問速度;反向代理距離服務器近,可以做調度,把client的請求轉發到websrv集群中的某一個client<--->proxy(cache)<--->reverse proxy<--->websrv1,websrv2,sebsrnv)
7. 負載均衡
8. 路徑別名
9. 雙向認證
10. 支持第三方模塊
MPM工作模式:
### prefork:多進程I/O模型,每個進程響應一個請求,默認模型
一個主進程:生成和回收n個子進程,創建套接字,不響應請求
多個子進程:工作work進程,每個子進程處理一個請求;系統初始時,預先生成多 個空閑進程,等待請求,最大不超過1024個(原因是 ulimit -a:open files 1024)
### worker:復用的多進程I/O模型,多進程多線程,IIS使用此模型
一個主進程:生成m個子進程,每個子進程負責生個n個線程,每個線程響應一個請求,並發響應請求:m*n
### event:事件驅動模型(worker模型的變種)
一個主進程:生成m個子進程,每個進程直接響應n個請求,並發響應請求:m*n,有專門的線程來管理這些keep-alive類型的線程,當有真實請求時,將請求傳遞給服務線程,執行完畢后,又允許釋放。這樣增強了高並發場景下的請求處理能力
在支持MPM工作模式上,不同的httpd版本不同的方式:
httpd-2.2版本,有不同的二進制程序:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
httpd-2.4版本,有不同的模塊來支持,好處是動態加載,不需要更換二進制執行程序,不用時可以動態卸載:
/usr/lib64/httpd/modules/mod_mpm_event.so
/usr/lib64/httpd/modules/mod_mpm_worker.so
/usr/lib64/httpd/modules/mod_mpm_prefork.so
httpd安裝
版本:
CentOS6:2.2
CentOS7:2.4
安裝方式
rpm:centos發行版,穩定,建議使用
編譯:定制或特殊需求
httpd配置文件的組成
配置格式:directive value
grep "^[^ #]" /etc/httpd/conf/httpd.conf
各個配置參數的用法,見管網http://httpd.apache.org/docs/2.4/mod/quickreference.html
httpd幾個主要配置:
-
welcome.conf
/etc/httpd/conf.d/welcome.conf 此文件是訪問網站找不到主頁時顯示的默認頁面 -
servertoken
默認是full,有安全隱患,通過瀏覽器的debug模式可以看到apache的詳細版本,如下圖:
[root@wwwCentOS6 ~]# curl -I 172.20.42.145
HTTP/1.1 200 OK
Date: Thu, 21 Jun 2018 11:41:27 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16
Last-Modified: Wed, 20 Jun 2018 07:59:30 GMT
ETag: "12-56f0e2db429bf"
Accept-Ranges: bytes
Content-Length: 18
Content-Type: text/html; charset=UTF-8新建/etc/httpd/conf.d/user.conf,增加
Servertokens prod[root@wwwCentOS6 ~]# curl -I 172.20.42.145
HTTP/1.1 200 OK
Date: Thu, 21 Jun 2018 11:43:16 GMT
Server: Apache
Last-Modified: Wed, 20 Jun 2018 07:59:30 GMT
ETag: "12-56f0e2db429bf"
Accept-Ranges: bytes
Content-Length: 18
Content-Type: text/html; charset=UTF-8 -
多端口支持
在上述的user.conf中,增加
Listen 8080
如果更改默認的80為別的端口,需要更改主配置文件httpd.conf的Listen為不同的端口,同時Listen可以綁定特定IP,如Listen 12.34.56.78:80 -
持久連接
KeepAlive默認是on,時間是5秒。
KeepAliveTimeout 50 設置為50秒
MaxKeepAliveRequests 100用telnet測試:
[root@wwwCentOS6 ~]# telnet 172.20.42.145 80
Trying 172.20.42.145...
Connected to 172.20.42.145.
Escape character is '^]'.
GET /index.html HTTP/1.1
HOST: 6.6.6.6注意:具體待久連接的時間設置需要看具體的業務需求。斷開連接由KeepAliveTimeout和MaxKeepAliveRequests兩個參數一起作用,只要其中有一個達到設定值就觸發斷開。
-
MPM( Multi-Processing Module)多路處理模塊
00-mpm.conf
默認是LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
壓力測試工具:ab -c 100 -n 1000 http://IP
DSO:Dynamic Shared Object
http -M動態模塊查看
modules -> ../../usr/lib64/httpd/modules模塊存放路徑增加默認的進程和線程數量
StartServers 20
StartThreads要根據工作模型來設置,如prefork模式不支持線程
-
定義'Main' server的文檔頁面路徑
DocumentRoot “/path”
CentOS7下,必須開放此文件夾的權限才可以訪問
DocumentRoot "/data/website"
<Directory "/data/website">
Require all granted
-
定義站點主頁面
DirectoryIndex index.html index.html.var
可以是軟鏈接
mkdir -p /app/sports/
echo sports > /app/sports/index.html
在/data/website
ln -s /app/sports/ sports
訪問http://ip/sports -
站點訪問控制常見機制
Require ip IPADDR:授權指定來源的IP訪問
Require not ip IP:拒絕特定的主機訪問
在http2.2中
order deny,allow (allow的優先級大於deny,后面的優先級高)
allow from 192.168.30.6
deny from 192.18.30.0/24另外,對於某些特定,設置無法訪問,如下禁止訪問所有.conf結尾的配置文件。
<Files ".conf">
Require all denied
或者
<Filesmatch "..(conf|ini)$">
Require all denied
還有如某一個配置的文件夾下的所有文件都設定訪問權限:
<location /conf>
Require all granted
Require not ip 172.20.42.144
如上的例子是不允許172.20.42.144訪問。
<location /conf>
Require all denied
require ip 172.16.1.1 允許特定IP
<location /conf>
如上的例子是只允許172.16.1.1訪問。
<File "*.conf">
Require all denied
如上例子是不允許任何人訪問.conf的文件,客戶端訪問會出現 403 Forbidden.<Filesmatch ".*.(conf|ini)$">
Require all denied
filesmatch和files同樣的功能,支持正則表達式。另外,上述的Directory,Location,File,Filematch配置能夠防止/conf下的配置文件被所有用戶訪問,以防止一些配置文件如mysql的用戶名和密碼泄露給互聯網用戶。
-
Options設置,可以設置某個Directory下的訪問權限
如下配置禁止軟鏈接的訪問:
<Directory "/var/www/html">
options -FollowSymLinks
Require all granted
如下配置可以在沒有index.html情況下顯示所有文件列表,應用情型如阿里雲的repository,顯示文件夾索引
<Directory "/var/www/html">
options +indexes -FollowSymLinks
Require all granted
-
AllowOverride
AllowOverride optitions=FollowSymLinks -
日志設定
Referer有利於分析用戶是通過哪個網站轉發的如通過baidu轉發的,也可以監控網站盜鏈的發生。
User-Agent記錄瀏覽器的類型。防止爬蟲一定程度上,爬蟲可以偽造瀏覽器類型。curl -A "evan" http://I(偽造名字叫evan的瀏覽器) -
定義路徑別名
未完待續