RHEL / CentOS 建立 Apache 虛擬主機

要在一部主機上面存放多個網站, 可以透過 Apache 的 Virtual Host 實現。

在開始前,由於 virtual host 的原理是透過 domain name 來切換不同的folder 來顯示 html,如果您的domain name還沒有設定或申請完成,可以先修改 /etc/hosts 檔來來指令 domain name 對應。

接下來的範例是要建立存放網站的目錄, 即 Document Root, 在 CentOS 下 Apache 的預設目錄是 /var/www/html, 以下會以 website01.com 及 website02.com 為例, 在 /var/www/ 下建立兩個網站的 Document Root, 以及為兩個網站建立紀錄檔的目錄:

mkdir /var/www/website01.com
mkdir /var/www/website02.com

上面建立 Document Root, 接著是建立了存放紀錄檔的目錄:

mkdir /var/log/httpd/website01.com
mkdir /var/log/httpd/website02.com

然後為兩個網站建立一個測試頁面, 內容如下:

<html>
 <head>
 <title>Welcome to <?php echo $_SERVER['HTTP_HOST']?></title>
 </head>
<body>
<?php echo $_SERVER['HTTP_HOST']?>
</body>
</html>

將上面內容放到 website01.com 及 website02.com 的 Document Root 下, 儲存為 index.php:

vi /var/www/website01.com/index.php
vi /var/www/website02.com/index.php

將 Document Root 的 owner 改為 apache:

chown -R apache:apache /var/www/website0*

下一步是設定 Apache, 讓 Apache 可以按 hostname 處理不同網站內容。為以上兩個網站建立 Apache 的 .conf 檔:

website01.com:

vi /etc/httpd/conf.d/website01.com.conf

加入以下內容:

<VirtualHost *:80>
 ServerName website01.com
 ServerAlias www.website01.com
 DocumentRoot /var/www/website01.com
 CustomLog /var/log/httpd/website01.com/access.log common
 ErrorLog /var/log/httpd/website01.com/error.log
</VirtualHost>

附註:/etc/httpd/conf.d/website02.com.conf 的檔案內容依此類推。

網站的 .conf 檔案設定好之後, 需要重新載入 Apache:

systemctl reload httpd

或是使用

apachectl restart

然後是開放防火牆:

FirewallD:

firewall-cmd –permanent –zone=public –add-service=http
firewall-cmd –reload

iptables:

iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
/etc/init.d/iptables save

最後一步就是在 DNS 伺服器, 設定兩個 Domain 指到以上網頁伺服器的 IP, 如果用瀏覽器開啟網站可以看到相應的網站便完成了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *