1. 程式人生 > >Centos 6 apache httpd 2.2 主要配置詳解( 一 )

Centos 6 apache httpd 2.2 主要配置詳解( 一 )

apache 2.2 httpd2.2 centos 6

實驗環境:VMware Workstation Pro 14(試用版) 系統平臺: CentOS release 6.9 (Final) 內核 2.6.32-696.el6.x86_64 Server version: Apache/2.2.15 (Unix)

模塊文件路徑:

/etc/httpd/modules
/usr/lib64/httpd/modules

主程序文件:

/usr/sbin/httpd
/usr/sbin/httpd.work
/usr/sbin/httpd.even

主進程文件:

/etc/httpd/run/httpd

日誌文件目錄:

/var/log/httpd
    access_log: 訪問日誌
    error_log:錯誤日誌

配置文件:

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf

檢查配置語法:

httpd –t
service httpd configtest

配置格式

directive value

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

例:

DocumentRoot "/var/www/html"

Apache HTTP 服務器 2.2 文檔

http://httpd.apache.org/docs/2.2/

查看靜態編譯的模塊

httpd -l

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

httpd -M

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

? 動態模塊路徑

/usr/lib64/httpd/modules/

Httpd 2.2常見配置

顯示服務器版本信息

默認:
ServerTokens OS

curl -I localhost
可選值 效果
Major Server: Apache/2
Minor Server: Apache/2.2
Min[imal] Server: Apache/2.2.15 (CentOS) DAV/2
Min Server: Apache/2.2.15
Prod Server: Apache
OS Server: Apache/2.2.15 (CentOS)
Full Server: Apache/2.2.15 (CentOS) DAV/2

修改監聽的IP和Port

Listen [IP:]PORT
(1) 省略IP表示為本機所有IP
(2) Listen指令至少一個,可重復出現多次

默認:
Listen 80
修改指定IP會,必須重啟服務才能生效,reload是不能生效。

定義服務器名稱

默認未開啟
ServerName hunk.tech:80
如果沒有DNS解析,這裏可以設置為IP地址。一般建議使用站點對外發布的FQDN名稱。

KeepAlive持久連接

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

斷開條件:數量限制:100

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

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

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

設置:

默認
KeepAlive Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100

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

prefork, worker, event(2.2試驗階段,不建議使用)

要求更高伸縮性的站點可以選擇使用線程的 MPM,即 worker 或 event; 需要可靠性或者與舊軟件兼容的站點可以使用 prefork。

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

確認方法:

ps aux | grep httpd
默認為/usr/sbin/httpd, 即prefork模式

/usr/sbin/httpd.worker 默認為/usr/sbin/worker, 
修改為worker模式
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker

另外,/etc/httpd/conf/httpd.conf中以下模塊配置與此相關
<IfModule worker.c>

httpd-2.4 MPM模式修改在以下文件

/etc/httpd/conf.modules.d/00-mpm.conf

prefork的默認配置:

<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 最多進程數,最大20000  。ulimit值會同時限制此項設置
MaxClients 256 最大並發
MaxRequestsPerChild 4000 子進程最多能處理的請求數量。在處理MaxRequestsPerChild 個請求之後,子進程將會被父進程終止,這時候子進程占用的內存就會釋放(為0時永遠
不釋放)
</IfModule>

worker的默認配置:

<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0 無限制
</IfModule>

定義網站目錄

默認
DocumentRoot "/var/www/html"

記得修改目錄的屬主與權限
此項修改只需要reload即可

定義默認搜索頁面

默認
DirectoryIndex index.html index.html.var

從左至右順序查找

定義啟動httpd服務的賬戶與組

默認
User apache
Group apache

站點訪問控制類型

目錄

<Directory “/path">
控制選項
</Directory>

文件

1.特定單個文件

<File “/path/file”>
控制選項
</File>

2.文件通配符模式

<Files "?at.*">
控制選項
</Files>

3.正則匹配模式

<FileMatch "\.(gif|jpe?g|png)$">
控制選項
</FileMatch>

