1. 程式人生 > >(Ubuntu/Centos)apache多站點配置

(Ubuntu/Centos)apache多站點配置

前言:

情景一:平時在我們開發的時候,一般專案都只存放在 localhost 指定的根目錄下,當有好幾個專案的時候,只能在根目錄下以不同的資料夾區分,特別的不方便。

情景二:平時在看教學視訊的時候,總是看到那些老師在單機下使用不同的域名,訪問的卻是本地的專案程式碼,每當這時候我都會問,這個怎麼實現的。

情景三:在最近去實習面試的時候,面試官問我如何在 apache 伺服器上搭建多站點。我只能回答我不會。

為了解決上面的幾個問題,我決定把 apache 多站點配置這個知識點搞清楚。關鍵是搞懂 apache 虛擬主機,Apache的虛擬主機是一種允許在同一臺機器上,執行超過一個網站的解決方案。後面圍繞的就是 apache 虛擬主機展開的。

在本篇部落格中我將介紹兩種方法來實現 apache 多站點的配置:

1、如何配置根據訪問的域名區分配置不通的站點?
(比如,訪問 www.yershop.com 訪問的是 /home/www/yershop 專案,訪問 www.wordpress.com 訪問的是 /home/www/wordpress 專案)

2、在相同域名地址的情況下,如何通過訪問不同的埠獲得不同的站點?
(比如,訪問 www.yershop.com 訪問的是 /home/www/yershop 專案,訪問 www.yershop.com:8080 訪問的是 /home/www/yershop_admin 專案(即 yershop 的後臺管理系統))

一:根據訪問的域名區分站點

在這裡我先介紹 ubuntu 系統下的配置,在來討論 centos 下(因為我在學習過程中也是先 ubuntu,再配置 centos 的時候都是參考的 ubuntu 的配置)

Ubuntu 環境下:

我的環境是:

作業系統:Ubnutu 16.04 LTS
apache 服務:Apache/2.4.18 (Ubuntu)(使用 apache2 -v 命令獲取 )

在 Ubnutu 上,apache 服務叫 apache2,而不是 httpd(在 Centos 上叫 httpd),主配置檔案為 /etc/apache2/apache2.conf,我們開啟 /etc/apache2/apache2.conf,發現最後兩行為:

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

顯然 /etc/apache2/sites-enabled 下存放著有關虛擬站點(VirtualHost)的配置。經檢視,初始情況下,該目錄下包含一個符號連線(軟連結,相當於快捷方式):

000-default.conf -> ../sites-available/000-default.conf

這裡又引出另外一個配置目錄:/etc/apache2/sites-available。這個目錄下放置了所有可用站點的真正配置檔案,對於 Enabled 的站點,Apache2 在 sites-enabled 目錄建立一個到 sites-available 目錄下檔案的符號連結。

/etc/apache2/sites-available 下有兩個檔案:

000-default.conf    default-ssl.conf

/etc/apache2/sites-enabled/000-default.conf 連結的檔案是 /etc/apache2/sites-available/000-default.conf,我們就以 /etc/apache2/sites-available/000-default.conf 檔案為例,看看一個 VirtualHost 的配置是啥樣的(為了簡潔,所有的註釋我都去掉了):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DocumentRoot 是這個站點的根目錄,這樣 Apache2 啟動時會掃描 /etc/apache2/sites-enabled 中可用的 website 配置並載入。當用戶訪問localhost:80 時,Apache2 就將 default 站點根目錄 /var/www/html 下的index.html(或 index.php 等,可配置)作為請求的迴應返回給瀏覽器,你就會欣賞到的就是 /var/www/html/index.html 這個檔案中的內容了。

Apache2的預設站點我們不要去動它。我們新增站點配置來滿足我們的要求。

第一步:新增站點配置檔案

在 /etc/apache2/sites-available 目錄中中建立兩個站點的配置檔案 www-yershop-com.conf 和 www-wordpress-com.conf:

#進入虛擬主機配置資料夾
cd /etc/apache2/sites-available/
#複製預設的虛擬主機配置檔案
sudo cp 000-default.conf www-yershop-com.conf
sudo cp 000-default.conf www-wordpress-com.conf

編輯這兩個配置檔案,以 www-yershop-com.conf 為例:

# Created By zhongjin on 2016-12-12 冬至
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName www.yershop.com
    DocumentRoot /home/www/yershop

    <Directory "/home/www/yershop">
        Options FollowSymLinks
        AllowOverride All 
        #Require all denied
        Require all granted
    </Directory>                            

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

注意上面配置中:ServerName、DocumentRoot 和 Directory 是我們重點關注的配置點。yershop 的 ServerName 為www.yershop.com,根目錄為 /home/www/yershop,Directory 同 DocumentRoot。

針對 www-wordpress-com.conf 改變相應的配置,即修改 ServerName 為 www.wordpress.com,DocumentRoot 和 Directory 修改為 /home/www/wordpress。

第二步:在sites-enabled目錄下建立符號連結

cd /etc/apache2/sites-enabled
#建立對應的軟連結
sudo ln -s /etc/apache2/sites-available/www-yershop-com.conf /etc/apache2/sites-enabled/www-yershop-com.conf
sudo ln -s /etc/apache2/sites-available/www-wordpress-com.conf /etc/apache2/sites-enabled/www-wordpress-com.conf

第三步:在對應目錄放入專案程式碼

如上面所示,我們的 yershop 專案程式碼放在 /home/www/yershop,wordpress 專案程式碼放在 /home/www/wordpress,那麼我們在對應目錄下建立對應目錄並賦予相應許可權,以 yershop 為例:

sudo mkdir -p /home/www/yershop

然後在 /home/www/yershop 下放入專案程式碼,這裡為了測試就新建 index.php,內容如下:

<?php

echo "hello,welcome to yershop!";

賦予相應的許可權:

sudo chmod -R 777 /home/www/yershop

針對 wordpress 做同樣的操作。

第四步:修改 /etc/hosts 檔案

開啟檢視 /etc/hosts 檔案,開頭是:

127.0.0.1   localhost

我們在該行後面新增:

# modified by zhongjin on 2016-12-21 冬至
127.0.0.1   www.yershop.com
127.0.0.1   www.wordpress.com

#儲存退出

第五步:重啟 apache 伺服器並測試

重啟 apache 伺服器使得配置生效:

systemctl restart apache2.service

在瀏覽器(如果是桌面版的話)中訪問 www.yershop.com 或 www.wordpress.com,看看是否輸出了 index.php 檔案中的內容。

如果你不是桌面版(伺服器),那麼可以使用命令列測試:

curl www.yershop.com

看看返回的字串是不是正確輸出!

Centos 環境下:

我的環境是:

作業系統:Centos 7
apache 服務: Apache/2.4.6 (CentOS)(通過 httpd -v 獲取)

在這裡我們實現 Ubuntu 環境下同樣的效果。

Centos 下,apache 的服務叫 httpd,主配置檔案為 /etc/httpd/conf/httpd.conf,我們瀏覽 httpd.conf 檔案,搜尋關鍵字 vhost,發現根本找不到相關的東西,不過在最後兩行有以下內容:

# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

難道虛擬主機的配置也在 /etc/httpd/conf.d 下面?LZ 去看了一下該目錄下面所有檔案的內容,發現根本沒有關於虛擬主機的配置,如果你再仔細觀察 http.conf 配置檔案,你就會發現,其實在 Centos 下,其預設主機只有 localhost ==> /var/www/html ,如果需要的話,我們得自己擴充套件了。

