Apache多站點實現原理
apache安裝服務
httpd.exe -k install
httpd.exe -k uninstall
很多人常常看到一台服務器上跑多個站點,不同的域名訪問不同的站點,就會有個疑惑:訪問的時候並沒有在地址欄中加入端口號,多個域名都是解析到這個服務器的IP地址,服務器怎么能夠正確的分辨和解析呢?
其實還是對http協議不夠了解,看下圖一切一目了然
如何實現www.abc.com能映射到服務器的8000端口呢? 注意這里是不帶端口號的,www.abc.com:8000
,這樣太丑陋
對應的在apache中有rewite和proxy模塊,它們就是為了完成這些任務, 一台服務上我們配置多個 vhost,必然需要端口號,
比如:
a.com :80
b.com :8080
實際訪問的時候www.a.com自動轉發到80端口,www.b.com則自動轉發到8080端口。
但是實際上利用80端口可以配置多個vhost,這已經夠了
#定義vhost組
NameVirtualHost *:80
網站 1:
<VirtualHost *:80>
ServerName shazuihuo.com
ServerAdmin wancy86@sina.com
DocumentRoot /var/www/shazuihuo/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/demo/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
網站 2:
<VirtualHost *:80>
ServerName tuitu.cn
ServerAdmin wancy86@sina.com
DocumentRoot /var/www/tuitu/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/demo/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
這樣一個服務器的80
端口上就跑起兩個站點.
虛擬主機只能使用域名訪問
沒事找了個虛擬主機來試用,嘗試用給的IP地址訪問怎么都訪問不了,一直都顯示
后來仔細一想,虛擬主機是需要依賴域名的,不然沒辦法區分vhost,后來找到測試的域名果然可以正常訪問了。