Linux 第76天 http配置文件內容解析

Linux 第76天 http配置文件內容解析

時間: 20181018

        個人小站,歡迎訪問: www.winthcloud.top


目錄

httpd 常見配置

日誌設定

虛擬主機(重點)

mod_deflate模塊

https:http over ssl

總結


httpd 2.2常見配置

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: 爲路徑時,是否區分大小寫,取決於文件系統

ServerName 主機名


顯示服務器版本信息

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


持久連接

Persistent Connection:連接建立,每個資源獲取完成後不會斷開連接,而是繼續

等待其它的請求完成,默認關閉持久連接

斷開條件: 

1)數量限制:100

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

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

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

設置:KeepAlive On|Off

KeepAliveTimeout 15

MaxKeepAliveRequests 100

測試:telnet WEB_SERVER_IP PORT

GET /URL HTTP/1.1

Host: WEB_SERVER_IP


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

prefork的默認配置:

<IfModule prefork.c>

StartServers 8

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>



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

DocumentRoot “/path”

文檔路徑映射:

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

示例:

DocumentRoot "/app/data“

http://HOST:PORT/test/index.html --> /app/data/test/index.html


定義站點主頁面

DirectoryIndex index.html index.html.var


站點訪問控制常見機制

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

訪問控制機制有兩種:客戶端來源地址,用戶賬號

文件系統路徑:

<Directory “/path">

...

</Directory>

<File “/path/file”>

...

</File>

<FileMatch "PATTERN">

...

</FileMatch>

<Directory>中“基於源地址”實現訪問控制

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

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

常見選項:

Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源

文件時,返回索引列表給用戶

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

None:全部禁用

All: 全部允許

(2) AllowOverride

與訪問控制相關的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName

指定)文件中,覆蓋之前的配置指令

只對<directory>語句有效

AllowOverride All: .htaccess中所有指令都有效

AllowOverride None: .htaccess 文件無效

AllowOverride AuthConfig Indexes 除了AuthConfig 

和Indexes的其它指令都無法覆蓋


(3) order和allow、deny  (http2.2配置)

放在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

示例:

<files "*.txt">

order deny,allow

deny from 172.16. 100.100

allow from 172.16

</files>

<filematch “.*\.(conf|ini)$">

order allow,deny

deny from 172.16.100.100

allow from 172.16

</filematch>


基於IP的訪問控制(http2.4配置)

無明確授權的目錄,默認拒絕

允許所有主機訪問:Require all granted

拒絕所有主機訪問:Require all denied

控制特定的IP訪問:

Require ip IPADDR:授權指定來源的IP訪問

Require not ip IPADDR:拒絕特定的IP訪問

控制特定的主機訪問:

Require host HOSTNAME:授權特定主機訪問

Require not host HOSTNAME:拒絕HOSTNAME:

FQDN:特定主機

domin.tld:指定域名下的所有主機

不能有失敗,至少有一個成功匹配才成功,即失敗優先

<RequireAll>

Require all granted

Require not ip 172.16.1.1 拒絕特定IP

</RequireAll>

多個語句有一個成功,則成功,即成功優先

<RequireAny>

Require all denied

require ip 172.16.1.1 允許特定IP

</RequireAny>


URL路徑:

<Location "">

...

</Location>

<LocationMatch "">

...

</LocationMatch>

示例:

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

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

<Location /status>

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


日誌設定

日誌類型:

訪問日誌

錯誤日誌

錯誤日誌:

ErrorLog logs/error_log

LogLevel warn

LogLevel 可選值: debug, info, notice, warn,error, crit, alert, emerg

訪問日誌:

定義日誌格式:LogFormat format strings

LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t \"%r\" %>s %b

\"%{Referer}i\" \"%{User-Agent}i\"" testlog (與上一行一行內容)

使用日誌格式:

CustomLog logs/access_log testlog

參考幫助: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”的值;即從哪個頁面中的超鏈

接跳轉至當前頁面的

