一:網絡環境 —— —— (eth0:192.168.11. (eth0:a.b.c.d) A ——————-------------- B ------------->ISP —— (eth1:192.168.11.5)—— web.company.com firewall.company.com A是局域網內部的一台WEB服務器,安裝Redhat Linux 6.X,編譯Apache+PHP4+mysql B是公司防火牆,外部地址為a.b.c.d,是通向Internet的唯一路徑。B上也運行Apache做反向代理到內部機器B。假設公司的域名為@company.com,B是該域的域名服務器。 二:WEB目錄的組織結構 我們計劃把WEB服務器數據文件置於一單獨的目錄/www下面,再在其下面建立相應的子目錄,如果我們計劃設置WEB服務器web.company.com,則建立目錄 /www/web.company.com ,結構如下: /www/web.company.com/public/htdocs /cgi-bin /www/web.company.com/staging/htdocs /cgi-bin /www/web.company.com/developer/htdocs /cgi-bin 三: 訪問方法與虛擬主機 對staging和developer目錄用基於端口的虛擬主機來訪問,分別對應端口81,82。 下面是apache的配置文件/usr/local/apache/conf/httpd.conf中虛擬主機部分的配置: Listen 80 Listen 192.168.11.8:81 Listen 192.168.11.8:82 〈VirtualHost 192.168.11.8:81> documentroot /www/web.company.com/staging/htdocs/ scriptalias /cgi-bin /www/web.company.com/staging/cgi-bin/ transferlog "/usr/local/apache/bin/cronolog /usr/local/apache/logs/web/staging/%Y/%m/%d/Access_log" errorlog "/usr/local/apache/bin/cronolog /usr/local/apache/logs/web/staging/%Y/%m/%d/error_log" 〈/VirtualHost> 〈VirtualHost 192.168.11.8:82> documentroot /www/web.company.com/developer/htdocs/ scriptalias /cgi-bin /www/web.company.com/developer/cgi-bin/ transferlog "/usr/local/apache/bin/cronolog /usr/local/apache/logs/web/developer/%Y/%m/%d/access_log" errorlog "/usr/local/apache/bin/cronolog /usr/local/apache/logs/web/developer/%Y/%m/%d/error_log" 〈/VirtualHost> 注:上面是基於端口的虛擬主機設置,要訪問測試服務器,用http://web.company.com:81/開發服務器用http://web.company.com:82/上面的transferlog and errorlog用了不是默認的格式,而是Apache網站上建議的這種每天一個文件的年/月/日格式,可從http://www.ford-mason.co.uk/resources/cronolog/下載編譯後安裝在/usr/local/apache/bin/cronolog,可查看Apache網站獲得更多信息。 http://httpd.apache.org/docs/misc/FAQ.Html#rotate 如還有其它主頁需要在此服務器上服務,如在/www下再創建子目錄hr.company.com(人事部門),可為主機A創建IP別名,如192.168.11.9,再做同樣的基於端口的虛擬主機設置 個人主頁的情況 假定Apache以用戶組身份nobody運行,且用戶主目錄為/home/jephe,則在此目錄下創建目錄public_html a.設置用戶主目錄/home/jephe要給nobody組以讀和執行的權限 chmod 750 -R /home/jephe b.設置用戶主目錄/home/jephe下public_html目錄的權限 chmod -R 2770 /home/jephe/public_html c.設置用戶主目錄的擁有者 chown -R jephe.nobody /home/jephe/public_html用戶可FTP上傳主頁文件至自己的目錄中,要設置/etc/inetd.conf中的FTP上載的umask默認值為u002, ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a -u002 然後用killall -HUP inetd生效。 最後用http://web.company.com/~jephe/ 訪問個人主頁。 四:防火牆機器B上的Apache反向代理 設置如下: NameVirtualHost a.b.c.d 〈VirtualHost a.b.c.d> servername web.company.com errorlog "/usr/local/apache/bin/cronolog /var/log/httpd/web/%Y/%m/%d/error_log" transferlog "/usr/local/apache/bin/cronolog /var/log/httpd/web/%Y/%m/%d/access_log" rewriteengine on rewriterule ^(/.*)$ http://192.168.11.8/$1 [P,L] proxyrequests off 〈/VirtualHost> 五:備份 用Rsync備份主目錄/www/web.company.com/public/htdocs整個目錄