Apache + Resin的java虛擬主機設置

          關鍵字:resin,虛擬主機,work-dir,temp-dir,stderr-log,stdout-log

          最近研究了一下apache+resin做虛擬主機,其中經(jīng)過很多曲折,在網(wǎng)上搜索很多文章,最終搞定,總結一下.

          概述

           本文主要是為了做虛擬主機的人準備的,做resin的虛擬主機有幾種方式:
           1.缺省情況下,root用戶運行resin,最不安全
             強烈不建議這種方式,不過這種方式基本不需要配置
            
           2.以另外一個用戶,例如resin用戶來運行resin
             安全一些,類似缺省apache的方式,不過需要配置一些目錄設置,否則無法運行
            
           3.每個虛擬主機一個用戶,虛擬主機用戶多的時候太麻煩,不過最安全.
             用戶之間互不影響.配置相對麻煩一些.

          安裝


           resin默認僅提供了源碼方式,所以需要編譯安裝.(有第三方提供了rpm,但還是自己編譯好控制和升級).
           
           resin和apache的連接模塊也需要編譯,所以還需要apache有apxs程序,一般apache編譯的版本才有這個程序,所以我們只好編譯安裝apache.
           一般用戶還需要安裝php等等,不在贅述,下面開始安裝.
           
           下載apache 2.0.54,php5.0.5 or php 4.4,resin rpo 3.0.14,放在/temp目錄下,并用tar zxvf命令展開.
           
           編譯安裝apache,類似命令如下

           ./configure --prefix=/web/apache --with-mpm=worker  --enable-so --enable-rewrite 
           make
           make install 

           
           注意允許了apache的so模塊和rewrite模塊,開啟apache的worker工作方式,具體請參考apache的文檔.如果用戶需要其他設置,請瀏覽configure的幫助. (./configure --help)
           
           
           編譯php4:
           ./configure --prefix=/web/php --with-apxs2=/web/apache/bin/apxs  --with-config-file-path=/web/php  --with-mysql
           make
           make install 


           
           指定php安裝目錄,設定apache的目錄和php.ini的目錄,并配置mysql.開啟其他選項也請看幫助.
           安裝后把php.ini-recommend 復制到/web/php/php.ini,然后按照自己的需要修改.
           (主要修改Safe_mode為on等等安全措施)
           
           
           php5提示:如果同時安裝mysql和mysqli,生成的Makefile會有一個小錯誤,多了一個-lmysqlclient  ,去掉即可. ( http://cn.php.net/mysqli )
           
           
           安裝jdk:
            下載rpm包安裝
            
            設置JAVA_HOME變量,把jdk/bin目錄加入到path里
            并把tools.jar設置到classpath中.classpath里面還要包括當前路徑,也就是一個點.
            
            一般是通過修改/etc/profile設置,可搜索相關文檔. 
           
           
           編譯resin:
           
           ./configure --prefix=/web/resin  --with-apxs=/web/apache/bin/apxs
           make
           make install 



           
           resin默認提供了啟動腳本,位于contrib目錄下,我一般把init.resin.in復制到/etc/init.d/resin,然后使用checkconfig 設置,可以打開這個文件看看如何設置.
           
           然后打開這個文件,修改JAVA_HOME,RESIN_HOME為實際目錄:
           
           JAVA_HOME=/usr/java/jdk1.5
           RESIN_HOME=/web/resin 

           
           
           至此,apache,php,resin的默認設置就可以運行了.
           
           :resin安裝的時候,已經(jīng)把和apache連接的模塊和配置都設置好了,可以打開apache的httpd.conf看看:
           
           LoadModule caucho_module modules/mod_caucho.so
           
           ResinConfigServer localhost 6802
           CauchoStatus yes 



           
           其中php 的設置也自動設置好了,如下:
           
           LoadModule php5_module        modules/libphp5.so
           
           #
           # Cause the PHP interpreter to handle files with a .php extension.
           #
           AddType application/x-httpd-php .php
           # AddType application/x-httpd-php-source .phps 


          設置apache


           首先是設置apache的基本屬性:
            調整cgi設置,如果你要運行cgi程序: AddHandler cgi-script .cgi .pl
            
            設置默認編碼  AddDefaultCharset GB2312
            
            DirectoryIndex  DirectoryIndex index.htm index.html index.php index.jsp
            
            連接數(shù):參考文檔吧,這個要根據(jù)實際情況調整了,注意如果是worker模塊,設置worker部分的連接數(shù)即可
            
            郵件地址ServerAdmin
            
            Group nobody
            
            
           為了java web程序的安全,我們在httpd.conf里加入
           
           <LocationMatch "/WEB-INF/">
            AllowOverride None
            deny from all
           </LocationMatch>
           
           <LocationMatch "/META-INF/">
            AllowOverride None
            deny from all
           </LocationMatch> 


           我們在apache里新增一個虛擬主機:

           <VirtualHost *:80>
               ServerAdmin testuser@testuser.com
               DocumentRoot /home/testuser/html
               ServerName www.testuser.com
               ServerAlias testuser.com ftp.testuser.com
              
            ScriptAlias /cgi-bin/ "/home/testuser/cgi-bin/"
              <Directory /home/testuser/cgi-bin/>
               ##本用戶可以運行cgi,其他用戶要看httpd.conf的設置了,我是沒有默認開啟的,只允許特定用戶運行cgi
             AddHandler cgi-script .pl .cgi
              </Directory>   
              
               ##把日志放到自己的目錄下,這樣用戶可以看自己的日志了,出了錯誤好跟蹤
               ErrorLog /home/testuser/tmp/log/testuser-error_log
               CustomLog /home/testuser/tmp/log/testuser-access_log common
           </VirtualHost> 

           
           :如果/home/testuser/tmp/log目錄權限可以設置為合適的用戶權限,方便用戶管理日志,例如刪除
           
           為了防止日志過大,還可以瀏覽logratate,cronolog等程序來設置.例如,安裝了cronolog的情況下設置為:
           
           CustomLog "|/usr/local/sbin/cronolog /home/testuser/tmp/log/access_%m_%d.log" common
           
           警告:為了用戶能刪除日志,你可能需要對目錄做額外設置(例如777),否則用戶是不能刪除目錄下的文件的. 或者采用定期刪除日志的方法也可以.
           
           


          設置resin


           
           新增一個resin用戶,為了運行resin,這個用戶要求有shell,不能是true或者nologin.假設我們增加了一個用戶resin,組也是resin.
           
           修改/etc/init.d/resin,修改一行:
           USER=resin 
           
           這樣默認resin程序就以resin用戶的身份運行了,為了運行缺省的程序,需要把resin安裝目錄的所有owner,group修改為resin.resin,遞歸修改.
           
           負載均衡:resin支持設置多個端口啟動,來做負載均衡,可以參考相關文檔.

              <cluster>
                <srun server-id="" host="127.0.0.1" port="6802"/>
                <srun server-id="" host="127.0.0.1" port="6803"/>
                <srun server-id="" host="127.0.0.1" port="6804"/>
              </cluster> 

              
              對應apache的httpd.conf也要修改:

              ResinConfigServer localhost 6802
              ResinConfigServer localhost 6803
              ResinConfigServer localhost 6804 

           
           因為apache默認已經(jīng)有access日志了,還可以關閉resin的access日志.
           

              <access-log path="logs/resinlog/access.log"
                      format=’%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"’
                      rollover-period="1D"/> 

                      
           注釋掉這段即可關閉. 
           
           
           現(xiàn)在我們來配置對應apache的虛擬主機:

             <host id=’’>
                <web-app id=’/’ document-directory="/home/testuser/html">
                  <work-dir>/home/testuser/tmp/work</work-dir>
                  <temp-dir>/home/testuser/tmp/tmp</temp-dir>
                  <stdout-log path=’/home/testuser/tmp/resinlog/stdout.log’ rollover-period=’1D’ archive-format="stdout_%m%d.log" />
                  <stderr-log path=’/home/testuser/tmp/resinlog/stderr.log’ rollover-period=’1D’ archive-format="stderr_%m%d.log" />
                </web-app>
             </host> 


             
             注意如果有多個虛擬主機,id需要寫上域名,因為目前只有一個虛擬主機,所以id為空就是默認的都訪問這個.
             
             <host id=’www.testuser.com’>
             
             我們可以看到,這個虛擬主機設置了resin的work-dir和resin-dir,并設置了stdout和stderr日志,都放在用戶的目錄下.
            
             如果不設置work-dir的話,resin默認是在WEB-INF下建立一個work目錄.
             如果不設置temp-dir的話,resin默認是在WEB-INF下建立一個tmp目錄.
            
             但是用戶的目錄對resin來說是沒權限的,所以要首先建立這些目錄,并且設置目錄的owner是resin,這樣resin程序才能操作.
             (root用戶運行情況下不存在此問題)
            
             兩種日志也放到用戶的目錄下,方便用戶調試,除錯,日志目錄的owner也要設置為resin,否則也無法正常運作.日志設置為一天產(chǎn)生一個,可以根據(jù)需要修改.
            
             警告:為了用戶能刪除日志,你可能需要對目錄做額外設置(例如777),否則用戶是不能刪除目錄下的文件的. 或者采用定期刪除日志的方法也可以.  

             警告:work,tmp,resinlog目錄都是必須要管理員建立的,并設置為resin用戶擁有,否則resin無法運行,而且注意目錄不應該被web頁面訪問到.
           


          友情提示


           本文寫的非常籠統(tǒng),因為一個管理員必須親自熟悉每個細節(jié)才好,否則出了問題不好定位,很多事情還是親歷親為才好.
           本文很多內容都是在網(wǎng)上沒有找到答案自己看文檔試驗出來的,所以僅僅希望給讀者帶來一些提示,并不能代替程序本身的文檔.


           作為一個系統(tǒng)管理員,應該好好閱讀文檔.
           
           雖然,我也很懶 :P
           
           有問題,請留言或者評論,肯定會有問題的! 


            
          安全沙箱  


           為了java虛擬主機對本地文件不造成危害,我們還需要設置resin的安全沙箱,請訪問后續(xù)文章.
           介紹:沒有開啟安全沙箱的話,任何一個虛擬主機的用戶都可以讀取/etc/passwd等重要文件...
           


           
          創(chuàng)造共用協(xié)議:署名,非商業(yè),保持一致   除經(jīng)特別注明外,本文章版權歸JScud Develop團隊或其作者所有.
          署名,非商業(yè)用途,保持一致.   scud(飛云小俠)   JScud Develop

          posted on 2005-10-27 20:19 Scud(飛云小俠) 閱讀(1812) 評論(1)  編輯  收藏 所屬分類: 其他

          評論

          # re: Apache + Resin的java虛擬主機設置 2005-11-04 11:33 scud(飛云小俠)

          httpd.conf在虛擬主機定義前 應該有一句話:

          NameVirtualHost *:80

            回復  更多評論   

          <2005年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統(tǒng)計

          公告

          文章發(fā)布許可
          創(chuàng)造共用協(xié)議:署名,非商業(yè),保持一致

          我的郵件
          cnscud # gmail


          常用鏈接

          留言簿(15)

          隨筆分類(113)

          隨筆檔案(103)

          相冊

          友情鏈接

          技術網(wǎng)站

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 电白县| 威宁| 海淀区| 秀山| 泰州市| 洛川县| 蒙自县| 香河县| 罗定市| 江安县| 宣汉县| 长汀县| 永春县| 华安县| 阜城县| 宁强县| 宁远县| 昌平区| 盈江县| 二连浩特市| 新昌县| 聂拉木县| 景德镇市| 白沙| 克什克腾旗| 武邑县| 福安市| 广汉市| 资中县| 阿勒泰市| 安泽县| 临安市| 永福县| 灵山县| 醴陵市| 合山市| 安庆市| 娄烦县| 广南县| 长垣县| 扎兰屯市|