%{User-Agent}i 請求報文中首部“User-Agent”的值;即發出請求的

應用程序


設定默認字符集

AddDefaultCharset UTF-8 此爲默認值

中文字符集:GBK, GB2312, GB18030


定義路徑別名

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

DocumentRoot "/www/htdocs"

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

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


Alias /download/ "/rpms/pub/"

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

==>/rpms/pub/bash.rpm

http://www.winthcloud.com/images/logo.png

==>/www/htdocs/images/logo.png


基於用戶的訪問控制

認證質詢:WWW-Authenticate:響應碼爲401,拒絕客戶端請求,並說明要求

客戶端提供賬號和密碼

認證:Authorization:客戶端用戶填入賬號和密碼後再次發送請求報文;認證

通過時,則服務器發送響應的資源

認證方式兩種:

basic:明文

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

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

於告知用戶認證的原因

用戶的賬號和密碼

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

存儲:文本文件,SQL數據庫,ldap目錄存儲,nis等


ServerSignature On | Off | EMail

當客戶請求的網頁並不存在時,服務器將產生錯誤文檔,缺省情況下由於打開了

ServerSignature選項,錯誤文檔的最後一行將包含服務器的名字、Apache的版本

等信息

如果不對外顯示這些信息,就可以將這個參數設置爲Off

設置爲Email,將顯示ServerAdmin 的Email提示


status頁面

LoadModule status_module modules/mod_status.so

<Location /server-status>

SetHandler server-status

Order allow,deny

Allow from 172.16

</Location>

ExtendedStatus On 顯示擴展信息


虛擬主機(重點)

站點標識: socket

IP相同,但端口不同

IP不同,但端口均爲默認端口

FQDN不同: 請求報文中首部 Host: www.winthcloud.com

有三種實現方案:

基於ip:爲每個虛擬主機準備至少一個ip地址

基於port:爲每個虛擬主機使用至少一個獨立的port

基於FQDN:爲每個虛擬主機使用至少一個FQDN

注意:一般虛擬機不要與main主機混用;因此,要使用虛擬主機,一般先禁用main主機

禁用方法:註釋中心主機的DocumentRoot指令即可


虛擬主機的配置方法:

<VirtualHost IP:PORT>

ServerName FQDN

DocumentRoot “/path"

</VirtualHost>

建議:上述配置存放在獨立的配置文件中

其它可用指令:

ServerAlias:虛擬主機的別名;可多次使用

ErrorLog: 錯誤日誌

CustomLog:訪問日誌

<Directory “/path"> </Directory>

Alias

基於IP的虛擬主機示例:

<VirtualHost 172.16.100.6:80>

ServerName www.a.com

DocumentRoot "/www/a.com/htdocs"

</VirtualHost>

<VirtualHost 172.16.100.7:80>

ServerName www.b.net

DocumentRoot "/www/b.net/htdocs"

</VirtualHost>

<VirtualHost 172.16.100.8:80>

ServerName www.c.org

DocumentRoot "/www/c.org/htdocs"

</VirtualHost>

基於端口的虛擬主機:可和基於IP的虛擬主機混和使用

listen 808

listen 8080

<VirtualHost 172.16.100.6:80>

ServerName www.a.com

DocumentRoot "/www/a.com/htdocs"

</VirtualHost>

<VirtualHost 172.16.100.6:808>

ServerName www.b.net

DocumentRoot "/www/b.net/htdocs"

</VirtualHost>

<VirtualHost 172.16.100.6:8080>

ServerName www.c.org

DocumentRoot "/www/c.org/htdocs"

</VirtualHost>


基於FQDN的虛擬主機:

NameVirtualHost *:80 httpd2.4不需要此指令

<VirtualHost *:80>

ServerName www.a.com

DocumentRoot "/www/a.com/htdocs"

</VirtualHost>

<VirtualHost *:80>

ServerName www.b.net

DocumentRoot "/www/b.net/htdocs"

