iThome online | iThome Blog | iThome周刊訂閱

載入中...

twtw

IT邦初學者
9級

[RoR] 用 nginx 作為 RoR 的前端

ruby為基礎的web server,像WEBrick, mongrel, thin, ebb或其他會被陸續發展出來,雖然可以直接以80 port啟動,若碰到流量大、連接數蠻多的時候,就有需要在前端加上reverse proxy,可讓反應的速度提昇些。

常作為RoR的前端常見的是lighttpd、nginx及在apache上所謂的 mod_rails: passenger ,愈新出來的產品就效能愈快;在此簡述自己用nginx設定的方式。



收到書籤:發佈到twitter      
分享時間:2008-09-18 10:41:26

▼ ADVERTISEMENT ▼

分享內容(
8

nginx 的安裝及設定
安裝 nginx
yum install nginx

通常我在一台機器中,我都以虛擬主機的功能來設定,通常是公佈說我的網址是SITE_NAME_1,,web server上就在virtual host的設定段指到SITE_NAME_1的目錄中;另外就做一個 Default 的目錄,來接受處理 非SITE_NAME_1 名稱的 query,像以IP來query或其他不同的名稱query指到本身機器來。

以下的範例,是這樣子考量的: 在 /home/ironman 的家目錄之中,是放每個RoR的各別的project,其中 Default的目錄中建立 htdocs logs 目錄,通常這裡都讓所沒有指定到的hostname的query,都指向這裡。

在此將我所用的nginx的設定檔分享於此:

user              nginx;
worker_processes  1;
pid               /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    #sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    gzip  on;

### 修改您所開啟的 port,這裡 upstream 的設定也可改寫在 /etc/nginx/conf.d/upstream-fair.conf
### upstream 後面的 mongrel 也可設其他名稱,只要跟 virtual 裡面所指向的名稱一致即可。
    upstream mongrel {
        server 127.0.0.1:3000;
    }

    # Load config files from the /etc/nginx/conf.d directory
#所指定的虛擬主機設定,可寫在本檔案,或者寫到下述 /etc/nginx/conf.d/virtual.conf 的檔裡面
    include /etc/nginx/conf.d/*.conf;

    #
    # 將所有未指定到的hostanme的query都指到這預設的server
    #
    server {
        listen       80 default;
        server_name  _;
### 看您要將log定在哪個目錄,別忘了注意nginx以什麼身份來寫入的權限問題
        charset utf-8;
        access_log  /home/ironman/Default/logs/access.log  main;
        error_log  /home/ironman/Default/logs/error.log;

### 目錄要設在哪裡
        location / {
            root   /home/ironman/Default/htdocs;
            index  index.html index.htm;
        }
### 若要跑PHP的話,加上此段
        location ~ /pzone/.*\.php$ {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/ironman/Default/htdocs/$fastcgi_script_name;
            include fastcgi_params;
        }

        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

而在 /etc/nginx/conf.d/virtual.conf 的設定內容:
    server {
        listen          80;
### 設被 query 的主機名稱
        server_name     SITE_NAME_1;
        charset utf-8;
### log 檔的位置
        access_log      /home/ironman/test1/log/access.log main;
        error_log       /home/ironman/test1/log/error.log;

    location / {
      proxy_set_header  X-Real-IP  $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect false;
      if (-f $request_filename/index.html) {
        rewrite (.*) $1/index.html break;
      }

在nginx 上執行 PHP 的設定
一些好用的PHP的程式,仍需在nginx上執行,

Fedora上安裝可執行php依下列動作進行:
#可以有php-cgi這執行檔
yum install php-cli

#Ubuntu是裝php-common就可以有php-cgi
#然後需要裝fastcgi的程式,Fedora是在lighttpd裡面:
yum install lighttpd-fastcgi

#是為了有: /usr/bin/spawn-fcgi 這個執行程式。

建置一個啟動 php-cgi 的 script
為/usr/local/bin/php-fastcgi
#!/bin/sh
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi

在/etc/init.d/init-fastcgi 建置啟動的script
#!/bin/bash
PHP_SCRIPT=/usr/local/bin/php-fastcgi
RETVAL=0
case "$1" in
    start)
      $PHP_SCRIPT
      RETVAL=$?
  ;;
    stop)
      killall -9 php-cgi
      RETVAL=$?
  ;;
    restart)
      killall -9 php-cgi
      $PHP_SCRIPT
      RETVAL=$?
  ;;
    *)
      echo "Usage: php-fastcgi {start|stop|restart}"
      exit 1
  ;;
esac
exit $RETVAL

啟動即可被nginx所用

在此指定 Default 中的 php 的目錄才可執行 PHP 的程式, nginx.conf 中加入
        location ~ /php/.*\.php$ {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/ironman/Default/htdocs/$fastcgi_script_name;
            include fastcgi_params;
        }


然後啟動 /etc/init.d/init-fastcgi,如果 pgrep -lf php-cgi 可以看到php-cgi有在跑的話,就可在nginx中執行PHP了。網址就是 http://IP/php/test.php 即可看到執行結果。

參考連結
http://rubyjudo.com/2006/8/27/nginx-yet-another-rails-deployment-option
http://www.howtoforge.com/lemp_nginx_mysql_php_ubuntu_debian
http://bianbian.org/tag/nginx

[RoR] 用 nginx 作為 RoR 的前端

目前沒有資料

回應

請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數



 

檢舉違規

違規事項:

*補充檢舉理由(可省略),字數不可超過100字

推薦

推薦理由:


*給回答者的鼓勵(可不填),字數不可超過100字

▼ ADVERTISEMENT ▼

熱門標籤

 cisco   crystal   exchange   it   java   javascript   linux   m-power   mail   microsoft   msnlib   msnp15   msnsdk   msn機器人   mysql   nas   oracle   outlook   pmi   pmp   raid   report   sap   server   smartquery   sql   vista   windows   xp   倍力   倍力資訊   免費軟體   國際專案管理師   報表   專案管理   微軟   有話大聲說   活動   省錢   網路   網路儲存   網路管理   網頁安全   網頁設計   資安   資料庫   資訊安全   防毒軟體   2003   2008