http服務詳解(2)——httpd2.2的配置文件常見設置

来源:http://www.cnblogs.com/along21/archive/2017/10/23/7691642.html
-Advertisement-
Play Games

摘要:一個服務的配置文件非常重要,弄懂配置文件是熟練掌握服務的必要前提。 一、httpd-2.2常見文件介紹 (1)配置文件: 主配置文件儘量別改,改自己的子配置文件 /etc/httpd/conf/httpd.conf 主配置文件 /etc/httpd/conf.d/*.conf 自配置文件 檢查 ...


 摘要:一個服務的配置文件非常重要,弄懂配置文件是熟練掌握服務的必要前提。

一、httpd-2.2常見文件介紹

(1)配置文件:

主配置文件儘量別改,改自己的子配置文件

  /etc/httpd/conf/httpd.conf 主配置文件

  /etc/httpd/conf.d/*.conf 自配置文件

檢查配置語法:

  httpd -t 通用

  service httpd configtest centos7不支持

服務腳本:/etc/rc.d/init.d/httpd

腳本配置文件:/etc/sysconfig/httpd

服務控制和啟動:

  chkconfig httpd on|off

  service {start|stop|restart|status|configtest|reload} httpd

站點網頁文檔根目錄:

/var/www/html

模塊文件路徑 :

  /etc/httpd/modules 軟連接

  /usr/lib64/httpd/modules

主程式文件:

  /usr/sbin/httpd

  /usr/sbin/httpd.worker

  /usr/sbin/httpd.event

主進程文件 :服務起來後會自動生成,可以查進程pid,最後不要手動加

  /etc/httpd/run/httpd.pid

日誌文件目錄:

  /var/log/httpd

    access_log: 訪問日誌

    error_log :錯誤日誌

幫助文檔包:httpd-manual ,按完包後,重啟服務,就能看幫助文檔,沒網也可以看

 

(2)httpd 配置文件的組成:修改前先備份,養成好習慣

# grep "Section" /etc/httpd/conf/httpd.conf  人為的分成3大段,方便管理,可以隨便放

### Section 1: Global Environment 全局環境配置

### Section 2: 'Main' server configuration 主伺服器

### Section 3: Virtual Hosts 虛擬主機,全是註釋,預設沒有

 

配置格式:directive(指令) value(值)

  directive: 不區分字元大小寫

  value: 為路徑時,是否區分大小寫,取決於文件系統

 

二、Httpd 2.2 常見配置:可以在官網或安裝幫助包查看幫助

vim /etc/httpd/conf/httpd.conf 總配置文件

1、啟動報錯:提示沒有名字fqdn

在總配置文件搜索 /ServerName,把註釋去掉,隨便寫,最好寫自己的網站名;啟動就不報錯了

修改後:

 

2、顯示伺服器版本信息

ServerTokens:管理響應首部信息的,顯示伺服器版本信息

搜索/ServerTokens,文件預設是OS,可以註釋掉、刪掉,有預設值full

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

  配置文件在的設置      首部顯示的信息

① ServerTokens Prod[uctOnly]:Server: Apache

② ServerTokens Major: Server:Apache/2

③ ServerTokens Minor: Server:Apache/2.0

④ ServerTokens Min[imal]: Server:Apache/2.0.41

⑤ ServerTokens OS: Server:Apache/2.0.41 (Unix)

⑥ ServerTokens Full (or not specified):Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis. After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.

建議使用:ServerTokens Prod 安全,顯示越詳細越不安全

可以查看幫助信息,要安裝httpd-manual包,幫助信息很詳細

實例:cur -I 192.168.37.106 查詢頭部信息

另:可以在調度器上設置:直接隱藏版本信息或隨意修改

 

3、修改監聽的IP和Port

搜索/Listen,預設80

Listen [IP:]PORT,不要隨意更改,可以用於只想讓特定的ip訪問,不讓其他人訪問

(1) 省略IP 表示為0.0.0.0; 埠綁定所有ip

(2) Listen 指令至少一個,可重覆出現多次,寫多個,不能為空或註釋掉,註釋掉服務起不來

  Listen 80

  Listen 8080 寫多個就可開啟多個埠,但是訪問的還是同一個網站

註意:改了埠,要在訪問時加上自己改的埠

(3) 修改監聽socket,重啟服務進程方可生效

 

3、持久連接

Persistent Connection :連接持久建立,每個資源獲取完成後不會斷開連接,而是繼續等待其它的請求完成,預設關閉持久連接 KeepAlive Off

  斷開條件:數量限制:100

    時間限制:以秒為單位, httpd-2.4 支持毫秒級

  副作用:對併發訪問量較大的伺服器,持久連接功能會使用有些請求得不到響應

  折中:使用較短的持久連接時間

設置: KeepAlive On|Off

   KeepAliveTimeout 15

  MaxKeepAliveRequests 100

測試:telnet WEB_SERVER_IP PORT

  GET /URL HTTP/1.1    模仿報文首部

  Host: WEB_SERVER_IP

 

4 、MPM( Multi-Processing Module )多路處理模塊

(1)MPM 工作模式介紹:prefork、worker、 event(試驗階段)

① prefork 多進程I/O 模型每個進程響應一個請求,預設模型

  一個主進程 :生成和回收n個子進程 , 創建套接字,不響應請求

  多個子進程:工作work 進程,每個子進程處理一個請求;系統初始時,預先生成多個空閑進程,等待請求,最大不超過1024個

② worker :復用的多進程I/O 模型, 多進程多線程,IIS 使用此模型

  一個主進程: 生成m 個子進程,每個子進程負責生n個線程,每個線程響應一個請求 ,併發響應請求:m*n

 event :事件驅動模型(worker 模型的變種)

  一個主進程:生成m個子進程,每個進程直接響應n個請求,併發響應請求:m*n ,有專門的線程來管理這些keep-alive 類型的監控線程,當有真實請求時, 將請求傳遞給服務線程,執行完畢後,又允許釋放 。這樣增強了高併發場景下的請求處理力 能力

httpd-2.2: event 測試版 ,centos6 預設

httpd-2.4 :event 穩定版,centos7 預設

  圖示:

① prefork MPM

② worker MPM

③ event MPM

註意:httpd-2.2 不支持同時編譯多個模塊,所以只能編譯時選定一個;rpm 安裝的包提供三個二進位程式文件,分別用於實現對不同MPM 機制的支持

(2)確認方法:

  ps aux | grep httpd

  預設為/usr/sbin/httpd, 即prefork 模式

查看模塊列表:

  查看靜態編譯的模塊

    httpd -l

  查看靜態編譯及動態裝載的模塊

    httpd -M

動態模塊載入:不需重啟即生效

動態模塊路徑:/usr/lib64/httpd/modules

 

(3)更換使用的httpd 程式模塊:

/etc/sysconfig/httpd 在這個文件中改

① HTTPD=/usr/sbin/httpd.worker  預設是被註釋的,去掉註釋就切換到worker程式了

重啟服務生效

pstree -p|grep httpd 查看進程和線程

httpd.worker -l 模塊換了,命令也換了

② Httpd 2.4 與之不同

以動態模塊方式提供

配置文件:/etc/httpd/conf.modules.d/00-mpm.conf

httpd -M |grep mpm

重啟服務 生效

pstree -p|grep httpd 查看進程和線程

 

(4)prefork 的預設配置:主配置文件中,搜索/prefork

<IfModule prefork.c> 根據工作環境設置

StartServers 8 一開啟服務就準備8個進程

MinSpareServers 5 最小的空閑進程,先預留,不夠就生成

MaxSpareServers 20 最大空閑進程

ServerLimit 256 最多進程數, 最大256

MaxClients 256 最大併發數

MaxRequestsPerChild 4000 子進程最多能處理請求數量。在處理MaxRequestsPerChild 個請求之後, 子進程將會被父進程終止,這時候子進程占用的記憶體就會釋放( 為0時永遠不釋放)

</IfModule>

 

(5) worker 的預設配置:主配置文件中,搜索/worker

<IfModule worker.c>

StartServers 4 一開啟服務就準備4個進程,4x25=100線程

MaxClients 300 最多300個線程

MinSpareThreads 25 最小空閑25線程

MaxSpareThreads 75 最大空閑75線程,和上邊衝突,開服務先開啟4個進程,再殺死1個進程

ThreadsPerChild 25 每個子進程最大25個線程

MaxRequestsPerChild 0 無限制

</IfModule>

(6) 測試性能:ab命令 yum -y install httpd-tools

ab -c 100 -n 1000 http://192.168.30.106/

-  c:併發連接數

  -n:總的連接數

結果:發現prefork和worker性能沒有什麼較大的差異

 

5 、DSO:Dynamic Shared Object

① 載入動態模塊配置:/etc/httpd/conf/httpd.conf 主配置文件

配置指定實現模塊載入格式:搜索/LoadModule

② 格式:

LoadModule <mod_name> <mod_path>

模塊文件路徑可使用相對路徑:相對於ServerRoot 服務的根(設置的為/etc/httpd)

③ httpd -M 可以查詢模塊信息,若刪除或註釋掉一個模塊,那個模塊的功能就會禁用,且httpd -M 查詢不到

因此,當我們需要用PHP時,可以寫入PHP的模塊,就能使用了

示例:

LoadModule auth_basic_module

modules/mod_auth_basic.so

 

6 、定義'Main' server (主站點) 的文檔頁面路徑

搜索/DocumentRoot

格式:DocumentRoot "/path"

作用:文檔路徑映射:

  DocumentRoot 指向的路徑為URL 路徑的起始位置

註意:

① 可以寫多行,但是下邊的會覆蓋上邊的,最後還是使用下邊的,寫到自配置文件一樣,因為子配置文件Include conf.d/*.conf在這行設置的上邊,會被這行設置覆蓋。

② 若設置的主站點不存在,那麼服務會啟動失敗!

示例:

  DocumentRoot "/app/site1"

   http:/192.168.30.106/--> /app/site1/index.html

註意:SELinux 和iptables 的狀態,要關掉

 

7、定義站點主頁面

搜索:/DirectoryIndex

格式:DirectoryIndex index.html index.html.var

分析:

① 查詢http://192.168.30.106/ 及其子目錄時,不指定文件,可以預設打開目錄下的index.html文件

若沒有設置中的兩個文件,看其他設置:下設置9,預設是報錯;

有特定設置會顯示特定設置,如首頁;子配置文件 /etc/httpd/conf.d/welcome.conf 有設置,若只有 / 或多個,目錄下沒有index.html,就顯示報錯頁面,welcome.conf這個設置優先順序高,安全

報錯頁面

 

8 、站點訪問控制常見機制

可基於兩種機制指明對哪些資源進行何種訪問控制訪問控制機制有兩種:客戶端來源地址,用戶賬號

文件系統路徑:格式

<Directory "/path">

...

</Directory>

<Files "/path/file">

...

</Files>

<FilesMatch "PATTERN">

...

</FilesMatch>

例:主配置文件中,不能訪問 .ht 開頭的文件的設置

 

URL 路徑:支持正則,通配符

<Location "">

...

</Location>

<LocationMatch "">

...

</LocationMatch>

例:子配置文件,/etc/httpd/conf.d/welcome.conf 的設置

註意:支持正則,通配符

示例:

<FilesMatch "\.(gif|jpe?g|png)$"> 正則

<Files "?at.*"> 通配符

<Location /status> 絕對路徑的目錄

<LocationMatch "/(extra|special)/data">

 

9 、<Directory> 中"基於源地址"實現訪問控制

(1) Options :後跟1 個或多個以空白字元分隔的選項列表,可在總配置文件中修改,也可從創建一個自配置文件中修改設置

在選項前的+ ,- 表示增加或刪除指定選項

  常見選項:

  Indexes :指明的URL 路徑下不存在定義的主頁面資源相符的資源文件時,上設置7,返回索引列表給用戶,預設是不允許,加上不安全;有需要的時候,例如做yum源的時候

  FollowSymLinks :允許訪問符號所指向的源文件,例:鏈接文件,預設允許

  None :全部禁用

  All:全部允許

註意:若衝突,後邊的設置會覆蓋前邊的

子目錄也可以設置的和父目錄不一樣,放在下邊

例:vim /etc/httpd/conf.d/test.conf 子配置文件

 

(2) AllowOverride,和上邊實現的效果一樣,就是把設置放在目錄的隱藏文件下.htaccess

與訪問控制相關的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName 指定)文件中,覆蓋之前的,.htaccess是主配置文件中設置指定的

用法:vim /etc/httpd/conf.d/test.conf

只對<directory> 語句有效

  AllowOverride All: 所有指令都有效

  AllowOverride None :.htaccess 文件無效

  AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都無法覆蓋

然後在.htaccess文件中設置,.htaccess放在所需要控制的目錄下,例bbs目錄

vim /app/site1/.htaccess

options +indexes -followsymlinks

 

(3) order 和allow 、deny,在2.4中已無效,有另外的許可權控制

order :定義生效次序;寫在後面的表示預設法則,覆蓋,優先順序高

  Order allow,deny

  Order deny,allow

  Allow from, Deny from

來源地址的表達方法:IP、網路:

  172.16

  172.16.0.0

  172.16.0.0/16

  172.16.0.0/255.255.0.0

分析:① 若不衝突,allow,deny都產生效果,例

② 若衝突,看誰在後,在後的優先順序高,但是只限於衝突的,

例:除107,這個網段的其他ip可以訪問,但這個網段以外,都拒絕

③ 沒在deny、allow中設置的,看allow/deny誰在後邊,誰優先順序高

 

10 、日誌設定

日誌類型:

  訪問日誌

  錯誤日誌

錯誤日誌:

  ErrorLog logs/error_log

  LogLevel warn

  loglevel 可選值:

  debug, info, notice, warn,error

  crit, alert, emerg

 

訪問日誌:搜索:/LogForma

定義訪問日誌格式:LogFormat format strings,

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

下邊有選擇哪一個日誌

使用日誌格式:

CustomLog logs/access_log combined

參考幫助:

http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

各項設置的意思:可以隨便改自己想要的

%h 客戶端IP 地址

%l 遠程用戶, 啟用mod_ident 才有效,通常為減號"-" "

%u 驗證(basic ,digest )遠程用戶, 非登錄訪問時,為一個減號"-"

%t 伺服器收到請求時的時間

%r First line of request ,即表示請求報文的首行;記錄了此次請求的"方法","URL" 以及協議版本

%>s 最後的響應狀態碼

%b 響應報文的大小,純數據大小,單位是位元組;不包括響應報文http 首部

%{Referer}i 請求報文中首部"referer" 的值;即從哪個頁面中的超鏈接跳轉至當前頁面的

  防止倒鏈,i就是首部的意思

%{User-Agent}i 請求報文中首部"User-Agent" 的值;即發出請求的應用程式

幫助文檔里都有

查詢日誌:tail /var/log/httpd/access_log

 

11 、設定預設字元集

AddDefaultCharset UTF-8(全球) 預設

中文字元集:GBK, GB2312(中文簡體), GB18030

 

12 、定義路徑別名

格式: Alias /URL/ "/PATH/" /URL/有沒有都無所謂,虛擬的目錄

Alias /download/ "/rpms/pub/"

  例:http://www.magedu.com/download/bash.rpm ==> /rpms/pub/bash.rpm

  http://www.magedu.com/images/logo.png ==> /www/htdocs/images/logo.png

 

13 、status 頁面

這個功能需要status_module 模塊

  httpd -M | grep status 查詢這個模塊有沒有被載入

在總配置文件中搜索/server-status

LoadModule status_module modules/mod_status.so 這個模塊在總配置文件有載入

<Location /server-status> 本來是註釋掉的

  SetHandler server-status2 這個名字隨便寫,只要訪問時用這個名字就行

  Order allow,deny

  Allow from 192.168.30.0/24

</Location>

ExtendedStatus On 顯示擴展信息,預設也是註釋的

顯示狀態頁面

狀態的類型:

  "-"等待連接 "S"啟動 "R"處於讀取狀態

  "W"發送應答 "K"保持長連接 "D"dns查詢

  "C"正處於關閉狀態 "L"記錄日誌 "G"優雅的終止,溫柔的斷開

  "r"把空閑的worker進程清理 "."沒有正常的進程

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 查詢速度慢的原因 1、沒有索引或者沒有用到索引(這是查詢慢最常見的問題,是程式設計的缺陷) 2、I/O 吞吐量小,形成了瓶頸效應。 3、沒有創建計算列導致查詢不優化。 4、記憶體不足 5、網路速度慢 6、查詢出的數據量過大(可採用多次查詢,其他的方法降低數據量) 7、鎖或者死鎖(這是查詢慢最常見的問題 ...
  • 13.2 TFT LCD顯示實例 13.2.1 程式設計 本實例的目的是從串口輸出一個菜單,從中選擇各種方法進行測試,比如畫線、 畫圓、顯示單色、使用調色板等。 13.2.2代碼詳解 本實例源碼在/work/hardware/lcd目錄下,與LCD相關的代碼有3個文件:lcddrv.c、 frame ...
  • 瞭解LCD顯示器的介面及時序; 掌握S3C2410/S3C2440 LCD控制器的使用方法; 瞭解幀緩衝區的概念,掌握如何設置幀緩衝區來顯示圖像; ...
  • 瞭解S3C2410/S3C2440和觸摸屏的結構; 瞭解電阻觸摸屏的工作原理和等效電路圖; 瞭解S3C2410/S3C2440觸摸屏控制器的多種工作模式; 掌握S3C2410/S3C2440 ADC和觸摸屏的編程方法; ...
  • 一直以為自己linux還說的過去,事實上已經跟不上日新月異的應用需要了。 現成文檔都沒法看,錯太多。然而畢竟是多年積累,整理一個準確的文檔還是能做到的。 本機ip設置: # static interfaceauto eth0iface eth0 inet staticaddress 192.168. ...
  • 本來是計劃對postfix做一個全系列的安裝文檔的,不過在查某個知識點的時候,偶然找到一個已經寫好的postfix全系列文章,在全部看完之後驚為天人,我認為:總體上會比我要寫的要好,所以我準備借用一下拿來主義的案例,直接總結一個鏈接的目錄連接給大家參考。 我之前幾篇寫好的已經構建了一個基本的郵件系統 ...
  • 一、lvs介紹 LVS的英文全名為“Linux Virtual Server”,即Linux虛擬伺服器,是一個虛擬的四層交換器集群系統,根據目標地址和目標埠實現用戶請求轉發,本身不產生流量,只做用戶請求轉發,目前是負載均衡性能最好的集群系統。 二、lvs集群的類型: lvs nat:修改請求報文的 ...
  • 一、簡介 1、認識 Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。Rsync使用所謂的“Rsync演算法”來使本地和遠 程兩個主機之間的文件達到同步,這個演算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快 Rsy ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...