httpd簡介


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幾個主要配置:

  1. welcome.conf
    /etc/httpd/conf.d/welcome.conf 此文件是訪問網站找不到主頁時顯示的默認頁面

  2. 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

  3. 多端口支持
    在上述的user.conf中,增加
    Listen 8080
    如果更改默認的80為別的端口,需要更改主配置文件httpd.conf的Listen為不同的端口,同時Listen可以綁定特定IP,如Listen 12.34.56.78:80

  4. 持久連接
    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兩個參數一起作用,只要其中有一個達到設定值就觸發斷開。

  5. 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模式不支持線程

  6. 定義'Main' server的文檔頁面路徑
    DocumentRoot “/path”
    CentOS7下,必須開放此文件夾的權限才可以訪問
    DocumentRoot "/data/website"
    <Directory "/data/website">
    Require all granted

  7. 定義站點主頁面
    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

  8. 站點訪問控制常見機制
    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的用戶名和密碼泄露給互聯網用戶。

  9. Options設置,可以設置某個Directory下的訪問權限
    如下配置禁止軟鏈接的訪問:
    <Directory "/var/www/html">
    options -FollowSymLinks
    Require all granted

    如下配置可以在沒有index.html情況下顯示所有文件列表,應用情型如阿里雲的repository,顯示文件夾索引
    <Directory "/var/www/html">
    options +indexes -FollowSymLinks
    Require all granted

  10. AllowOverride
    AllowOverride optitions=FollowSymLinks

  11. 日志設定
    Referer有利於分析用戶是通過哪個網站轉發的如通過baidu轉發的,也可以監控網站盜鏈的發生。
    User-Agent記錄瀏覽器的類型。防止爬蟲一定程度上,爬蟲可以偽造瀏覽器類型。curl -A "evan" http://I(偽造名字叫evan的瀏覽器)

  12. 定義路徑別名
    未完待續


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM