nginx+resin的多實例配置

一、 需求

架構:

nginx+resin

Nginx的ip:

192.168.1.1

域名:user.test.com

應用部署的服務器ip:

192.168.1.2

192.168.1.3

應用部署的路徑:

/var/htdocs/test

建立log文件存儲位置的軟連接,該軟連接指向服務器中硬盤空間最大的掛載點下。

二、操作步驟

2.1 由於域名解析生效時間問題,應在工作開始時先做域名解析的工作,以便屆時生效。查找到nginx的公網IP,將user.test.com與公網IP做域名解析。

2.2 部署後端resin服務

在192.168.1.2和192.168.1.3上進行操作。

生產環境中,Resin已經安裝完畢,需要注意的是resin的多實例配置。Resin的多實例配置有幾種方法,不同版本之間的方法也有差異,請注意自己的resin版本。

生產環境上使用的是resin3.0的版本。

Resin多實例配置方法大概有兩種:
第一種就是通過不同的配置文件來實現,通過不同的端口、目錄、server_id來實現多實例。
第二種方法與tomcat類似,copy出N個主體程序來實現多實例。

此次配置選用的方法與tomcat類似,copy出多個主體程序來實現多實例。

複製現有的resin爲resin_test:

 

  1. cd /usr/local && rsync -av resin/ resin_test/ 
  2. cd ./resin_test/ 
  3. vim ./conf/resin.conf 

修改三個地方:

(1)端口:

<bind-ports-after-start/>

    <http server-id="" host="*" port="80"/>

將原來的80端口修改爲8081端口,確保8081端口未被系統使用。修改後的內容如下:

<bind-ports-after-start/>

    <http server-id="" host="*" port="8081"/>

(2)server端口

 <cluster>

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

    </cluster>

將原來的6802端口改爲6803端口,確保6803端口未被系統使用。這樣做的目的是保證每一個實例的server接口不衝突。修改後內容如下:

 <cluster>

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

    </cluster>

(3)主目錄的全路徑

修改如下:

  <host id="user.test.com">

      <web-app id="/" document-directory="/var/htdocs/test"/>

  1. vim ./bin/httpd.sh 

增加resin目錄環境變量的設置並修改成相應路徑,修改部分如下:

RESIN_HOME=/usr/local/resin_test

export RESIN_HOME

 

args='-Djava.library.path=/usr/local/resin_test/lib -J-server -Xms200m -Xmx1024m  -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.

awt.headless=true '

  1. > httpd.pid  #清空存放resin進程pid數值的文件  
  2. ln -s /data/app_log/ /opt/app_log  #創建軟連接,將日誌目錄存放於最大的分區中。 

啓動程序

  1. /usr/local/resin_test/bin/httpd.sh start 

驗證程序啓動是否正常:

 

  1. # ps -ef | grep resin_test 
  2.  
  3. root     11579     1  0 Oct15 ?        00:00:00 perl ./wrapper.pl -chdir -name httpd -class com.caucho.server.resin.Resin -Djava.library.path=/usr/local/resin_test/lib -J-server -Xms200m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true start 
  4.  
  5. root     11581 11579  0 Oct15 ?        00:00:06 /usr/local/java/jdk1.6.0_24/bin/java -Djava.library.path=/usr/local/resin_test/lib -server -Xms200m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true -Xss1m -Dresin.home=/usr/local/resin_test -Dserver.root=/usr/local/resin_test -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl com.caucho.server.resin.Resin -socketwait 61123 -stdout /usr/local/resin_test/log/stdout.log -stderr /usr/local/resin_test/log/stderr.log 
  6.  
  7. netstat -natp|grep java 
  8.  
  9. tcp        0      0 :::80                       :::*                        LISTEN      11037/java          
  10.  
  11. tcp        0      0 :::8081                     :::*                        LISTEN      11581/java          
  12.  
  13. tcp        0      0 ::ffff:127.0.0.1:6802       :::*                        LISTEN      11037/java          
  14.  
  15. tcp        0      0 ::ffff:127.0.0.1:6803       :::*                        LISTEN      11581/java          
  16.  
  17.   

有進程,且端口開啓正常,說明程序啓動成功。

 

2、web前端nginx配置

登錄到192.168.1.1上,作如下操作:

 

  1. cd /opt/nginx/conf 
  2.  
  3. cp nginx.conf nginx.conf_20121016.bak 
  4.  
  5. vim nginx.conf 
  6.  
  7. nginx.conf配置文件中添加如下內容: 
  8.  
  9.     upstream real-test { 
  10.         ip_hash; 
  11.         server 10.127.64.26:8081; 
  12.         server 10.127.64.27:8081;  
  13.     } 
  14.         server { 
  15.         listen       80; 
  16.         server_name  user.test.com 
  17.         access_log  logs/test.access.log  main; 
  18.  
  19.         location / { 
  20.             proxy_set_header X-Real-IP $remote_addr; 
  21.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  22.             proxy_set_header Host $http_host; 
  23.             client_max_body_size    20m; 
  24.             proxy_connect_timeout   90; 
  25.             proxy_send_timeout      90; 
  26.             proxy_read_timeout      90; 
  27.             proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; 
  28.             proxy_pass http://real-test; 
  29.             } 
  30.         error_page   500 502 503 504  /50x.html; 
  31.         location = /50x.html { 
  32.             root   html; 
  33.         } 
  34.         } 

 

驗證nginx.conf的正確性

 

  1. /opt/nginx/sbin/nginx -t 
  2.     the configuration file /opt/nginx/conf/nginx.conf syntax is ok 
  3.     configuration file /opt/nginx/conf/nginx.conf test is successful 

驗證無誤,重新啓動nginx

  1. /opt/nginx/sbin/nginx -s reload 

 

遇到的問題:

1、主目錄的全路徑後面丟失'/',導致nginx不能找到路徑,從而報504錯誤。

2、在遇到多域名同時解析到一個主目錄時,要配置多個虛擬主機,並且保證host-id不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章