2016-06-28 264 views
0

我知道這個問題已經被問到了,但是這個問題沒有明確的答案(How to run CGI scripts on Nginx)會幫助我。就我而言,我已經使用源代碼安裝了NGINX,並修復了我的.config文件,以便我可以使用FASTCGI成功讀取.php文件。但是,當涉及到運行CGI腳本時,我遇到了相當多的問題。我知道我已經安裝並設置了FAST CGI,所以我應該命名這些.cgi文件.fcgi而不是?或者我應該包含一些.cgi文件以瞭解它是否與FAST CGI一起工作?我試圖與nginf.conf文件玩弄周圍包括.fcgi,它看起來是這樣的現在:在NGINX上運行CGI腳本

worker_processes 2; 

pid  logs/nginx.pid; 
error_log syslog:server=unix:/dev/log,facility=local7,tag=nginx,severity=error; 

events { 
worker_connections 1024; 
} 


http { 
include  mime.types; 
default_type application/octet-stream; 

access_log syslog:server=unix:/dev/log,facility=local7,tag=nginx,severity=info combined; 

sendfile  on; 
keepalive_timeout 65; 


server { 
    listen  80; 
    server_name localhost; 
     root /home/parallels/Downloads/user_name/nginx/html; 
    location/{ 

index index.html index.htm new.html; 
     autoindex on; 
    } 

location ~ \.php$ { 
fastcgi_split_path_info ^(.+\.php)(/.+)$; 
fastcgi_pass 127.0.0.1:9000; 
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
fastcgi_param HTTPS    off; 
include fastcgi_params; 
fastcgi_buffer_size 16k; 
fastcgi_buffers 4 16k; 
} 
location ~ \.pl|fcgi$ { 
    try_files $uri =404; 
    gzip off; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.pl; 
    #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
    } 

    #error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root html; 
    } 
} 
} 

但是,每當我運行一個腳本.fcgi如

#!/usr/bin/perl 

print "Content-type: text/html\n\n"; 
print "<html><body>Hello, world.</body></html>"; 

我我招呼着屏幕,看起來像這樣:

enter image description here

我敢肯定,這是不正常的;我應該只在屏幕上看到Hello, world.,而不是所有的代碼。請讓我知道,如果我的想法實際上是錯誤的,這應該是正確的輸出。

此外,在一個側面說明,如果我有這個作爲我files.fcgi文件:

#!/usr/bin/perl 
my $output = `ls`; 
print $output 

運行這樣返回的.fcgi文件位於目錄中的所有文件的列表。無論如何,我可以在網絡瀏覽器上顯示它?看看網上的例子,似乎人們已經能夠在他們的瀏覽器上運行file.fcgi,並看到shell命令的輸出(這導致我相信我做錯了什麼,因爲當我在命令行上運行它時列出了所有的文件,但在瀏覽器中,它只是打印出我的代碼)。有誰知道我可能做錯了什麼,假設我做錯了什麼。如果您需要更多信息,請告訴我!

謝謝你,祝你有美好的一天!

+0

僅製作後綴.fcgi不會將該示例變爲FastCGI程序;它仍然是一個傳統的CGI程序 –

+0

FastCGI程序中是否有必須包含的內容?像'使用fast:cgi'或類似的東西? – trynacode

+0

不幸的是,我最近一次查看它並不那麼簡單 - 而標準的cgi API是「針對每個請求的,服務器使用env vars調用您的程序來描述請求,並使用stdin上的主體(如果有的話)你的程序預計會在stdout和exit上發出響應「,fcgi API希望你的程序能夠持續運行並處理在套接字上傳遞給它的請求 - 這樣,它就更像是一臺服務器。請參閱https://en.wikipedia.org/wiki/FastCGI –

回答

1

搜索"fastcgi wrapper"可以找到各種程序,旨在彌合不喜歡產卵過程以處理請求和傳統CGI程序的「現代」網絡服務器之間的差距。

[nginx  ] one socket  [wrapper  ] ,-- forks a single subprocess 
[runs  ] == connection ==> [also runs ] ---- running your CGI program 
[continuously] per request [continuously] `-- for each request 

雖然標準CGI API是「對於每個請求,服務器調用程序與ENV瓦爾來描述與所述主體上的stdin請求和(如果有的話),而程序應該發出一個響應標準輸出和退出「,fcgi API希望你的程序能夠不斷運行並處理在套接字上傳遞給它的請求 - 這樣,它就更像是一臺服務器。請參閱http://en.wikipedia.org/wiki/FastCGI

1

nginx不支持CGI腳本,也不能自行啓動FastCGI腳本 - 它只能連接到已經運行的FastCGI進程。

如果您想運行CGI腳本,請使用支持它們的Web服務器,如Apache。雖然有一些解決方法,但他們會在這個階段混淆你。

+0

您可以詳細瞭解「它只能連接到已經運行的FastCGI進程」。我知道我可以使用不同的服務器,但我被告知使用NGINX,所以我想至少嘗試在其上運行CGI腳本。 – trynacode

+0

誰告訴你那是給你不好的建議。再說一遍:nginx不能運行CGI腳本。 – duskwuff

+0

對不起,FCGI *腳本。它能夠運行我瞭解的內容,對嗎? – trynacode