我們有兩種方式實現自己的擴充套件,一種是直接在 /etc/httpd/conf/httpd.conf 後面追加配置內容,一種是在外部檔案先配置好,再類似 IncludeOptional conf.d/*.conf 那樣引入我們的配置。一般不推薦直接修改主配置檔案,所以我們使用第二種方式。

我們還是模仿上面的配置:

第一步:新增站點配置檔案

cd /etc/httpd
sudo mkdir vhost-conf.d

我們在 vhost-conf.d 目錄下新增我們的虛擬主機配置檔案 www-yershop-com.conf 和 www-wordpress-com.conf,以 www-yershop-com.conf 為例,我們輸入以下內容:

<VirtualHost *:80>
    #Created by zhongjin on 2016-12-21 冬至
    Serveradmin [email protected]
    ServerName www.yershop.com
    DocumentRoot /home/www/yershop

    <Directory "/home/www/yershop">
          Options FollowSymLinks
          AllowOverride All
          #Require all denied
          Require all granted
    </Directory>
</VirtualHost>

針對 www-wordpress-com.conf 改變相應的配置,即修改 ServerName 為 www.wordpress.com,DocumentRoot 和 Directory 修改為 /home/www/wordpress。

第二步:在主配置中引入我們的虛擬主機配置

sudo vim /etc/httpd/conf/httpd.conf
# 在主配置檔案末尾新增以下內容
# Load vhost-config files in the "/etc/httpd/vhost-conf.d" directory if any
# created by zhongjin on 2016-12-21 冬至
Include vhost-conf.d/*.conf

第三步:在對應目錄放入專案程式碼

直接參考 Ubnutu 環境下的第三步配置。

第四步:修改 /etc/hosts 檔案

直接參考 Ubnutu 環境下的第四步配置。

第五步:重啟 apache 伺服器並測試

重啟 apache 伺服器使得配置生效:

sudo systemctl restart httpd.service

在瀏覽器(如果是桌面版的話)中訪問 www.yershop.com 或 www.wordpress.com,看看是否輸出了 index.php 檔案中的內容。

如果你不是桌面版(伺服器),那麼可以使用命令列測試:

curl www.yershop.com

看看返回的字串是不是正確輸出!

注意:

在 Centos 下,由於預設的虛擬主機配置(localhost)是直接在 /etc/httpd/conf/httpd.conf 檔案中配置的,所以我們在後面新增我們的配置的時候,會覆蓋前面的相同的配置,所以當你 curl localhost 的時候,可能訪問的是 yershop 專案下的程式碼,也可能是 wordpress 下的程式碼。

我的解決方案是:按照上面的步驟重新建一個 localhost 域名,使它指向 /var/www/html 目錄即可。

二、同域名下,通過訪問不同的埠獲得不同的站點

其實在這裡實現的步驟跟上面的沒多大差別,我就說說需要做的額外操作。

這裡以 yershop 為例,通過訪問 www.yershop.com:80(預設就是80),返回的是“hello,welcome to yershop“,而訪問 www.yershop.com:8080,返回的是 ”hello,welcome to yershop background management“。

Ubuntu 環境下:

  • 讓我們的 apache2 監聽 8080 埠:

修改 /etc/apache2/ports.conf 檔案,在 Listen 80 後面新增兩行:

NameVirtualHost *:8080
Listen 8080
  • 在 /etc/apache2/sites-available/ 下增加 www-yershop-com-8080.conf,並在 /etc/apache2/sites-enabled/ 下建立符號連結。方法參考前面。

www-yershop-com-8080.conf 的主要配置內容如下:

<VirtualHost *:8080>
    #Created by zhongjin on 2016-12-21 冬至
    Serveradmin [email protected]
    ServerName www.yershop.com
    DocumentRoot /home/www/yershop_admin

    <Directory "/home/www/yershop_admin">
          Options FollowSymLinks
          AllowOverride All
          #Require all denied
          Require all granted
    </Directory>
</VirtualHost>

大家一定要看清楚需要修改的地方,VirtualHost 改為 8080,DocumentRoot 和 Directory 均改為 /home/www/yershop_admin,但是 ServerName 不用改,還是用 www.yershop.com

  • 建立目錄 /home/www/yershop_admin,新增檔案 index.php,輸出 “hello,welcome to yershop background management”。

  • 重啟 apache 伺服器,測試

Centos 環境下:

  • 讓 httpd 監聽 8080 埠:

直接修改 /etc/httpd/conf/httpd.conf 配置檔案,在 Listen 80 後面新增兩行:

# created by zhongjin on 2016-12-21 冬至
NameVirtualHost *:8080
Listen 8080
  • 在 /etc/httpd/vhost-conf.d 下面新增 www-yershop-com-8080.conf

直接複製 www-yershop-com.conf 檔案,改名為 www-yershop-com-8080.conf,並修改為:

<VirtualHost *:8080>
    #Created by zhongjin on 2016-12-21 冬至
    Serveradmin [email protected]
    ServerName www.yershop.com
    DocumentRoot /home/www/yershop_admin

    <Directory "/home/www/yershop_admin">
        Options FollowSymLinks
        AllowOverride All 
        #Require all denied
        Require all granted
    </Directory>
</VirtualHost>

注意修改的地方!

  • 建立目錄 /home/www/yershop_admin,新增檔案 index.php,輸出 “hello,welcome to yershop background management”。

  • 重啟 apache 伺服器,測試

後話:

1、多站點的配置還有另外一種配置,就是通過不同的IP進行多站點的配置,由於我沒有進行實驗(前面的內容都是LZ 親身體會過),所以這裡就不給出方法了。
2、由於現在手頭上沒有 windows 機器,所以沒法實驗 apache 在 windows 環境下的配置,但是方法和需要操作的檔案肯定是差不多的,大家可以參考 《Apache之——多虛擬主機多站點配置的兩種實現方案》試試。
3、本部落格參考自《使用Apache2配置多個站點》《CentOS7配置Apache多站點VirtualHost》

相關推薦

Ubuntu/Centosapache站點配置

前言: 情景一:平時在我們開發的時候,一般專案都只存放在 localhost 指定的根目錄下,當有好幾個專案的時候,只能在根目錄下以不同的資料夾區分,特別的不方便。 情景二:平時在看教學視訊的時候,總是看到那些老師在單機下使用不同的域名,訪問的卻是本地的專案

配置阿里雲 II】xampp站點配置設定虛擬域名頂替預設載入dashboard修改方式

在xampp環境中,為了方便的管理多個專案,需要通過配置相關檔案來設定多個虛擬站點。        如果不配置虛擬埠,專案上線會發生如下情況:        在域名繫結ip後(應用程式池中網站也設定好指向),dns解析沒問題情況下 但是本地瀏覽器訪問時用域名+專案名訪問時

Linux 配置本地源 Ubuntu / CentOS

[[email protected] network-scripts]# cd /root [[email protected] ~]# ls anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Mus

apache站點配置中ServerName/ServerAlias

round rtu 訪問 back serve alias HR nor 一個 ServerName: 是服務的名字,只能填寫一個域名ServerAlias: servername的別名,使一個服務可以綁定多個域名,用空格隔開DocumentRoot /www/

Linux下重新整理DNS快取Ubuntu/CentOS

現在很多Linux發行版都沒有內建DNS本地快取,Linux不像Windows那樣可以使用ipconfig /flushdns來重新整理,在Linux下無需重新整理,因為本身沒有快取; 當然,如果非要快取重新整理,可以安裝nscd,然後重新整理這個守護程序。 Ubuntu: apt-get instal

Linux下刷新DNS緩存Ubuntu/CentOS

守護進程 apt-get con https all com linux下 entos www 現在很多Linux發行版都沒有內置DNS本地緩存,Linux不像Windows那樣可以使用ipconfig /flushdns來刷新,在Linux下無需刷新,因為本身沒有緩存;

Windows下Apache 站點配置與虛擬域名

修改httpd-vhosts.conf配置檔案 <VirtualHost *:80> ServerName localhost ServerAlias localhost DocumentRoot "${INSTALL_DIR}/www" <Direct

Windows下Apache 站點配置

修改httpd-vhosts.conf配置檔案 <VirtualHost *:80> ServerName localhost ServerAlias localhost DocumentRoot "${INSTALL_DIR}/www"

apache 站點配置

測試環境 win 7 ,apache 2.2安裝版 1、安裝完 apache 後 2、用記事本開啟apache安裝目錄conf目錄httpd.conf檔案 3、找到如下程式碼: <Directory /> Options FollowSymLinks A

apache站點配置+配置+反向代理

一、Apache多站點配置   這種方法是配置不同的地址訪問不同的資料夾的配置   1:修改本機的hosts檔案,如下:     示例:   127.0.0.1 localhost   127.0.0.1 www.dede.com   12

Apache站點配置

完成整個站點配置需要設定三個檔案: 1.httpd.conf: DocumentRoot "D:/Documents/web_ft_cc" <Directory "D:/Documents/web_ft_cc">//此處對應站點檔案的地址

Apache Centos站點配置

Apache Centos多站點配置 centos 中apache配置檔案路徑為/etc/httpd/conf/httpd.conf 最後一行為"IncludeOptional conf.d/*.conf",會自動載入/etc/httpd/conf.d/下的所有conf檔案 。 所以只需

win10環境下配置django2.0.4+Apache2.4+python3.6專案,以及Django靜態檔案、Apache專案配置的解決方案親測

1 安裝django, Apache,python 要求Apache和python位數一致,比如我的Apache2.4-x86和 python3.6-32位 我的安裝位置: Apache2.4 ---  E:\Apache24 python3.6---E:\pht

最新apache域名站點配置

設置 list director option file rtu directory virt host httpd.conf===> Listen 80 Listen 9001 ServerName 123.123.123.123:80 用IP地址作為

linux下配置apache站點訪問-小案例

通過 但是 路徑 多個項目 綁定 配置 nmp .com vid 一級域名(baidu.com)也叫作頂級域名,註冊一級域名是需要付費的。 而二級域名(image.baidu.com)是一級域名的延伸,所以只要購買了一級域名,二級域名是可以任意配置的。 其實(www

apache 站點j簡單配置

conf comm .com local toml con ... pac 文件 apache 多站點配置 Include conf/extra/httpd-vhosts.conf? ?開啟? ? ? ?主配置文件裏去掉註銷 vim /usr/local/apache2/c

Xrdp - 通過Windows的RDP連線Linux遠端桌面Ubuntu/CentOS/Redhat 7

您多久訪問一次Linux桌面? 您使用什麼工具來訪問遠端桌面? Xrdp是一個開源工具,允許使用者通過Windows RDP訪問Linux遠端桌面。 除了Windows RDP之外,xrdp工具還接受來自其他RDP客戶端的連線,如FreeRDP,rdesktop和NeutrinoRDP。 Xrdp現在支援T

Apache本機不同埠站點配置:httpd-vhosts.conf

環境:Apache2.2.9,Resin-3.1.6,Win Server 2003 1.解壓Resin至任意目錄,我的是D:; 2. 安裝Apache,具體操作下一步、下一步即可,其中要配置的地方是需要你填寫網站名等資訊,這裡可以不用管它,全部填寫localhost,預設埠

Apache之——虛擬主機站點配置的兩種實現方案

Apache中配置多主機多站點,可以通過兩種方式實現: 將同一個域名的不同埠對映到不同的虛擬主機,不同埠對映到不同的站點;將同一個埠對映成不同的域名,不同的域名對映到不同的站點。我們只需要修改相應的配置檔案即可。 一、準備工作 1、修改系統 hosts檔案 我是在我自己的

python行註釋 && Eclipse和PyDev搭建完美Python開發環境Ubuntu

python本身不帶多行註釋,編輯時每行敲一個“#”相當的不方便,其實可以有變通的方法 1. 把要註釋的塊用if 0:包起來,需要注意縮排 2. 把要註釋的塊用'''    '''包起來,也需要注意縮排。不過一般情況下'''是用來做function doc的,所以