Httpd2.2常見配置及功能

来源:http://www.cnblogs.com/1477717815fuming/archive/2017/10/22/7710622.html
-Advertisement-
Play Games

Httpd 2.2常見配置 要配置http服務的配置文件,先備份一下,養成良好習慣,如果誤操作導致http服務起不來,就可以將備份的主配置文件重新覆蓋一下 httpd配置文件的組成:有三大部分組成,其實配置文件裡面的內容放的順序沒有規定,之所以把它劃分為三部分是為了查看更加清晰 # grep "Se... ...


Httpd 2.2常見配置

要配置http服務的配置文件,先備份一下,養成良好習慣,如果誤操作導致http服務起不來,就可以將備份的主配置文件重新覆蓋一下

httpd配置文件的組成:有三大部分組成,其實配置文件裡面的內容放的順序沒有規定,之所以把它劃分為三部分是為了查看更加清晰

# grep "Section" /etc/httpd/conf/httpd.conf

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

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

### Section 3: Virtual Hosts 虛擬主機

配置格式:directive value

directive: 不區分字元大小寫

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

瞭解http服務的配置文件是學好http服務的基礎,下麵我們就一起來看一下http服務的配置文件有哪些功能

  1. 解決啟動httpd服務時報錯的問題

在啟動http服務時,總會有一些錯誤,如圖:

修改httpd服務的配置文件

vim /etc/httpd/conf/httpd.conf,進入到配置文件之後搜索ServerName,然後按照格式隨便添加一個功能變數名稱就行了

然後再重啟服務,這樣就沒有報錯了

2、顯示伺服器版本信息

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

After version 2.0.44, this directive also controls the information presented by the ServerSignaturedirective.

建議使用:ServerTokens Prod,這時因為別人可以通過遠程來查看你的伺服器版本信息,知道了你的伺服器版本信息,就可以針對你的伺服器版本來攻擊你,使用了Prod,就會隱藏你的伺服器版本信息

curl -I 192.168.10.135 可以顯示伺服器版本信息

修改版本信息(修改配置文件)

vim /etc/httpd/conf/httpd.conf,進入到配置文件後,搜索ServerTokens,如圖:

改完之後,在重新載入配置文件,service httpd reload,再次查看伺服器版本信息

伺服器版本隱藏

3.修改監聽的IPPort

Listen [IP:]PORT

(1) 省略IP表示為本機所有IP

(2) Listen指令至少一個,可重覆出現多次

Listen 80

Listen 8080

在httpd服務的配置文件當中,監聽的埠預設為80埠,你也可以人為的修改埠,比如修改成9527

重新載入httpd服務service httpd reload,再查看一下埠號ss -ntl

沒有80埠,此時監聽http服務的是9527埠,此時你在訪問時就要指定埠號了,不然會訪問失敗

當然你也可以將改埠號綁定在指定的本機IP地址上,不指定就預設綁定在本機的所有IP地址上,如圖:將80埠綁定在本機的192.168.10.135上,將9527埠綁定在172.17.0.182

然後再重新載入httpd服務,查看埠號

這樣別人訪問時就必須指定埠號了,因為192.168.10.135綁定在80埠上,不指定就預設為80埠,所以能訪問成功,而172.17.0.182綁定在9527埠上,這時你不指定就不能訪問了

示例:

Listen 192.168.1.100:8080

Listen 80

查看服務對應的埠

4.持久連接

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

斷開條件:數量限制:100

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

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

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

設置:KeepAlive On|Off

KeepAlive Timeout15

MaxKeepAlive Requests100

測試:telnet WEB_SERVER_IP PORT

GET /URL HTTP/1.1

Host: WEB_SERVER_IP

如果不配置http服務配置文件的話,預設只能訪問一個資源,就斷開連接

http服務配置文件將KeepAlive off改為KeepAlive on

再去訪問資源時就能夠連續訪問多個資源,而不斷開連接

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

prefork, worker, event(試驗階段)

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

確認方法:

psaux | grep httpd

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

查看靜態編譯的模塊

httpd -lhttpd.worker -l

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

httpd –Mhttpd.worker -M

動態模塊路徑

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

 

更換使用的httpd程式:

