伺服器建置實務上課補充教材


unit 09:網頁伺服器 (Apache server) part1
  1. 關於 WWW 的簡介
    1. 什麼是 WWW
      • WWW 是 World Wide Web 的縮寫,其中 Web 有廣播網的意思存在, 所以簡稱為全球資訊網。
      • 使用 WWW 時,需要有 server 與 client 的架構,兩者間傳輸的資料如下:

        • WWW 伺服器不但需要一個可讓用戶端瀏覽的平台,還需要提供用戶端一些資料才行!
        • 伺服器所提供的最主要資料是超文件標籤語言 (Hyper Text Markup Language, HTML)、多媒體檔案 (圖片、影像、聲音、文字等,都屬於多媒體或稱為超媒體)。
        • HTML 只是一些純文字資料,透過所謂的標籤 (<tag>) 來規範所要顯示的資料格式;
        • 在用戶端,透過瀏覽器的對 HTML 以及多媒體的解析,最後呈現在使用者的螢幕上。
    2. http 協定與 apache 軟體的開發
      • 伯納斯-李 (Tim Berners-Lee) 在 1980 年代為了更有效率的讓歐洲核子物理實驗室的科學家可以分享及更新他們的研究成果, 於是他發展出一個超文件傳輸協定 (Hyper Text Transport Protocol, HTTP)
      • 為了讓 HTTP 這個協定得以順利的應用,大約在 90 年代初期由伊利諾大學的國家超級電腦應用中心 (NCSA, http://www.ncsa.illinois.edu/) 開發出伺服器 HTTPd (HTTP daemon 之意)
      • 由於 HTTPd 這個伺服器一直沒有妥善的發展,於是一群社群朋友便發起一個計畫,這個計畫主要在改善原本的 HTTPd 伺服器軟體,他們稱這個改良過的軟體為 Apache,取其『一個修修改改的伺服器 (A patch server)』的雙關語!
      • 這個 Apache 在 1996 年以後便成為 WWW 伺服器上市佔率最高的軟體了 (http://httpd.apache.org/)。
    3. 什麼是 URL (Uniform Resource Locator)
      • <協定>://<主機位址或主機名稱>[:port]/<目錄資源>
    4. 動態 WWW 伺服器
      • 主要的組成元件: 作業系統平台+WWW伺服器+資料庫系統+網頁程式語言,還有 client 的瀏覽器!相關性為:
      • 須注意 WWW 伺服器與資料庫系統為兩個獨立的系統,因此需要透過網頁程式語言進行溝通!
      • Linux 環境: Linux + Apache + Mariadb + PHP --> LAMP
  2. Apache 基礎安裝與使用
    1. 在 CentOS 7 上面預設的 WWW 伺服器就是 Apache,而 Apache 的軟體名稱在 CentOS 上面被稱為 httpd。
    2. 完成如下的練習:
      1. 安裝 Apache 軟體
      2. 使用預設值啟動 Apache 軟體
      3. 設定開機會啟動這個軟體
      4. 你的 Apache 軟體是對全世界放行的,請觀察或重新設定防火牆
      5. 打開瀏覽器,輸入網址列的你的主機名稱,看看能否觀察到相關的網頁資料?
      6. 同時請觀察已經啟動的埠口,是否有讓 httpd 啟動的號碼?
    3. CentOS 7 上預設的 Apache 設定
      • 基礎設定檔位於: /etc/httpd/conf/httpd.conf
      • 附加設定檔位於: /etc/httpd/conf.d/*.conf
      • 預設啟動埠口在: port 80
      • 預設伺服器管理員 email: root@localhost
      • 預設首頁目錄位於: /var/www/html
      • 預設首頁檔案檔名: index.html
      • 預設所有人均可以瀏覽網頁
    4. 完成如下的練習:
      1. 觀察完首頁之後,請將預設的首頁改成顯示你的大名與學號即可。
    5. 修改基礎設定值
      • 你當然可以修改預設的設定值,只是要自己承擔風險!舉例來說,如果你改了連線埠口, 那麼就得要告訴別人你的連線埠口即將跑到類似如下的網址,否則將無法被瀏覽
        http://localhost:85/
      • 常見的設定值有底下這幾個:
        [root@localhost ~]# vim /etc/httpd/conf/httpd.conf
        
        Listen 80                     # 預設 Apache 的監聽埠口
        
        ServerAdmin root@localhost    # 可以改成任何一個合法的 email address 即可!出問題時,螢幕會顯示出來!
        
        DocumentRoot "/var/www/html"  # 就是預設的首頁目錄位置
        
        <Directory "/var/www/html">   # 針對首頁目錄所進行的各項權限控制項目
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted       # 設定誰可以瀏覽的參數,詳細語法後續會談到。
        </Directory>
        
        <IfModule dir_module>         # 設定首頁檔名
            DirectoryIndex index.html
        </IfModule>
        
        <Files ".ht*">                # 設定在本伺服器中,只要開頭檔名為 .ht 的檔案,就不可以被瀏覽
            Require all denied
        </Files>
        
        <IfModule alias_module>       # 指定 http://server/cgi-bin/ 為 CGI 的主要放置網址
            ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
        </IfModule>
        <Directory "/var/www/cgi-bin">
            AllowOverride None
            Options None
            Require all granted
        </Directory>
        
        <IfModule mime_module>        # 指定副檔名的其他功能
            TypesConfig /etc/mime.types
            AddType application/x-compress .Z
            AddType application/x-gzip .gz .tgz
            #AddHandler cgi-script .cgi
            AddType text/html .shtml
            AddOutputFilter INCLUDES .shtml
        </IfModule>
        
        AddDefaultCharset UTF-8             # 指定預設的語系資料,通常可以直接註解即可!
        
        # Some examples:                    # 指定一些常見的錯誤顯示方式,須搭配 Web 常見的錯誤代碼
        #ErrorDocument 500 "The server made a boo boo."
        #ErrorDocument 404 /missing.html
        #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
        #ErrorDocument 402 http://www.example.com/subscription_info.html
        
    6. 完成如下的練習:
      1. 讓管理員的 email 改為 student@pc*.dic.ksu
      2. 讓語系資料交給網頁自己管理,取消強制的 utf8 語系輸出
      3. 當 index.html 找不到,會再找尋 welcome.html 以 default.html 等檔名作為首頁檔
      4. 當你在網址列輸入 http://localhost/checkwelcome/ 時,就會輸出 welcome.html 的內容,而 welcome.html 內容請填寫『this filename is welcome.html』即可
  3. Apache 的個人首頁與網頁資料透過 FTP 上傳與下載
    1. 預設系統的個人首頁網址為 http://your.host.name/~username/
    2. 個人首頁的修改:
      • 預設的設定值放置於 /etc/httpd/conf.d/userdir.conf
      • 考慮到用戶的資訊技能,建議統一將目錄放置 www 或 web 目錄下!因此上述檔案建議改成這樣:
        # vim /etc/httpd/conf.d/userdir.conf
        <IfModule mod_userdir.c>
            UserDir www
        </IfModule>
        <Directory "/home/*/www">
            AllowOverride FileInfo AuthConfig Limit Indexes
            Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
            Require method GET POST OPTIONS
        </Directory>
        
        # apachectl configtest
        Syntax OK
        
        # systemctl restart httpd
    3. 用戶家目錄權限的設定,例如以 student 為例,應該要這樣處理 (用 student 身份喔!):
      $ chmod 711 ~student
      $ mkdir ~student/www
      $ echo "check student web page" > ~student/www/index.html
      
      之後在網址列輸入 http://your.host.name/~student 查閱是否有資料即可!
    4. 完成下列練習
      1. 先以上述的作法完成 userdir 的個人首頁設定
      2. 建立一個名為 webuser1 的帳號,密碼設定為 thewebman ;
      3. 切換到 webuser1 的身份,然後在家目錄建立名為 www 的目錄,且在該目錄下新增 index.html 檔案, 檔案內容就設定為『 I am webuser1 』即可。
      4. 嘗試到瀏覽器瀏覽 http://your.server.name/~webuser1 看看出了什麼問題?
      5. 請嘗試自行修改權限資料
      6. 在 WWW 伺服器上,若未來每個用戶新建時,都會自動擁有 www 目錄,且該目錄下都會有 index.html,內容為『 Personal web page !』, 又該如何處理?
      7. 上述動作完成後,請建立 webuser2 的帳號,同時修改好正確的權限,然後使用瀏覽器瀏覽,看看能否得到正確答案?
    5. 以 FTP 提供個人用戶的網頁上傳
      • CentOS 7 提供了 vsftpd 這個簡易的安全的 FTP 伺服器,安裝好就能立刻使用了:
      • 完成下列練習
        1. 安裝 vsftpd
        2. 啟動 vsftpd
        3. 下次開機依舊可以啟動 vsftpd
        4. 設定好 Internet 可以連線到我的 FTP 埠口
        5. 在 /etc/sysconfig/iptables-config 裡面加入 nf_conntrack_ftp 以及 nf_nat_ftp 兩個常用的 FTP 模組。設定完畢後務必重新啟動 iptables 服務。
        6. 在瀏覽器直接輸入 ftp://your.hostname 確認可以使用匿名 FTP。
        7. 在 /var/ftp/pub 底下丟入幾個檔案,再回上一步去確認有沒有新增檔案在 pub 目錄下了。
        8. 使用瀏覽器輸入 ftp://webuser1@your.hostname/ ,並輸入 webuser1 的密碼,來確認能否登入系統。
      • 因為 FTP 預設會讓用戶離開家目錄,不太安全。因此得要進行修改才行:
        [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
        chroot_local_user=YES
        chroot_list_enable=YES
        chroot_list_file=/etc/vsftpd/chroot_list
        allow_writeable_chroot=YES  # 這一行預設不存在,請自己加入喔!
        
        [root@localhost ~]# touch /etc/vsftpd/chroot_list  # 寫入這個檔案的用戶才可以脫離家目錄
        
        [root@localhost ~]# systemctl restart vsftpd
        
  4. 錯誤瀏覽訊息公告
    1. Apache 的訊息代碼意義為:
      • 100-199:一些基本的訊息
      • 200-299:用戶端的要求已成功的達成
      • 300-399:Client 的需求需要其他額外的動作,例如 redirected 等等
      • 400-499:Client 的要求沒有辦法完成(例如找不到網頁)
      • 500-599:主機的設定錯誤問題
      主要的訊息代碼都可以在 access 或者是 error log 裡面找到!
    2. 你可以在 /etc/httpd/conf/httpd.conf 找到錯誤代碼為 404 的設定值,然後處理所需要的顯示項目來處理!
      • 正確瀏覽的登錄檔: /var/log/httpd/access_log
      • 錯誤瀏覽的登錄檔: /var/log/httpd/error_log
    3. 完成下列練習
      1. 在主設定檔當中,設定發生 404 找不到網頁時,會主動顯示 http://your.hostname/missing.html 這個檔案
      2. 增加 missing.html 這個檔案,內容請自訂 (通常是增加連結到主網頁即可)
  5. 完成下列的練習 (一定要上面的練習全部完成之後,底下的練習才會正確無誤!)
    1. 建立一個名為 webadmin 的帳號,這個帳號的密碼為 myadmin
    2. 這個帳號可以有個人首頁,亦即可以在 http://your.hostname/~webadmin 看到他的首頁,且首頁的內容會是『我的個人首頁,歡迎光臨呢!』
    3. 這個帳號可以透過 FTP 來上傳下載他的網頁資料
    4. 這個帳號可以使用 samba 來掛載他的家目錄,samba 的密碼為 myadmin
    5. 將底下的答案以網頁列表的方式寫入 http://your.hostname/ans.html 檔案中:
      1. WWW Server 主要傳輸什麼資料給瀏覽器
      2. 所謂的動態網站 LAMP 最早主要指的是那四個軟體?
      3. WWW 預設的協定為 http,這個協定的埠口主要是哪個號碼?
      4. 一般預設的網頁首頁檔名為何?
      5. httpd 的主設定檔檔名
      6. CentOS 的主要網頁首頁目錄預設是在哪個目錄下?
      7. 當你輸入的網址讓 WWW 伺服器找不到時,該錯誤代碼的數字是多少?
      8. 要放行個人首頁時,你的家目錄權限應該要改為幾分?
Top
HOME