簡體   English   中英

在NGINX上運行CGI腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM