[英]Running CGI scripts on NGINX
我知道已經問過這個問題,但是沒有一個明確的答案( 如何在Nginx上運行CGI腳本 )對我有幫助。 就我而言,我已經使用源代碼安裝了NGINX,並修復了.config文件,以便可以使用FASTCGI成功讀取.php文件。 但是,在運行CGI腳本時,我遇到了很多問題。 我知道我已經安裝並設置了FAST CGI,所以我應該將這些.cgi文件命名為.fcgi嗎? 還是我應該為.cgi文件添加某種方式,以使其知道它可以與FAST CGI一起使用? 我試圖繞開nginf.conf文件以包含.fcgi,現在看起來像這樣:
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>";
我看到一個看起來像這樣的屏幕:
我敢肯定這是不正常的。 我應該只是看到Hello, world.
在我的屏幕上,不是所有的代碼也是如此。 請讓我知道我的想法是否確實錯誤,這應該是正確的輸出。
此外,如果我將其作為files.fcgi
文件,請注意:
#!/usr/bin/perl
my $output = `ls`;
print $output
運行類似的操作會返回.fcgi文件所在目錄中所有文件的列表。無論如何,我可以在Web瀏覽器上顯示此文件嗎? 在線查看示例,似乎人們已經能夠在他們的瀏覽器上運行file.fcgi
並查看shell命令的輸出(這使我相信我做錯了,因為當我在命令上運行它時,行中列出了所有文件,但是在瀏覽器上,它只是打印出我的代碼)。 假設我做錯了什么,誰知道我可能做錯了什么。 如果您需要更多信息,請告訴我!
謝謝你,有一個美好的一天!
nginx不支持CGI腳本,也不能單獨啟動FastCGI腳本-它只能連接到已經在運行的FastCGI進程。
如果要運行CGI腳本,請使用支持它們的Web服務器,例如Apache。 盡管有一些解決方法,但在此階段它們只會使您感到困惑。
搜索“ fastcgi包裝器”以找到各種程序,這些程序旨在彌合不喜歡產生請求處理過程的“現代” Web服務器與傳統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 vars調用您的程序來描述該請求,並使用stdin上的主體(如果有)調用您的程序,並且您的程序應在stdout並退出時發出響應”,fcgi API希望您的程序能夠持續運行並處理套接字上傳遞給它的請求-這樣,它實際上更像是服務器。 參見http://en.wikipedia.org/wiki/FastCGI
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.