單臺(tái)服務(wù)器中利用Apache的VirtualHost如何搭建多個(gè)Web站點(diǎn)詳解
前言
本文將詳細(xì)記錄一下如何在單臺(tái)服務(wù)器上,利用apache的virtualhost(虛擬主機(jī))來(lái)搭建多個(gè)不同的web站點(diǎn),并且每個(gè)站點(diǎn)獨(dú)立管理自己的session,下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
開(kāi)發(fā)環(huán)境
先說(shuō)下我各項(xiàng)開(kāi)發(fā)環(huán)境參數(shù):
- 操作系統(tǒng): RedHat6.7(CentOS)
- WEB服務(wù)器:apache2.2
- php5.6.30
修改Apache配置
apache2.2 的配置文件路徑在 /etc/httpd/conf/httpd.conf
我們用下面的命令修改apache的配置文件:
$ vim /etc/httpd/conf/httpd.conf
添加監(jiān)聽(tīng)端口
找到如下的部分,
# # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, in addition to the default. See also the <VirtualHost> # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses (0.0.0.0) # #Listen 12.34.56.78:80 Listen 80
默認(rèn)的話(huà),應(yīng)該只會(huì)監(jiān)聽(tīng)80端口,這里我們?cè)诤竺婕由嫌糜诹硗庹军c(diǎn)的端口號(hào)。例如我們A站點(diǎn)是默認(rèn)的80端口,B站點(diǎn)計(jì)劃搭建在8080端口上,最終的配置文件修改成
... #Listen 12.34.56.78:80 Listen 80 Listen 8080
啟動(dòng)并添加VirtualHost
接著在配置文件中找到下面的章節(jié):
### Section 3: Virtual Hosts # # VirtualHost: If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs/2.2/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # # Use name-based virtual hosting. # NameVirtualHost *:80 NameVirtualHost *:8080
上面的代碼是我已經(jīng)修改好的,默認(rèn)的話(huà),最后兩行NameVirtualHost應(yīng)該也是被注釋掉了。 因?yàn)槲覀円獑⒂锰摂M主機(jī),所以這里就把我們之前監(jiān)聽(tīng)的兩個(gè)端口都設(shè)置好。
同時(shí),將之后的配置文件修改成如下的樣子,我們先來(lái)設(shè)置默認(rèn)的80端口的站點(diǎn)A
# # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for requests without a known # server name. # <VirtualHost *:80> # ServerAdmin webmaster@dummy-host.example.com DocumentRoot /var/www/webA ServerName webA # ErrorLog logs/dummy-host.example.com-error_log # CustomLog logs/dummy-host.example.com-access_log common </VirtualHost>
默認(rèn)的Apache是沒(méi)有開(kāi)啟VirtualHost的,所以這些代碼都是被注釋掉了的,我們這里只需要把DocumentRoot和ServerName所在的行去掉注釋并且編輯下就好了。
DocumentRoot指的的是我們A站點(diǎn)的網(wǎng)站根目錄位置
接下來(lái)再補(bǔ)充上8080端口的B站點(diǎn)信息就好了。
<VirtualHost *:8080> DocumentRoot /var/www/webB ServerName webB </VirtualHost>
到這里,重啟一下Apache服務(wù)(service httpd restart),就可以訪問(wèn)兩個(gè)不同的站點(diǎn)了。
獨(dú)立Session
如果我們的A,B兩個(gè)站點(diǎn)的登錄邏輯是用的一套代碼,那我們使用后會(huì)發(fā)現(xiàn),A站點(diǎn)和B站點(diǎn)的Session是共享的,也就是說(shuō),如果用戶(hù)在A站點(diǎn)登錄了之后,B站點(diǎn)是無(wú)需登錄,自動(dòng)也處于登錄狀態(tài); 用戶(hù)在A站點(diǎn)退出后,也會(huì)自動(dòng)從B站點(diǎn)退出。
這顯然不是我們想要的結(jié)果,原因就是A,B兩個(gè)站點(diǎn)公用了一套Session體系,所以才會(huì)造成這樣的問(wèn)題。
解決的辦法就是我們指定站點(diǎn)中session的存放位置。
同樣是修改配置文件中指定虛擬主機(jī),我們以站點(diǎn)B做為示例,修改配置文件如下:
<VirtualHost *:8080> DocumentRoot /var/www/webB ServerName webB <Directory "/var/www/webB"> AllowOverride All php_value session.save_path "/var/lib/php/session_B" </Directory> </VirtualHost>
php_value中 session.save_path 其實(shí)就是php.ini文件中的session.save_path字段,這里我們其他值都使用默認(rèn)的php.ini配置文件,唯獨(dú)指定了session的文件存放路徑,默認(rèn)的php session文件是存儲(chǔ)在 /var/lib/php/session/文件夾中。
再試著去訪問(wèn)以下站點(diǎn)B,并且進(jìn)行一些session的存取操作,回頭到/var/lib/php/session_B文件夾中,就會(huì)發(fā)現(xiàn)新的session文件了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
linux查看服務(wù)端證書(shū)方式(keytool和openssl)
介紹了通過(guò)keytool和openssl工具來(lái)查看服務(wù)器端的SSL/TLS證書(shū),包括直接抓取服務(wù)器證書(shū)和下載證書(shū)文件的方法,詳細(xì)說(shuō)明了每種方法的操作步驟和輸出結(jié)果,幫助用戶(hù)驗(yàn)證證書(shū)有效性和進(jìn)行信任鏈驗(yàn)證2024-10-10
Apache Shiro 使用手冊(cè)(四) Realm 實(shí)現(xiàn)
在認(rèn)證、授權(quán)內(nèi)部實(shí)現(xiàn)機(jī)制中都有提到,最終處理都將交給Real進(jìn)行處理。因?yàn)樵赟hiro中,最終是通過(guò)Realm來(lái)獲取應(yīng)用程序中的用戶(hù)、角色及權(quán)限信息的2014-06-06
在 Linux 上鎖定虛擬控制臺(tái)會(huì)話(huà)的實(shí)現(xiàn)方法
這篇文章主要介紹了在 Linux 上鎖定虛擬控制臺(tái)會(huì)話(huà)的實(shí)現(xiàn)方法,Vlock 對(duì)于有多個(gè)用戶(hù)訪問(wèn)控制臺(tái)的共享 Linux 系統(tǒng)特別有用,文中給大家提到了vlock的安裝方法,需要的朋友可以參考下2018-11-11
centos8使用Docker部署Django項(xiàng)目的詳細(xì)教程
這篇文章主要介紹了在centos8使用Docker部署Django項(xiàng)目的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Ubuntu系統(tǒng)端口查詢(xún)與管理的詳細(xì)分析
事情起因是寶塔的CPU負(fù)載過(guò)大,重啟服務(wù)進(jìn)程之后還是爆,后續(xù)發(fā)現(xiàn)是端口被占用,導(dǎo)致服務(wù)重啟不起來(lái),所以本文給大家介紹了Ubuntu系統(tǒng)端口查詢(xún)與管理的詳細(xì)分析,需要的朋友可以參考下2024-11-11

