标签: fastcgi

尝试运行Django应用程序时出现WSGIServer错误

首先,这是我的脚本:

#!/usr/bin/python
import sys, os

sys.path.append('/home/username/python')
sys.path.append("/home/username/python/flup")
sys.path.append("/home/username/python/django")
# more path stuff

os.environ['DJANGO_SETTINGS_MODULE'] = "project.settings"

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
Run Code Online (Sandbox Code Playgroud)

正如所描述这里.

这是我尝试从shell运行它时得到的错误:

WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 404 NOT FOUND
Content-Type: text/html


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<!-- more html which looks to be …
Run Code Online (Sandbox Code Playgroud)

django fastcgi wsgiserver

8
推荐指数
1
解决办法
1万
查看次数

多线程FastCGI应用程序

我想编写一个FastCGI应用程序,它应该使用线程处理多个同时请求.我看一下SDK附带的threaded.c示例:

#define THREAD_COUNT 20
static int counts[THREAD_COUNT];

static void *doit(void *a)
{
    int rc, i, thread_id = (int)a;
    pid_t pid = getpid();
    FCGX_Request request;
    char *server_name;

    FCGX_InitRequest(&request, 0, 0);

    for (;;)
    {
        static pthread_mutex_t accept_mutex = PTHREAD_MUTEX_INITIALIZER;
        static pthread_mutex_t counts_mutex = PTHREAD_MUTEX_INITIALIZER;

        /* Some platforms require accept() serialization, some don't.. */
        pthread_mutex_lock(&accept_mutex);
        rc = FCGX_Accept_r(&request);
        pthread_mutex_unlock(&accept_mutex);

        if (rc < 0)
            break;

        server_name = FCGX_GetParam("SERVER_NAME", request.envp);

        FCGX_FPrintF(request.out,…
        …     

        FCGX_Finish_r(&request);
    }

    return NULL;
}

int main(void)
{
    int i;
    pthread_t …
Run Code Online (Sandbox Code Playgroud)

multithreading cgi fastcgi

8
推荐指数
1
解决办法
1万
查看次数

测试X-Sendfile头是否正常工作

我正在寻找一种方法来确认X-Sendfile是否正确处理由脚本(PHP)返回给Web服务器的请求.图像正在正确提供,但我想我会在curl请求中看到标题.

$ curl -I http://blog2.stageserver.net/wp-includes/ms-files.php?file=/2011/05/amos-lee-feature.jpg
HTTP/1.1 200 OK
Date: Wed, 04 Jan 2012 17:19:45 GMT
Server: Cherokee/1.2.100 (Arch Linux)
ETag: "4dd2e306=9da0"
Last-Modified: Tue, 17 May 2011 21:05:10 GMT
Content-Type: image/jpeg
Content-Length: 40352
X-Powered-By: PHP/5.3.8
Content-Disposition: inline; filename="amos-lee-feature.jpg"
Run Code Online (Sandbox Code Playgroud)

组态

在FastCGI中使用PHP-FPM 5.3.8的Cherokee 1.2.100 :(
cherokee.conf: vserver!20!rule!500!handler!xsendfile = 1
由vServer> Behavior> Extensions设置php> Handler:允许X-Sendfile [check Enabled])

Wordpress网络/ WPMU 3.3.1:
define('WPMU_SENDFILE',true);在包含wp-config.php之前设置如下wp-settings.php.这将触发以下代码在WP的wp-includes/ms-files.php中执行:50为特定博客提供文件:

header( 'X-Sendfile: ' . $file );
exit;
Run Code Online (Sandbox Code Playgroud)

我已经确认上面的代码片段正在通过在exit();调用之前添加一个用于处置的附加标头来执行.Content-Disposition与curl结果一起出现,而不是最初在ms-files.php代码中.添加的代码是:
header('Content-Disposition: inline; filename="'.basename($file).'"');


研究

我有: …

php wordpress fastcgi x-sendfile cherokee

8
推荐指数
1
解决办法
4909
查看次数

Nginx + phpFPM:PATH_INFO总是空的

我在Debian上配置了nginx stable(1.4.4)+ PHP(使用FastCGI,php-fpm).这工作正常:

     location ~* ^/~(.+?)(/.*\.php)$ {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        alias /home/$1/public_html$2;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_index index.php;
        autoindex on;
     }
Run Code Online (Sandbox Code Playgroud)

我使用PATH_INFO变量,因此我将以下行添加到fastcgi_params:

fastcgi_param   PATH_INFO       $fastcgi_path_info;
Run Code Online (Sandbox Code Playgroud)

在/etc/php5/fpm/php.ini中:

cgi.fix_pathinfo = 0
Run Code Online (Sandbox Code Playgroud)

我认为这应该有效,但是当我打印出所有服务器变量时,PATH_INFO始终为空:

    array (
  'USER' => 'www-data',
  'HOME' => '/var/www',
  'FCGI_ROLE' => 'RESPONDER',
  'QUERY_STRING' => '',
  'REQUEST_METHOD' => 'GET',
  'CONTENT_TYPE' => '',
  'CONTENT_LENGTH' => '',
  'SCRIPT_FILENAME' => '/usr/share/nginx/html/srv_var.php',
  'SCRIPT_NAME' => '/srv_var.php',
  'PATH_INFO' => '',
  'REQUEST_URI' => '/srv_var.php',
  'DOCUMENT_URI' => '/srv_var.php',
  'DOCUMENT_ROOT' => '/usr/share/nginx/html',
  'SERVER_PROTOCOL' => 'HTTP/1.1',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'SERVER_SOFTWARE' …
Run Code Online (Sandbox Code Playgroud)

php fastcgi nginx

8
推荐指数
4
解决办法
1万
查看次数

在Windows上使用FastCgiModule设置Python和Flask时出现500内部服务器错误

有人能用IIS设置Python吗?一直试图弄清楚,但它不起作用,这让我发疯.我看到很多例子,但我无法让它发挥作用.


这是我的设置


  • Windows 2008R2
  • IIS 7.5(7.5.7600.16385)
  • wfastcgi.py(2.2.0)
  • 烧瓶(0.10.1)
  • Python(3.5.1)

Python + Flask网络应用程序的路径

C:\inetpub\wwwroot
Run Code Online (Sandbox Code Playgroud)

以下是我遵循的步骤:

  1. 确保已安装CGI窗口功能.
  2. 在IIS管理器中,突出显示的Web服务器和FastCGI设置中添加了一个具有以下值的应用程序:

    Full Path: C:\python35\python.exe
    
    Arguments: C:\inetpub\wwwroot\wfastcgi.py
    
    Environment Variable Collection:
    
      PYTHONPATH: C:\inetpub\wwwroot\
      WSGI_HANDLER: app.app
      WSGI_LOG: C:\logs\app.txt
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建了一个名为MyWebSite的网站,指向C:\ inetpub\wwwroot

  4. 在网站的处理程序映射设置中,为FastCgiModule添加了一个模块映射:

    Request path: *
    Module: FastCgiModule
    Executable: C:\python35\python.exe|C:\inetpub\wwwroot\wfastcgi.py
    Name: FlaskHandler
    
    Run Code Online (Sandbox Code Playgroud)

使用Flask的简单Python应用程序在网络上找到并添加到Web根文件夹.所以在C:\ inetpub\wwww只有3个文件:app.py,web.configwfastcgi.py

web.config中

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appSettings>
        <add key="PYTHONPATH" value="" />
        <add key="WSGI_HANDLER" value="app.app" />
        <add key="WSGI_RESTART_FILE_REGEX" value="(?i).*\.(py|cnf|config)$" />
    </appSettings>
    <system.webServer>
        <handlers>
            <add name="FlaskHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\python35\python.exe|C:\inetpub\wwwroot\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
        </handlers> …
Run Code Online (Sandbox Code Playgroud)

python iis fastcgi flask

8
推荐指数
1
解决办法
1万
查看次数

Apache FastCGI PHP中FastCgiExternalServer和FastCgiServer的区别?

请允许我声明我是FastCGI的新手.我的OS X机器上有MAMP的Apache.默认的PHP处理程序是Apache Handler 2.0(libphp5.so).我想改变FastCGI并遵循这里的答案:如何配置Apache在Ubuntu 12.04上通过终端运行PHP作为FastCGI?

我在httpd.conf的末尾添加了以下内容:

<IfModule mod_fastcgi.c>
   AddHandler php5.fcgi .php
   Action php5.fcgi /php5.fcgi
   Alias /php5.fcgi /Applications/MAMP/fcgi-bin/php5.fcgi
   FastCgiServer /Applications/MAMP/fcgi-bin/php5.fcgi -socket /Applications/MAMP/tmp/php-fcgi/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
   #FastCgiExternalServer /Applications/MAMP/fcgi-bin/php5.fcgi -socket /Applications/MAMP/tmp/php-fcgi/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
   <Directory /Applications/MAMP/fcgi-bin>
       Order allow,deny
         Allow from all
   </Directory> 
</IfModule>
Run Code Online (Sandbox Code Playgroud)

但是,正如您所看到的,FastCgiExternalServer已被注释掉.相反,我不得不使用FastCgiServer原因,否则Apache在尝试请求页面时会给我以下错误:

[星期五06月23日23:25:22] [错误] [客户端:: 1](2)没有这样的文件或目录:FastCGI:无法连接到服务器"/Applications/MAMP/fcgi-bin/php5.fcgi" : 连接失败

[星期五06月23日23:25:22 2016] [错误] [client :: 1] FastCGI:从服务器"/Applications/MAMP/fcgi-bin/php5.fcgi"收到的不完整标题(0字节)

/Applications/MAMP/fcgi-bin/php5.fcgi存在且其内容是:

#!/bin/bash
PHP_CGI=/Applications/MAMP/bin/php/php5.6.2/bin/php-cgi
exec $PHP_CGI
Run Code Online (Sandbox Code Playgroud)

什么之间的区别FastCgiServerFastCgiExternalServer,为什么FastCgiExternalServer在我的情况没有工作,但FastCgiServer …

php apache fastcgi mod-fastcgi

8
推荐指数
1
解决办法
7113
查看次数

"待处理信号的最大数量(120)超过"是什么意思?

在Apache mod_fastcgi下运行的My Perl web-app经常会出现如下错误:

在线119处超过未决信号(120)的最大计数.

我已经看到这与文件上传有关,但我不确定这是唯一的时间.我在得到错误之前(或可能在之后)也得到了一个SIGPIPE.

有什么想法吗?

编辑 感谢大家的建议.有人问119行是什么.对不起,应该把它放进去.它是在一段代码中,我在上传的文件上运行病毒检查程序.我不是每次都会得到错误,只是偶尔.

if(open VIRUS_CK, '|/usr/local/bin/clamscan - --no-summary >'.$tmp_file) {

  print VIRUS_CK $data; // THIS IS LINE 119

  close VIRUS_CK;

  if (($? >> 8) == 1) {

    open VIRUS_OUTPUT, '<'.$tmp_file;
    my $vout = <VIRUS_OUTPUT>;
    close VIRUS_OUTPUT;
    $vout =~ s/^stdin:\s//;
    $vout =~ s/FOUND$//;


    print STDERR "virus found on upload: $vout\n";
    return undef, 'could not accept attachment, virus found: '.$vout;
  }
  unlink($tmp_file);
}
Run Code Online (Sandbox Code Playgroud)

perl fastcgi mod-fastcgi

7
推荐指数
1
解决办法
1489
查看次数

PHP:在服务器强制执行时间限制时编写长时间运行的脚本

例如,FastCGI服务器对PHP脚本施加了执行时间限制,这些限制在PHP中无法使用set_time_limit().IIS我也相信这样做.

我为一个PHP应用程序编写了一个导入脚本,该应用程序在mod_php下运行良好,但在FastCGI(mod_fcgid)下失败,因为脚本在一定的秒数后被杀死.我还不知道在这种情况下检测你的时间限制的方法,还没有决定我将如何绕过它.使用重定向以小块方式执行它看起来像一个kludge,但如何?

在编写长时间运行的任务(例如导入或导出任务)时,您将使用哪些技术,其中单个PHP脚本可能在一定秒数后被服务器终止?

请假设您正在创建一个可移植脚本,因此您不一定知道PHP最终是在mod_php,FastCGI还是IIS下运行,还是在服务器级别强制执行最长执行时间.这可能也排除了shell脚本等.

php portability fastcgi execution-time

7
推荐指数
1
解决办法
2914
查看次数

为什么Web框架通过FastCGI/SCGI而不是HTTP服务?

主要的Web框架(例如Django,Pyramid,Rails等)通常作为持久性服务器运行,并使用像nginx这样的单独Web服务器作为前端.Web服务器通过FastCGI或SCGI等协议连接:

browser --[http]--> nginx --[fastcgi]--> flup -> django
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很复杂; 当后端可以运行自己的HTTP服务器时,为什么请求转换为完全不同的协议?

browser --[http]--> nginx --[http]--> wsgiref -> django
Run Code Online (Sandbox Code Playgroud)

这种方法似乎既简单又灵活,因为只有一种传输协议,它是一种RFC.

但是,我认为我从未见过一个Web框架鼓励纯http设计,所以我认为必须有一个理由.

在这里使用像FastCGI/SCGI这样的协议有什么好处?

django fastcgi http scgi

7
推荐指数
1
解决办法
803
查看次数

如何配置Munin-2.0.x在Fedora上用CGI(仅)生成内容?

我有一个400+节点munin-1.4.x安装,我想升级到munin-2.x,以利用munin主服务器上基于CGI的内容生成(html和图形).我已经浏览了官方的dox(http://munin-monitoring.org/wiki/CgiHowto2),它根本就没用了.它只涵盖VirtualHost(http://munin.example.com),这不是我的设置,但我试图用它作为起点.

具体来说,我希望http://example.com/munin成为动态生成列出所有节点的html内容的基本URL,其中包含指向各个节点页面的链接(然后在单击时动态生成/更新) .增加的问题是我在Fedora上做了这个(16),而我发现的绝大多数的howto都假设Debian/Ubuntu(或假设通过cron生成非cgi静态内容).

官方的Fedora munin软件包安装如下:

  • munin基目录是/ var/www/html/munin
  • munin静态内容direcotry是/ var/www/html/munin/static
  • munin cgi脚本(munin-cg-graph&munin-cg-html)位于/ var/www/html/munin/cgi

到目前为止我做了什么:*在/etc/munin/munin.conf中设置"html_strategy cgi"和"cgiurl_graph/munin/cgi/munin-cgi-html"*在/ etc/httpd/conf/httpd中添加了以下内容.conf文件:

# Rewrites
RewriteEngine On
Alias /static /var/www/html/munin/static
Alias /munin /var/www/html/munin
# HTML
RewriteCond %{REQUEST_URI} !^/static
RewriteCond %{REQUEST_URI} .html$ [or]
RewriteCond %{REQUEST_URI} =/
RewriteRule ^/(.*)           /var/www/html/munin/cgi/munin-cgi-html/$1 [L]
# Images
# - remove path to munin-cgi-graph, if present
RewriteRule ^/munin/cgi/munin-cgi-graph/(.*) /$1
RewriteCond %{REQUEST_URI}                 !^/static
RewriteCond %{REQUEST_URI}                 .png$
RewriteRule ^/(.*)  /var/www/html/munin/cgi/munin-cgi-graph/$1 [L]
ScriptAlias /munin/cgi/munin-cgi-graph   /var/www/html/munin/cgi/munin-cgi-graph
<Location /munin/cgi/munin-cgi-graph>
        Options +ExecCGI FollowSymLinks
        <IfModule mod_fcgid.c> …
Run Code Online (Sandbox Code Playgroud)

apache fastcgi fedora apache2 munin

7
推荐指数
1
解决办法
7614
查看次数