</VirtualHost>

<VirtualHost *:80>

ServerName www.c.org

DocumentRoot "/www/c.org/htdocs"

</VirtualHost>


mod_deflate模塊

使用mod_deflate模塊壓縮頁面優化傳輸速度

適用場景:

(1) 節約帶寬,額外消耗CPU;同時,可能有些較老瀏覽器不支持

(2) 壓縮適於壓縮的資源,例如文本文件

LoadModule deflate_module modules/mod_deflate.so

SetOutputFilter DEFLATE

# Restrict compression to these MIME types

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/css


Level of compression (Highest 9 - Lowest 1)

DeflateCompressionLevel 9

排除特定舊版本的瀏覽器,不支持壓縮

Netscape 4.x 只壓縮text/html

BrowserMatch ^Mozilla/4 gzip-only-text/html

Netscape 4.06-08三個版本 不壓縮

BrowserMatch ^Mozilla/4\.0[678] no-gzip

Internet Explorer標識本身爲“Mozilla / 4”,但實際上是能夠處理請求的壓縮。

如果用戶代理首部匹配字符串“MSIE”(“B”爲單詞邊界”),就關閉之前定

義的限制

BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html


https:http over ssl

SSL會話的簡化過程

(1) 客戶端發送可供選擇的加密方式,並向服務器請求證書

(2) 服務器端發送證書以及選定的加密方式給客戶端

(3) 客戶端取得證書並進行證書驗證

如果信任給其發證書的CA

(a) 驗證證書來源的合法性;用CA的公鑰解密證書上數字簽名

(b) 驗證證書的內容的合法性:完整性驗證

(c) 檢查證書的有效期限

(d) 檢查證書是否被吊銷

(e) 證書中擁有者的名字,與訪問的目標主機要一致

(4) 客戶端生成臨時會話密鑰(對稱密鑰),並使用服務器端的公鑰加密此數據發

送給服務器,完成密鑰交換

(5) 服務用此密鑰加密用戶請求的資源,響應給客戶端

注意:SSL是基於IP地址實現,單IP的主機僅可以使用一個https虛擬主機


https實現

(1) 爲服務器申請數字證書

測試:通過私建CA發證書

(a) 創建私有CA

(b) 在服務器創建證書籤署請求

(c) CA簽證

(2) 配置httpd支持使用ssl,及使用的證書

yum -y install mod_ssl

配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot

ServerName

SSLCertificateFile

SSLCertificateKeyFile

(3) 測試基於https訪問相應的主機

openssl s_client [-connect host:port] [-cert filename] 

[-CApath directory] [-CAfile filename]


重定向

Redirect [status] URL-path URL

status狀態:

Permanent: 返回永久重定向狀態碼 301

Temp:返回臨時重定向狀態碼302. 此爲默認值

示例:

Redirect temp / https://www.winthcloud.com/

http重定向https

將http請求轉發至https的URL


HSTS

HSTS:HTTP Strict Transport Security

服務器端配置支持HSTS後,會在給瀏覽器返回的HTTP首部中攜帶

HSTS字段。瀏覽器獲取到該信息後,會將所有HTTP訪問請求在

內部做307跳轉到HTTPS。而無需任何網絡過程

HSTS preload list

是Chrome瀏覽器中的HSTS預載入列表,在該列表中的網站,使用

Chrome瀏覽器訪問時,會自動轉換成HTTPS。Firefox、Safari、

Edge瀏覽器也會採用這個列表

實現HSTS示例:

vim /etc/httpd/conf/httpd.conf

Header always set Strict-Transport-Security "max-age=31536000"

RewriteEngine on

RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]


總結

1. alias 用來定義將web地址後邊跟的路徑連接至服務器的真正文件系統路徑

2. redirect 將內部連接重定向至其它url並通知客戶端去新的url去取資源

3. 實現https時要不將80的虛擬主機重定向至https要不就將端口改爲443(推薦前一種)


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