vim /etc/sysconfig/httpd

HTTPD=/usr/sbin/httpd.worker

重啟服務生效

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

prefork的預設配置:

<IfModule prefork.c>

StartServers     8 開啟的伺服器(表現為開啟了http服務,運行了8httpd主程式)

MinSpareServers     5 最小空閑伺服器

MaxSpareServers     20 最大空閑伺服器

ServerLimit 256 最多進程數,最大20000

MaxClients 256 最大併發

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

</IfModule>

worker的預設配置:

<IfModule worker.c>

StartServers 4

MaxClients 300

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0 無限制

</IfModule>

將來開啟了http服務就會運行4httpd.worker程式,每個主程式包含25個線程,所以總共有100個線程,但是支持最多的空閑線程只有75個,所以要殺死一個httpd.worker程式,所以當你開啟了http服務,就只有3httpd.worker程式運行

測試性能

ab -c 100 -n 1000 http://192.168.10.135/a.jpg總共1000個請求訪問a.jpg,併發同時能夠訪問100個,註意:訪問的頁面儘量大一些,不然無法測試性能

ll /var/www/html

1.prefork,將主程式改為httpd

經過幾次測試,prefork每秒能夠處理的次數大約為520

2.測試worker,將主程式改為httpd.worker

經過幾次測試,worker每秒能夠處理的請求次數大約為512

由此可以看出preforkwork的性能差不多

6、DSO:Dynamic Shared Object(動態共用對象)

載入動態模塊配置

/etc/httpd/conf/httpd.conf

配置指定實現模塊載入格式:

LoadModule<mod_name> <mod_path>

模塊文件路徑可使用相對路徑:

相對於ServerRoot(預設/etc/httpd

示例:

LoadModuleauth_basic_module

modules/mod_auth_basic.so

http服務要實現一個功能,要看他的模塊是否載入,在http服務的配置文件中,如果你把某個模塊給註釋掉,然後再重啟http服務,那麼http服務就沒有了這個模塊所對應的功能,例如:我將modules/mod_auth_basic.so這個模塊給註釋掉,如圖:

重啟服務,再查看所有的動態和靜態模塊就查不到了,http服務就沒有這個basic驗證的功能了

7、定義'Main' server的文檔頁面路徑

DocumentRoot"/path"

文檔路徑映射:

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

示例:

DocumentRoot"/app/data"

http://HOST:PORT/test/index.html

--> /app/data/test/index.html

註意:SELinuxiptables的狀態

更改'Main' server的文檔頁面路徑

預設是/var/www/html,如圖我將預設的路徑給註釋掉,更改為/app/data

然後再/app/data目錄下建一個index.html,再在裡面寫點東西

vim /app/data/index.html

在重啟服務,再來訪問,訪問的頁面就是在/app/data下編輯的index.html的內容,不是/var/www/index.html的內容了

 

8、定義站點主頁面

DirectoryIndex index.html index.html.var

在http服務的配置文件中,定義了站點的主頁面

訪問站點的主頁面先找index.html,再找index.html.var如果都找不到,就會訪問一個錯誤頁面

為什麼會返回一個錯的頁面呢,這是因為在另外一個配置文件/etc/httpd/conf.d/welcome.conf做了配置

vim /etc/httpd/conf.d/welcome.conf

 

我在根目錄下麵建一個子目錄bbs,裡面創建一個index.html文件,並寫上內容

接下來我訪問這個頁面,能訪問

如果把bbs裡面的index.html文件改個名a.html,再次去訪問,竟然顯示站點的文件列表,這樣是很危險的

再點一下a.html才能訪問

所以應該在http伺服器的根目錄下麵以及其下麵的子目錄都建一個index.html或者index.html.tar文件,以防止這種現象出現

9.站點訪問控制常見機制

可基於兩種機制指明對哪些資源進行何種訪問控制

訪問控制機制有兩種

1.客戶端來源地址

2.用戶賬號

文件系統路徑:

<Directory "/path">目錄

...

</Directory>

<File "/path/file">具體的文件路徑

...

</File>

<FileMatch"PATTERN">正則表達式來匹配

...

</FileMatch>

URL路徑:

<Location "">

...

</Location>

<LocationMatch"">

...

</LocationMatch>

示例:

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

<Files "?at.*"> 通配符,?是任意的一個字元,.就是點,*是任意字元串

<Location /status> URL

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

 

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

(1) Options:後跟1個或多個以空白字元分隔的選項列表

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

常見選項:

Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時,返回索引列表給用戶

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

None:全部禁用

All:全部允許

1.更改根目錄的許可權,對某個用戶設置acl許可權,或者設置根目錄下文件的許可權來實現訪問控制

註意:設置acl許可權是對apache用戶設置,因為訪問資源是通過apache用戶來訪問的

2.也可以在主配置文件里配置,也可以在子配置文件中配置,為了方便管理,在子配置文件中配置/etc/httpd/conf.d/*.conf

在/etc/httpd/conf.d/目錄下隨便創建一個以conf為結尾的配置文件,這就是http服務的子配置文件,假如說創建一個test.conf文件

vim /etc/httpd/conf.d/test.conf

如果什麼都不加,就預設能夠訪問軟鏈接,和不能子目錄下的索引,也就是子目錄的文件列表(在子目錄下沒有index.html或者index.html.tar的情況下)

將根目錄改為/app/data

單獨對根目錄進行配置,其子目錄也會繼承根目錄的配置

現在我想要拒絕能夠訪問軟鏈接和拒絕顯示子目錄下的索引,如圖,也可以寫成options none,不加-允許

重啟服務,這樣別人就不能訪問你的軟鏈接和子目錄的索引了,而且根目錄的子目錄會繼承父目錄的配置,所以別人也不能訪問子目錄里的軟鏈接和子目錄下的子目錄索引

f1fstab的軟鏈接,不能訪問軟鏈接

bbs是根目錄下的子目錄,bbs目錄中沒有index/htmlindex.html.tar,也不能訪問目錄的索引

f2是根目錄的子目錄下的軟鏈接,也不能訪問

bbs1bbs的子目錄,並且裡面沒有index.html或者index.html.tar,也不能訪問bbs1的索引

也可以單獨對根目錄下的子目錄進行配置,讓其不繼承對根目錄的配置

f2bbs目錄下的軟鏈接,又能訪問了

bbs1bbs的子目錄,又能訪問其索引了

(2) AllowOverride

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

只對<directory>語句有效

AllowOverride All: 所有指令都有效

AllowOverride None.htaccess 文件無效

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

註意:.htaccess這個文件必須在你所做了訪問控制的目錄里創建,如圖:我對/app/data做了訪問控制,所以要在/app/data下創建.htaccess覆蓋之前的訪問控制指令

vim /app/data/.htaccess在這個文件里設置配置指令來覆蓋之前的配置指令,如圖:拒絕了訪問子目錄的索引和訪問軟鏈接

如圖:不能訪問子目錄的索引

如圖:也不能訪問軟鏈接

 

(3)order和allow、deny(HTTP2.4版本已經取消,使用別的方法代替)

放在directory, .htaccess

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

還在http服務的子配置文件來配置

vim /etc/htpd/conf.d/test.conf

<directory /app/data>

配置指令

</directory>

配置指令如下:

示例1

order allow deny

allow from 192.168.10.188

deny from 192.168.10.200

允許和拒絕的毫無關係,所以order後面的allowdeny次序無所謂,允許192.168.10.188訪問,拒絕192.168.10.200訪問

示例2

order allow deny

allow from 192.168.10.0/14

deny from 192.168.10.200

允許的包括拒絕的,因為order後面deny在最後,所以拒絕的生效,允許192.168.10.0/24這個網段里的所有IP地址訪問,但除了192.168.10.200

示例3

order deny allow

allow from 192.168.10.0/14

deny from 192.168.10.200

允許的包括拒絕的,因為order後面allow放在最後,所以允許的生效,允許192.168.10.0/24這個網段里的所有IP地址訪問

 

11.日誌設定

日誌類型:

訪問日誌

錯誤日誌

錯誤日誌:

ErrorLoglogs/error_log

LogLevelwarn

loglevel可選值:

debug, info, notice, warn,error

crit, alert, emerg

訪問日誌:

定義日誌格式:LogFormatformat 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 驗證(basicdigest)遠程用戶,非登錄訪問時,為一個減號"-"

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

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

•%>s 響應狀態碼

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

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

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

 

12、設定預設字元集

AddDefaultCharset    UTF-8

中文字元集:GBK, GB2312, GB18030

設置指定的字元集(預設是UTF-8),修改http服務的配置文件

查看指定的字元集

12、定義路徑別名

格式:Alias /URL/ "/PATH/"

DocumentRoot"/www/htdocs"

http://www.magedu.com/download/bash.rpm

==>/www/htdocs/download/bash.rpm

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

定義路徑別名:假如我訪問根目錄下的bbs就給你跳轉到/app/bbsdir下的主頁面

1./app下建一個目錄bbsdir,在這個目錄下創一個主頁面文件index.html

mkdir /app/bbsdir

echo /app/bbdir > /app/bbsdir/index.html

2。改http服務的配置文件,我們還是改子配置文件

vim /etc/httpd/conf.d/test.conf

alias /bbs /app/bbsdir (註意這裡的/bbs是相對路徑,相對於/var/www/html)

然後重新載入服務service httpd reload

3.訪問根目錄下的bbs,如圖:確實跳轉到了/app/bbsdir目錄下的主頁面

 

14、基於用戶的訪問控制

認證質詢:WWW-Authenticate:響應碼為401,拒絕客戶端請求,並說明要求客戶端提供賬號和密碼

認證:Authorization:客戶端用戶填入賬號和密碼後再次發送請求報文;認證通過時,則伺服器發送響應的資源

認證方式兩種:

basic:明文

digest:消息摘要認證,相容性差

安全域:需要用戶認證後方能訪問的路徑;應該通過名稱對其進行標識,以便於告知用戶認證的原因

用戶的賬號和密碼:

虛擬賬號:僅用於訪問某服務時用到的認證標識

存儲:文本文件,SQL資料庫,ldap目錄存儲,nis

basic認證配置示例:

(1) 定義安全域

<Directory "/path">

Options None

AllowOverride None

AuthType Basic

AuthName "String"

AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"

Require user username1 username2 ...

</Directory>

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

-Advertisement-
Play Games
更多相關文章
  • 工作中遇到的數據更新,學習記錄。 1、使用update進行數據更新 1)最簡單的更新 update tablea a set a.price=1.00 2)帶條件的數據更新 update tablea a set a.price = 2.00 where a.id='02' 3)兩張表關聯更新為固定 ...
  • 瞭解UART原理; 掌握S3C2410/S3C2440中UART的使用 ...
  • Centos 7 安裝與配置 1. 安裝VMware。 2. 安裝centos7 首先右鍵“新建虛擬機”,選擇 “典型”安裝,如下圖: 點擊下一步,選擇“稍後安裝操作系統”,如圖: 選擇好對應的操作系統, 然後,選擇centos的目錄路徑,如圖: 指定磁碟容量,預設20g,可以調整。空間逐漸增加,上 ...
  • 瞭解S3C2410/S3C2440的時鐘體繫結構 掌握通過設置MPLL改變系統時鐘的方法 掌握在不同的頻率下設置存儲控制器的方法 掌握PWM定時器的用法 瞭解WATCHDOG定時器的用法 ...
  • 瞭解ARM體系CPU的7種工作模式 瞭解S3C2410/S3C2440中斷體繫結構 掌握S3C2410/S3C2440的中斷服務程式的編寫方法 ...
  • 第1章 SSH服務 1.1 SSH服務協議說明 SSH 是 Secure Shell Protocol 的簡寫,由 IETF 網路工作小組(Network Working Group )制定;在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密後在進行數據傳輸。確保了傳遞的數據安全 ...
  • mkdir命令 mkdir:make directory(ies)的縮寫,用來創建目錄 1、語法 mkdir [OPTION]... DIRECTORY 註釋:option是選擇,可選,directory是要創建的目錄名稱 2、選項 3、參數 目錄:指定要創建的目錄,如果創建多個目錄空格隔開。 4、 ...
  • 瞭解NAND Flash 晶元的介面 掌握通過NAND Flash控制器訪問NAND Flash的方法 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...