或者這種寫法
<files ~ "\.(gif|jpe?g|png)$">
控制選項
</files>

URL路徑

1.特定URL

<Location "/status">
控制選項
</Location>

2.URL正則匹配模式

<LocationMatch "/(extra|special)/data">
控制選項
</LocationMatch>

站點訪問控制機制

語法格式:


Options:後跟1個或多個以空白字符分隔的選項列表
在選項前的+,- 表示增加或刪除指定選項

常見選項:
Indexes:       指明的URL路徑下不存在與定義聲明中的默認搜索相符的資源文件時,返回索引列表給用戶
FollowSymLinks:允許訪問符號鏈接文件所指向的源文件
None:          全部禁用
All:           全部允許

示例:

#ll
-rw-r--r-- 1 root root 21 Feb 25 10:23 HTTP權威指南.pdf
lrwxrwxrwx 1 root root 11 Feb 25 10:27 ip.txt -> /app/ip.txt
-rw-r--r-- 1 root root 41 Feb 25 10:25 Python3程序開發指南(第二版).pdf

 設置如下:
<Directory /app/www>  > 指定控制類型
Options Indexes FollowSymLinks   > 字符串不區分大小寫。 控制機制選項:允許列出目錄索引,允許訪問軟鏈接指向的源文件
</Directory>

   [ICO]              Name                 Last modified   Size Description                                                                           
   ═══════════════════════════════════════════════════════                                                                         
   [DIR] Parent Directory                ?                    - ?                                                                                     
   [   ] HTTP權威指南.pdf                25-Feb-2018 10:23   21 ?                                                                                     
   [   ] Python3程序開發指南(第二版).pdf 25-Feb-2018 10:25   41 ?                                                                                    
   [TXT] ip.txt                          03-Feb-2018 10:07   51 ?      

<Directory /app/www>
Options -Indexes FollowSymLinks  > 禁止列出目錄索引
</Directory>

#elinks http://192.168.5.102/books
 403 Forbidden 
 Forbidden                                                                       

   You don‘t have permission to access /books/ on this server.    
   ═════════════════════════════════════════════════              
    Apache Server at 192.168.5.102 Port 80 

AllowOverride

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

一般都應該盡可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的<Directory>段中,而且更高效。

htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。
通過htaccess文件,可以幫我們實現:網頁301重定向、自定義404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔、文件夾密碼保護等功能

Unix、Linux系統或者是任何版本的Apache Web服務器都是支持.htaccess的

啟用.htaccess,需要修改httpd.conf,啟用AllowOverride,並可以用AllowOverride限制特定命令的使用。
如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令來改變。例如,需要使用.config ,則可以在服務器主配置文件中按以下方法配置:AccessFileName .config

.htaccess文件很容易被非授權用戶得到,安全性不高。

主要應用場景:
一般情況下,不應該使用.htaccess文件,除非你對主配置文件沒有訪問權限。
如果服務器管理員不願意頻繁修改配置,則可以允許用戶通過.htaccess文件自己修改配置,
尤其是ISP在同一個機器上運行了多個用戶站點,而又希望用戶可以自己改變配置的情況下。
配置指令
只對<directory>段有效

AllowOverride All: 所有指令都有效
AllowOverride None:.htaccess 文件無效
AllowOverride AuthConfig Indexes 只覆蓋特定指令AuthConfig和Indexes,其它指令都無法覆蓋

一個示例:
#vim /app/www/books/.htaccess
options -indexes

優先級

<directory>段中的AllowOverride > 主配置文件中的AllowOverride

更加精細的控制方法

1.客戶端來源地址

order和allow、 deny

放在directory, .htaccess中

order:定義生效次序;寫在後面的表示默認,當前面的不匹配時生效
Allow from:允許訪問的客戶端地址
Deny from:禁止訪問的客戶端地址

客戶端地址可以是以下格式:
    apache.org      > 一個域
    foo.apache.org  > 一個域之中的某臺主機
    172.18.0.200    > 一個IP 地址
    172.16.0.0/16   > 一個IP地址段
    172.16.0.0/255.255.0.0  > 一個IP地址段
    all             > 全部
匹配情形 配置為Allow,Deny 配置為Deny,Allow
僅匹配Allow 允許訪問 允許訪問
僅匹配Deny 拒絕訪問 拒絕訪問
沒有匹配 拒絕訪問 允許訪問
Allow和Deny都匹配 匹配默認的Deny(拒絕訪問) 匹配默認的Allow(允許訪問)

例子:

設置如下:
<Directory /app/www>
options indexes followsymlinks
order allow,deny                > 定義了規則順序
deny from 192.168.5.0/24        > 明確定義了拒絕列表
</Directory>

上面的規則意思為:其他的任何主機都拒絕訪問
#curl -I http://192.168.5.102/books/ip.txt
HTTP/1.1 403 Forbidden                      > 拒絕訪問

#curl -I http://192.168.7.201/books/ip.txt
HTTP/1.1 403 Forbidden

---

設置如下:
<Directory /app/www>
options indexes followsymlinks
order deny,allow                > 定義了規則順序
deny from 192.168.5.0/24        > 明確定義了拒絕列表
</Directory>

上面的規則意思為:
只有明確在拒絕列表的主機禁止訪問,其他的任何主機將允許訪問

#curl -I http://192.168.5.102/books/ip.txt
HTTP/1.1 403 Forbidden                      > 拒絕訪問

#curl -I http://192.168.7.201/books/ip.txt
HTTP/1.1 200 OK                             > 允許訪問

---

設置如下
<Directory /app/www>
options indexes followsymlinks
order allow,deny
deny from 192.168.5.0/24        > 明確了拒絕列表
allow from 192.168.7.201        > 明確了允許訪問主機列表
</Directory>

#curl -I http://192.168.5.102/books/ip.txt
HTTP/1.1 403 Forbidden

#curl -I http://192.168.7.201/books/ip.txt  > 訪問的當前主機IP為192.168.7.202
HTTP/1.1 403 Forbidden      > 拒絕訪問

#curl -I http://192.168.7.201/books/ip.txt  > 訪問的當前主機IP為192.168.7.201
HTTP/1.1 200 OK             > 允許訪問

#curl -I http://172.18.103.79/books/ip.txt  > 訪問的當前主機IP為172.18.103.80
HTTP/1.1 403 Forbidden      > 拒絕訪問
因為,訪問的IP沒有明確匹配allow和deny,就執行了默認的拒絕規則

配置如下:

定義了不允許訪問.conf結尾的文件

<files "*.conf">
order allow,deny
deny from all
</files>

allow from 127.0.0.1 localhost  > 僅僅允許本機訪問

2.用戶賬號

####基於用戶的basic認證

語法:

<Directory "/路徑">
AuthType Basic      > 認證方法
AuthName "String"  > 認證提示字符串
AuthUserFile "認證用戶數據庫路徑"
Require user username1 username2 ...  > 允許訪問的認證用戶
</Directory>

其中,允許賬號文件中的所有用戶登錄訪問:
Require valid-user

創建使用文本文件作為數據庫

htpasswd [ -c ] [ -m ] [ -D ] passwdfile username
htpasswd -b [ -c ] [ -m | -d | -p | -s ] [ -D ] passwdfile username password

-c:自動創建文件,僅在文件不存在時使用
-m:md5格式加密,默認方式
-s: sha格式加密
-D:刪除指定用戶
-b: 批處理時使用,可以通過命令行直接讀取密碼而不是交互。
-n: 不更新文件,僅僅屏幕輸出命令執行結果。

交互方式:
#htpasswd -c /etc/httpd/conf.d/.htpasswd hunk1
New password: 
Re-type new password: 
Adding password for user hunk1

非交互方式:
#htpasswd -bs /etc/httpd/conf.d/.htpasswd hunk2 1234567
Adding password for user hunk2

