cgi程序的兩種執行方式

 我的目的是要研究 nginx->fastCGI-CGI,因爲nginx不支持CGI,所以測試CGI的時候搭建了一個lighttpd。

CGI是一個標準,與語言無關,包含三個部分:標準輸入、環境變量、標準輸出。

CGI程序可以用C/C++語言等需要編譯的語言寫,也可以用python、perl、ruby等直接解釋執行的語言寫,這兩種他們的執行方式是不同的:一個是程序直接可以被執行;一個是需要特定的語言解釋器來執行。這樣的話,web server配置時也會不同。

以lighttpd爲例,

 

 

  1. ## to get the old cgi-bin behavior of apache 
  2.  
  3. ## 
  4.  
  5. ## Note: make sure that mod_alias is loaded if you uncomment the 
  6.  
  7. ##       next line. (see modules.conf) 
  8.  
  9. ## 
  10.  
  11. alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" ) 
  12.  
  13. $HTTP["url"] =~ "^/cgi-bin" {                                                                                           
  14.  
  15.    cgi.assign = ( "" => "" ) 
  16.  

以上配置了所有cgi-bin目錄下的程序,不需要語言解釋器(cgi.assign = ( "" => "" )),直接被執行,所有cgi-bin被alias到目錄server_root + "/cgi-bin"目錄,server_root 是之前定義的一個變量。

這樣所有編譯好的可執行程序都可以放到 server_root + "/cgi-bin" 目錄下。

python、perl、ruby等解釋語言也可以放在該目錄下被執行,但必須在第一行用#! /usr/bin/env python   的方式指定採用的解釋器,而且文件需要有可執行權限。

 

 

  1. ## 
  2.  
  3. ## Plain old CGI handling 
  4.  
  5. ## 
  6.  
  7. ## For PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini. 
  8.  
  9. ## 
  10.  
  11. cgi.assign                 = ( ".pl"  => "/usr/bin/perl", 
  12.  
  13.                                ".cgi" => "/usr/bin/perl", 
  14.  
  15.                                ".rb"  => "/usr/bin/ruby", 
  16.  
  17.                                ".erb" => "/usr/bin/eruby", 
  18.  
  19.                                ".py"  => "/usr/bin/python" )  

以上配置所有.pl  .cgi  .rb  .erb  .py後綴的文件,需要調用相應的解釋器來解釋執行。

 

除去以上兩種方式外,其他的程序(既不以特性的後綴結尾,也不放到指定目錄下),會被當成文件被下載。

 

 

 

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