本篇將在 SELinux 安全機制及 IPTables 防火牆開啟的環境下實作,分別實作簡單網頁服務及虛擬主機 Virtual Host 設定,最後則是實作網頁中需要保護網頁時可以透過 .htaccess 機制進行保護,關於 Apache 網頁伺服器內容及更詳細設定參數可以參考官方文件 RedHat - Deployment Guide Chapter 14. Web Servers。以下為 Apache 網頁伺服器實作環境:(若執行 semanage 指令發現系統中沒有此一指令請安裝 policycoreutils-python 套件即可(yum -y install policycoreutils-python)。

* OS: CentOS 6.0 (32 bit)
* Apache 套件資訊: httpd-2.2.15-5.el6.centos.i686
* Apache 設定檔: /etc/httpd/conf/httpd.conf
* IPTables 防火牆: TCP 協定 Port 80
* SELinux 權限: httpd_sys_content_t
* Apache 根目錄預設路徑: /var/www/html
* Apache 根目錄變更後路徑: /home/web

----- 安裝 Apache 網頁伺服器套件 -----
請使用 yum 指令搭配 Apache 套件名稱 httpd 即可進行套件安裝。

  1. #yum -y install httpd              //安裝 Apache 套件
  2. #rpm -qa httpd                     //查詢 Apache 套件版本
  3. httpd-2.2.15-5.el6.centos.i686
  4. #rpm -qc httpd | grep httpd.conf$  //查詢 Apache 設定檔路徑
  5. /etc/httpd/conf/httpd.conf

----- 設定 IPTables 防火牆規則 -----
Apache 網頁服務屆時啟動會 Listen TCP 協定 Port 80(HTTP)、443(HTTPs),因此必須修改 IPTables 防火牆規則以便網頁服務啟動後可進行測試,請修改 IPTables 防火牆規則設定檔「/etc/sysconfig/iptables」加上允許 TCP Port 80、443 規則,修改防火牆規則後請使用指令「service iptables restart」重新啟動防火牆服務,以便防火牆規則套用生效,並且使用「service iptables status」指令確定目前防火牆規則是否允許 TCP Port 80。

    1. #vi /etc/sysconfig/iptables         //修改防火牆規則(加入如下二行)
    2. -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    3. -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
    4. #service iptables restart           //重新啟動防火牆服務
    5. #service iptables status | grep -E '80|443'    //查看防火牆規則是否套用生效
    6. 5    ACCEPT  tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:80
    7. 6    ACCEPT  tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:443
    8. #chkconfig httpd on                 //開機自動啟動 Apache 服務

----- 修改 Apache 設定檔 -----
修改 Apache 設定檔「/etc/httpd/conf/httpd.conf」,主要為修改網頁根目錄「DocumentRoot」設定,將根目錄路徑由預設「/var/www/html」修改至「/home/web」 掛載點,下列僅列出 Apache 設定檔中需要修改的地方其預設值及修改後內容。

  1. #cd /etc/httpd/conf               //切換至 Apache 設定檔資料夾
  2. #cp httpd.conf httpd.conf.bak     //備份 Apache 設定檔
  3. #vi httpd.conf                    //修改 Apache 設定檔
  4. DocumentRoot "/var/www/html"     //預設值,網頁根目錄
  5. DocumentRoot "/home/web"         //修改後
  6. <Directory "/var/www/html">      //預設值,網頁根目錄設定
  7. <Directory "/home/web">          //修改後

接著建立屆時 Apache 網頁伺服器測試首頁「/home/web/index.html」,利用「echo」指令將字串「Apache Work!!」送入測試首頁檔案內

  1. #echo 'Apache Work!!' > /home/web/index.html

----- 修改 SELinux 設定值 -----
修改 SELinux 安全機制設定值,因為將 Apahe 網頁伺服器網頁根目錄由 「/var/www/html」 修改至 「/home/web」,因此資料夾其 SELinux 安全機制的權限勢必與原來不同,若不修改屆時啟動 Apache 服務時便可能會因為 SELinux 權限問題造成無法啟動 Apache 服務的狀況。

  1. #ls -dZ /var/www/html /home/web
  2. drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/web
  3. drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

接著透過「semanage fcontext -a -t」指令配合 SELinux 權限「httpd_sys_content_t」,指定「/home/web」資料夾及所有子資料夾及檔案都設定此權限為「SELinux預設權限」,之後使用「restorecon -Rv」指令把 /home/web 資料夾還原至剛才設定的 SELinux 預設權限,完成套用權限動作後再次查看二個資料夾 SELinux 權限便一模一樣。

  1. #semanage fcontext -a -t httpd_sys_content_t "/home/web(/.*)?"  //設定 SELinux 預設權限
  2. #restorecon -Rv /home/web          //還原 SELinux 權限
  3. #ls -dZ /var/www/html /home/web    //查看資料夾 SELinux 權限
  4. drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /home/web
  5. drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

----- 啟動 Apache 服務 -----
修改 SELinux 安全機制權限設定後,可以放心啟動 Apache 網頁服務,請使用指令「service httpd start」啟動 Apache 服務,並且於服務啟動後使用「netstat」指令查看系統是否開啟了 TCP Port 80,以及「ps」指令查看 Apache 執行序(httpd)是否運作。

  1. #service httpd start        //啟動 Apache 服務
  2. Starting httpd:                                            [  OK  ]
  3. #netstat -tunpl | grep :80  //查看是否開啟 Port 80
  4. tcp  0  0 :::80  :::*    LISTEN     904/httpd
  5. #ps aux |grep httpd         //查看 httpd 執行序
  6. apache     906  0.0  0.2  12680  2132 ?        S    15:58   0:00 /usr/sbin/httpd
  7. apache     907  0.0  0.2  12680  2132 ?        S    15:58   0:00 /usr/sbin/httpd
  8. ...略...

啟動 Apache 網頁服務成功後,開啟瀏覽器測試 Apache 網頁服務是否真的運作以及看到剛才建立的測試首頁。

----- 虛擬主機 Virtual Host 設定 -----
簡單說虛擬主機 Virtual Host 為讓 Apache 網頁伺服器可以同時運作多個網站的機制,若伺服器只有一個 IP 位址即可依靠 DNS 名稱解析機制來達成,請注意!! 當設定 Virtual Host 之後原本的設定將被覆蓋。

  1. #vi /etc/httpd/conf/httpd.conf   //修改設定檔內容如下
  2. <VirtualHost 10.10.25.115:80>
  3. ServerAdmin webmaster@weithenn.org
  4. DocumentRoot /home/web/colo-a
  5. ServerName colo-a.weithenn.org
  6. ErrorLog logs/colo-a.weithenn.org-error_log
  7. CustomLog logs/colo-a.weithenn.org-access_log common
  8. </VirtualHost>
  9. #mkdir /home/web/colo-a          //建立 Virtual Host 資料夾
  10. #echo 'Colocation-A work!!' > /home/web/colo-a/index.html  //建立測試首頁
  11. #service httpd reload            //重新載入 Apache 服務(套用生效)
  12. Reloading httpd:

重新載入 Apache 網頁服務成功後,測試是否可以看到測試首頁。

----- 設定 Apache 支援 .htaccess 保護功能 -----
當您網站上有某些網頁不想讓人可以隨便瀏覽 (例如:管理介面、程式後台.....),此時可利用 Apache 內的 .htaccess 功能來替網頁進行管制保護,以下為利用 .htaccess 來保護指定網頁其設定注意事項:
* AllowOverride AuthConfig: 使用 帳號/密碼 進行管制保護
* AllowOverride Limit: 使用 管制來源 IP 進行管制保護
* AllowOverride None: .htaccess 功能失效

  1. #vi /etc/httpd/conf/httpd.conf //修改設定檔內容
  2. AllowOverride None             //預設值
  3. AllowOverride Authconfig       //修改後
  4. #mkdir /home/web/colo-a/admin   //建立後台資料夾
  5. #echo 'Web Site Admin Page!!' > /home/web/colo-a/admin/index.html   //建立測試首頁
  6. #vi /home/web/colo-a/admin/.htaccess  //修改 .htaccess 檔案內容如下
  7. AuthType Basic
  8. AuthName "Admin Page Login"
  9. AuthUserFile /home/web/colo-a/admin/.htpasswd
  10. require valid-user
  11. #htpasswd -mc /home/web/admin/.htpasswd weithenn  //第二筆帳號使用 -m 即可
  12. New password:             //輸入登入密碼
  13. Re-type new password:     //再次輸入密碼以確認
  14. Adding password for user weithenn
  15. #chgrp apache home/web/colo-a/admin/.htpasswd     //設定檔案權限
  16. #chmod 640 /home/web/colo-a/admin/.htpasswd       //設定檔案權限
  17. #service httpd reload                             //重新載入服務套用生效
  18. Reloading httpd:

設定完成後若成功運作則要瀏覽 admin 資料夾時便會彈跳出使用者帳號密碼驗證視窗,通過驗證即可看到網頁內容。

http://ithelp.ithome.com.tw/question/10080681

邁向 RHCE 之路 (Day26) - Apache 網頁伺服器的更多相关文章

  1. [转载]在網頁上加入HTML5 的Video Tag,直接播放MP4、OGG…等

    在之前有一篇文章提到HTML5(為何iPhone,iPod,iPad不支援Flash,HTML5將更普及於網路世界!!)的重要性,而Html 5的主要革新是在他的語意標籤,像是<video> ...

  2. eafier 簡單易用 HTML、CSS 網頁編輯器(可自動插入 Tag 標籤)

    很久很久以前,一般人要做網頁的話大概都會用 FrontPage 之類的工具,更進階一點的會用 Dreamweaver 等軟體.雖然上述軟體提供很方便的「所見即所得」的編輯預覽模式,但寫出來的網頁程式碼 ...

  3. 問題排查:行動裝置網頁前端 UI 設計 (1)

    這是最近開始接手的一個微信公眾平台專案, 在重整後端程式碼時,因為也需要透過前端來看效果, 所以就因此在前端的部分遇到了不少問題, 畢竟這是以前沒接觸過的領域 (早年的網頁應用程式開發沒有那麼多分工) ...

  4. PHP微信登錄(網頁授權)之後的獲取用戶的信息

    //這部峯代碼是封裝的庫文件,<?php /** * Created by PhpStorm. * User: root * Date: 16-6-23 * Time: 下午3:29 */ cl ...

  5. 解除網頁無法選取文字、鎖右鍵限制:Enable Copy(Chrome 擴充套件)

    有些网页因会因为某些因素而禁止浏览者直接复制网页上的内容,虽然我们了解站方的意思,不过有些时候会造成一些不必要的困扰. Enable Copy 这款Chrome 扩充套件可以帮你一键解除封锁右键和选取 ...

  6. jQueryMobile 網頁使用 ASP.NET Web API 服務

    微軟的 ASP.NET Web API 框架,能以 RESTful 輕量級的架構風格,建立 HTTP 服務,讓多種不同的用戶端,如: 手機.平板.電腦(PC),透過 HTTP 的 GET.POST.P ...

  7. python学习之路---day26

    网络的基本知识点 一:网络通信原理 连接两台计算机之间的Internet之间的协议一系列协议为互联网协议 互联网协议的功能是:定义计算机如何接入Internet,以及Internet的计算机通信标准 ...

  8. 問題排查:行動裝置網頁前端 UI 設計 (2)

    之前上網找了個星級評分的範例來玩, 當然這個範例已經用在另一個專案了, 目前看起來沒什麼狀況, 不過在移植到目前的專案之後, 就出現了怪現象: 1. 在大部份時間裡,點擊星星不會有任何反應 2. 即便 ...

  9. Apache CXF自定义拦截器

    为什么设计拦截器?1.为了在webservice请求过程中,能动态操作请求和响应数据,CXF设计了拦截器 拦截器分类: 1.按所处的位置分:服务器端拦截器,客户端拦截器. 2.按消息的方向分:入拦截器 ...

随机推荐

  1. 设置启用mysql慢查询日志

    --设置log文件位置 set global slow_query_log_file = /sql_log/slow_log.log; --设置是否启用记录没有使用索引的sql set global ...

  2. 【spring cloud】spring boot2.x下 使用feign,注解@EnableFeignClients 找不到的解决方法

    spring boot2.x下 使用feign,注解@EnableFeignClients 找不到的解决方法 在spring boot1.x下,使用注解@EnableFeignClients,jar包 ...

  3. 【多线程】java多线程Completablefuture 详解【在spring cloud微服务之间调用,防止接口超时的应用】【未完成】

    参考地址:https://www.jianshu.com/p/6f3ee90ab7d3 示例: public static void main(String[] args) throws Interr ...

  4. Unity3D协程介绍 以及 使用

    作者ChevyRay ,2013年9月28日,snaker7译  原文地址:http://unitypatterns.com/introduction-to-coroutines/ 在Unity中,协 ...

  5. 使用富文本OHAttributedLabel

    OHAttributedLabel 富文本标签 https://github.com/AliSoftware/OHAttributedLabel 以下是我渲染出来的效果 OHAttributedLab ...

  6. zendstudio采用xdebug调试,断点不停的解决

    查看zendstudio里windows->preferences->PHP->PHP Executables,编辑列表项,弹出框的Debugger看看还是不是xdebug.

  7. IIs 中运行asp程序出现“An error occurred on the server when processing the URL. Please contact the system administrator.”错误

    在个人的win08系统上使用IIs运行 asp程序结果出现了以下错误 An error occurred on the server when processing the URL. Please c ...

  8. 黑马程序员_<<TCP>>

    ---------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1. TCP/IP 1.概述 要建立连接, ...

  9. xcode 5 使用 XCTest 做单元测试

    xcode 5 使用 XCTest 做单元测试 什么是单元测试,请看 百度百科 单元测试 一:在xcode5 之前,我们新建项目时,可以选择是否集成单元测试:如今在xcode5,我们新建立的项目默认就 ...

  10. 正确用DD测试磁盘读写速度

    转自:http://blogread.cn/it/article/6479?f=wb 问: 以下几种方式测试磁盘读写速度有什么区别? dd bs=1M count=128 if=/dev/zero o ...