Centos 6 apache httpd 2.2 主要配置詳解( 一 )
實驗環境: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 主要配置詳解( 一 )