生成的密碼是經過加密的
#cat .htpasswd 
hunk1:xLhgTub5K6Css
hunk2:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=

僅僅顯示命令執行效果
#htpasswd -nbs hunk3 1234567
hunk3:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=

刪除指定用戶
#htpasswd -D /etc/httpd/conf.d/.htpasswd hunk2
Deleting password for user hunk2
示例:

<Directory "/app/www/books">
options indexes followsymlinks
AuthType Basic
AuthName "請輸入密碼才允許訪問"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user hunk1 hunk2
</Directory>

#cat .htpasswd 
hunk1:k5HXZqDz4BLE.
hunk2:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=
hunk3:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=

#links http://192.168.5.102/books

技術分享圖片

技術分享圖片

日誌中也會有記錄

#tail /var/log/httpd/access_log

192.168.5.103 - hunk2 [27/Feb/2018:15:44:39 +0800] "GET /books/ HTTP/1.1" 200 1636 "http://192.168.5.102/books" "ELinks/0.12pre6 (textmode; Linux; 150x27-2)"

使用hunk3進行訪問是沒有權限的

技術分享圖片

技術分享圖片

#curl -I 192.168.5.102/books
HTTP/1.1 401 Authorization Required
Date: Tue, 27 Feb 2018 07:40:14 GMT
Server: Apache
WWW-Authenticate: Basic realm="請輸入密碼才允許訪"
Connection: close
Content-Type: text/html; charset=iso-8859-1

日誌中也會有記錄
#tail /var/log/httpd/error_log

[error] [client 192.168.5.1] access to /books failed, reason: user ‘hunk3‘ does not meet ‘require‘ments for user/valid-user to be allowed access

####基於組的basic認證

語法:

<Directory "/路徑">
AuthType Basic      > 認證方法
AuthName "String"  > 認證提示字符串
AuthUserFile "認證用戶數據庫路徑"
AuthGroupFile "認證組數據庫路徑"
Require group grpname1 grpname2 ... > 允許訪問的認證用戶,組內的用戶必須是AuthUserFile存在的用戶
</Directory>

定義組和用戶對應關系

組名:用戶1 用戶2

#cat .htgroup 
admin:hunk1 hunk3
webgroups:hunk2

一行定義一個組

示例:

<Directory "/app/www/books">
options indexes followsymlinks
AuthType Basic
AuthName "請輸入密碼才允許訪"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"      > 指定組文件
Require group admin                              > 允許訪問的組
</Directory>

遠程客戶端和用戶驗證的控制

Satisfy ALL|Any

    ALL 客戶機IP和用戶驗證都需要通過才可以
    Any 客戶機IP和用戶驗證,有一個滿足即可

示例:

<Directory "/app/www/books">
options indexes followsymlinks
AuthType Basic
AuthName "請輸入密碼才允許訪"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require valid-user                           > 允許所有定義好的用戶訪問

Order allow,deny        
Allow from 192.168.1.0/24    > 定義允許訪問的客戶端IP範圍
Satisfy All                 >  定義了只有192.168.1.0網段的IP,且通過了賬戶驗證的才可以訪問
</Directory>

日誌設定

錯誤日誌設置

ErrorLog logs/error_log      > 這裏是相對路徑

記錄日誌級別設置

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

定義日誌格式

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

最後的單詞就是定義的格式名稱,給其他語句塊調用的

使用日誌格式

CustomLog logs/access_log combine

%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”的值;即發出請求的應用程序

更多的格式說明:
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

設定默認字符集

默認
AddDefaultCharset UTF-8

中文字符集:GBK, GB2312, GB18030

定義路徑別名

語法:
alias /URL /本地磁盤實際路徑/
未定義別名前
#curl 192.168.5.102/books/
wwww/books/index.html

定義別名後
alias /books /app/www2/

#curl 192.168.5.102/books/
wwww2/index.html
正則表達式 語法:
aliasmatch 正則表達式 "實際訪問路徑"

aliasmatch ^/books/(.*)? /app/www2/new$1  > $1表示的是前面( )內匹配的內容

aliasmatch ^.*/(.*\.(jpe?g|gif|png|bmp))$ "/app/www2/imgs/$1"    > 自動將訪問的圖片目錄跳轉
#curl 192.168.5.102/books/index.html -lv
* Connected to 192.168.5.102 (192.168.5.102) port 80 (#0)
> GET /books/index.html HTTP/1.1

看,確實跳轉到了新的文件名
wwww2/newindex.html
* Closing connection 0

實現用戶家目錄的http共享

基於模塊mod_userdir.so實現

主配置文件中啟用
LoadModule userdir_module modules/mod_userdir.so

#httpd -M|grep userdir
 userdir_module (shared)
Syntax OK
語法:
<IfModule mod_userdir.c>
    UserDir 共享的目錄      > 註意,這裏的目錄指的是系統賬號家目錄中的子目錄。如:/home/hunk/userdir
</IfModule>

註意事項:

如果配置文件語句是寫在/etc/httpd/conf.d/目錄下的話,需要將主配置文件中以下行註釋掉。
#    UserDir disabled

示例:

<IfModule mod_userdir.c>
    UserDir userhome
</IfModule>

#tree /home/hunk
/home/hunk
└── userhome
    └── index.html

註意添加httpd服務賬戶訪問權限   
#setfacl -m u:apache:x /home/hunk/  

#curl 192.168.5.102/~hunk/index.html
/home/hunk/userhome

ServerSignature錯誤信息顯示

默認 on

當客戶請求的網頁並不存在時,服務器將產生錯誤文檔,錯誤文檔的最後一行將包含服務器的名字、 Apache的版本等信息
如果不對外顯示這些信息,就可以將這個參數設置為Off
設置為Email,將顯示ServerAdmin 的Email提示

可選值:On | Off | EMail
on 的顯示:

#links http://192.168.5.102/a.html
404 Not Found 
Not Found                                                                       

   The requested URL /a.html was not found on this server.                                                                                            

   ════════════════════════════════════════════════════════
    Apache Server at 192.168.5.102 Port 80

off 的顯示

#links http://192.168.5.102/a.html
404 Not Found 
Not Found                                                                       

   The requested URL /a.html was not found on this server.

ServerType 服務器運行模式

standalone 獨立服務模式
inetd 非獨立服務模式
只適用於Unix平臺

status頁面

基於模塊LoadModule status_module modules/mod_status.so實現

註意控制允許訪問的用戶

<Location /訪問目錄,不是實際的磁盤路徑>
    SetHandler server-status
</Location>

ExtendedStatus On 開啟擴展信息,這一條不能寫入具體的配置塊裏面,在配置文件裏加下即可。

技術分享圖片

ServerName 綁定名稱

ServerName hunk.tech
如果不綁定一個名稱,啟動服務時會有提示警告。實際並不影響正常啟動服務。

ServerAlias 綁定多個域名

ServerAlias web.hunk.tech shop.hunk.tech > 多個域名,用空格隔開
只能通過指定的名稱訪問

VirtualHost 虛擬主機

所謂虛擬主機是指在一臺服務器裏運行幾個網站,提供WEB、FTP等服務。

註意:一般虛擬機不要與main主機混用;因此,要使用虛擬主機,一般先註釋主配置文件中的以下選項

DocumentRoot
Listen

在使用虛擬主機的時候,建議不要在主配置文件中配置,為了管理上更加清晰,可以獨立在/etc/httpd/conf.d目錄下以虛擬主機站點名進行區分,如:

#tree ../conf.d
../conf.d
├── basic.conf
├── README
├── user.conf
├── www2.hunk.tech.conf
├── www3.hunk.tech.conf
└── www.hunk.tech.conf

有三種實現虛擬主機方案:

記得先把主配置中的Listen註釋掉,在每個虛擬主機配置文件獨立指定。

基於ip

為每個虛擬主機準備至少一個ip地址

應用場景:多用於內部網絡

Listen 80
<VirtualHost 192.168.5.102:80>         > 定義了以主機IP為訪問方法
    ServerAdmin [email protected]
    DocumentRoot /app/www/virtuahost/www.hunk.tech
    ServerName www.hunk.tech
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

基於端口port

為每個虛擬主機使用至少一個獨立的端口port

應用場景:多用於內部網絡

Listen 80
Listen 8080
<VirtualHost 192.168.5.102:80>        
    ServerAdmin [email protected]
    DocumentRoot /app/www/virtuahost/www.hunk.tech
    ServerName www.hunk.tech
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

<VirtualHost 192.168.5.102:8080>
    ServerAdmin [email protected]
    DocumentRoot /app/www/virtuahost/www2.hunk.tech
    ServerName www2.hunk.tech
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

IP相同,但端口不同
IP不同,但端口均為默認端口

基於FQDN

為每個虛擬主機使用至少一個FQDN

應用場景:多用於公網,生產環境

NameVirtualHost *:80   > 這一行在2.2版本是必須添加的。2.4之後的版本,官方則去掉了這一個選項,但是功能是相同的。
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /app/www/virtuahost/www3.hunk.tech
    ServerName www.hunk.tech
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

區分在於 請求報文中首部

配置了3個虛擬主機之後,可以看到監聽的端口號也變了

#ss -nlt
State      Recv-Q Send-Q                                           Local Address:Port                                             Peer Address:Port 
LISTEN     0      128                                                         :::8080                                                       :::*     
LISTEN     0      128                                                         :::80                                                         :::*     
LISTEN     0      128                                                         :::8081 

訪問各自己的站點也是正常的
#curl 192.168.5.102
www.hunk.tech

#curl 192.168.5.102:8080
www2.hunk.tech

#curl 6-web-1.hunk.tech:8081
www3.hunk.tech

基於FQDN的模式配置示例:

註意,必須在主配置文件中設置以下2項,這個與上面的其他模式有些不同。

NameVirtualHost *:80
Listen 80
#cat /etc/httpd/conf.d/www*

站點1:
<VirtualHost *:80>
    DocumentRoot /app/www/virtuahost/www2.hunk.tech
    ServerName www2.hunk.tech   > 這裏設置通過網絡訪問的FQDN
</VirtualHost>

站點2:
<VirtualHost *:80>
    DocumentRoot /app/www/virtuahost/www3.hunk.tech
    ServerName www3.hunk.tech   > 這裏設置通過網絡訪問的FQDN
</VirtualHost>

站點3:
<VirtualHost *:80>
    DocumentRoot /app/www/virtuahost/www.hunk.tech
    ServerName www.hunk.tech    > 這裏設置通過網絡訪問的FQDN
</VirtualHost>

在充當測試客戶機的主機上設置/etc/hosts

192.168.7.201 www.hunk.tech www2.hunk.tech www3.hunk.tech

可以實現通過不同的域名分別對應不同的虛擬主機。很多共享主機提供商用的就是這些技術啦。

#curl www.hunk.tech
www.hunk.tech

#curl www2.hunk.tech
www2.hunk.tech

#curl www3.hunk.tech
www3.hunk.tech

僅允許通過域名訪問站點,禁止使用IP方式訪問的實現

方法1:

#vim denyip-www.hunk.tech.conf

<VirtualHost 192.168.7.201:80>      > 指定IP
    ServerName 192.168.7.201        > 綁定訪問方式
    <Location />
      order deny,allow
      deny from all                 > 拒絕所有
    </Location>
</VirtualHost>

#curl 192.168.7.201

403 Forbidden
You don‘t have permission to access / on this server

方法2:

建一個首頁文件,如index.hmtl,首面文件內容可以是一個聲明不允許以IP訪問,如果想更友好點,可以設置跳轉。
#echo ‘deny from ip ‘ > empty/index.html

#curl 192.168.7.201
deny from ip 

Centos 6 apache httpd 2.2 主要配置詳解( 一 )