Web 伺服器(第一版)-Name-based Virtual Host

Web伺服器基礎文章:Web 伺服器-Apache
本篇文章延伸主題:Web 伺服器(第一版 - 續)-Name-based Virtual Host
20121217內容修訂

Virtual Host 分成以下兩種
  1. Name-based Virtual Hosts:網頁伺服器架設多個網站,但屬於同一個 IP 位址
  2. IP-based Virtual Hosts:網頁伺服器架設多個網站,而每個網站都有屬於自己的 IP 位址
範例:架設三個網站,但用同一個 IP 位址。
Server(10.10.10.139)
Client(10.10.10.140)

規劃網站:
第一個網站:
  • 路徑:/var/www/html
  • 首面內容:apacheserver139.example.com
  • # echo "apacheserver139.example.com" > /var/www/html/index.html
    第二個網站:
  • 路徑:/var/www/vhost
  • 首面內容:vhostapacheserver139.example.com
  • # mkdir /var/www/vhost
    # ll -dZ /var/www/vhost/
     drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/vhost/
    # echo "vhostapacheserver139.example.com" > /var/www/vhost/index.html
    注意:因為資料夾 vhost 是以管理者身份在路徑 /var/www 底下產生的,所以 SELinux context types 是 httpd_sys_content_t,如果是在別的路徑,就要改變 SELinux context 否則無法存取首頁。指令請看 Troubleshootingbr />

    第三個網站:需輸入帳密才能存取
  • 路徑:/var/www/svhost
  • 首面內容:secretapacheserver.example.com
  • # mkdir /var/www/svhost
    # echo "secretapacheserver139.example.com" > /var/www/vhost/private/index.html

    編輯 Apache 組態檔
    # vim /etc/httpd/conf/httpd.conf
     NameVirtualHost *:80

     <VirtualHost *:80>  // 此區塊設定可以省略
       DocumentRoot /var/www/html
       ServerName apacheserver139.example.com
     </VirtualHost>

     <VirtualHost *:80>
       DocumentRoot /var/www/vhost
       ServerName vhostapacheserver139.example.com
     </VirtualHost>

     <VirtualHost *:80>
       DocumentRoot /var/www/svhost
       ServerName secretapacheserver139.example.com
       <Directory /var/www/svhost>
          AuthName "Secret Hideout"
          AuthType basic  // 傳輸過程不加密,因此最好搭配 ssl 才安全。
          AuthUserFile /var/www/svhost/users
          require valid-user
       </Directory>
     </VirtualHost>

    測試組態檔語法是否正確 # service httpd configtest  // 使用httpd -t亦可
     Syntax OK

    為第三個網站產生私有區域的帳密 # htpasswd -cm /var/www/svhost/users privateuser
     New password: 1
     Re-type new password: 1
     Adding password for user privateuser

    重啟 Apache
    # service httpd restart

    客戶端測試

    在沒有架設 DNS 伺服器時,可以編輯 /etc/hosts 組態檔,讓瀏覽器知道網址所對應的 IP 位址
    # vim /etc/hosts
     127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
     ::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
     10.10.10.139 apacheserver139.example.com
     10.10.10.139 vhostapacheserver139.example.com
     10.10.10.139 secrteapacheserver139.example.com

    第一及第二網站存取測試:



    第三網站存取測試:



    Troubleshooting

    提供 2 種變更 SELinux types 指令 # chcon -Rt httpd_sys_content_t /another_path  // 參數『R』是將路徑下的所有資料也一併變更
    # chcon -R --reference /var/www/html /another_path  // 參考 /var/www/html 的 SELinux context type

    沒有留言:

    張貼留言