标签: fastcgi

Nginx 可以处理别名内的 php(或类似的 fcgi)请求吗?

我正在将旧的 Apache 服务器转换为 Nginx,并且没有更改 URL 或重新排列文件系统的奢侈。

是否可以在 Nginx 配置中使用嵌套的 location{} 块来告诉它在正常提供静态内容的同时将别名目录中的 .php 文件提供给 fastcgi?

与我失败的类似配置:

server {
  listen 80;

  location / {
    index  index.html;
  }

  location /foosite/ {
    alias  /var/aliases/foo;
    location ~ \.php$ {
      include fastcgi_params;
      fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

对 /foosite/static.jpg 的请求可以很好地提供服务,但是 nginx 在尝试将它们分派到 fastcgi 时似乎会混淆任何 .php 文件的路径。

php nginx fastcgi

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

FastCGI 启动器

我需要从 nginx提供一些 FCGI 脚本(通过WSAPI,但这无关紧要)。

目前我正在使用spawn_fcgi来做到这一点。这是我找到的唯一解决方案。

我需要知道我的其他选择。在nginx下有没有其他方式可以运行FastCGI?

linux nginx fastcgi spawn-fcgi

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

在 Nginx 配置中为 fastcgi_buffers 设置值的任何指南?

我刚刚将我们的博客网络移至由 WPMU 提供支持的 ngnix(来自 apache)。一切都在顺利进行。

在我寻求将服务器优化到最大级别的过程中 - 我在 nginx 论坛http://forum.nginx.org/read.php?2,2649上遇到了这个线程

我真的很想知道:回答原来的问题......

例如,为防止在提供 6144 KB 文件时出现警告,三种方法中哪一种会产生最佳性能?

  1. 大量小缓冲区:fastcgi_buffers 768 8k
  2. 少量大缓冲区:fastcgi_buffers 8 768k
  3. 缓冲区和大小之间的接近平衡:fastcgi_buffers 64 96k

还有一件事:在我的 ngnix.config - 我的设置是:

fastcgi_buffers 64 4k;

即 256K 缓冲区大小(我在 32 位平台上)。这是否意味着如果我的 PHP 脚本生成的响应大于 256K,nginx 会抛出一些错误?

我知道 ngnix 论坛似乎是问这个问题的更好的地方,但由于没有哪个 ngnix 论坛比 serverfault 更活跃,我在这里发布这个问题。

我希望我能从这里的专家那里得到一些意见/指导。

谢谢,

-拉胡尔

php optimization configuration nginx fastcgi

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

FastCGI 和 Apache 500 间歇性错误

我有一个 FastCGI (mod_fastcgi) 问题。它每隔一段时间就会发生一次,并且不会导致服务器完全崩溃,只会出现 500 个错误。这里有几件事。首先我使用 APC,所以 PHP 可以控制它自己的进程,而不是 FastCGI。另外,我将 webroot 设置为:

/var/www/html
Run Code Online (Sandbox Code Playgroud)

还有里面的 fcgi-bin:

/var/www/html/fcgi-bin
Run Code Online (Sandbox Code Playgroud)

首先是 apache error_log:

[Fri Jan 07 10:22:39 2011] [error] [client 50.16.222.82] (4)Interrupted system call: FastCGI: comm with server "/var/www/html/fcgi-bin/php.fcgi" aborted: select() failed, referer: http://www.domain.com/
Run Code Online (Sandbox Code Playgroud)

我还在“fcgi-pm”过程中运行了 strace。这是它爆炸时的跟踪片段:

21725 gettimeofday({1294420603, 14360}, NULL) = 0
21725 read(14, "C /var/www/html/fcgi-bin/php.fcgi - - 6503 38*", 16384) = 46
21725 alarm(131)                        = 0
21725 select(15, [14], NULL, NULL, NULL) = 1 (in [14])
21725 alarm(0)                          = 131
21725 gettimeofday({1294420603, 96595}, …
Run Code Online (Sandbox Code Playgroud)

php fastcgi 500 mod-fastcgi apache-2.2

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

如何配置 nginx+php (fcgi) 以使用不同的用户运行每个子域?

我对 nginx 很陌生,而且 - 更多用于学习目的 - 我试图配置 Nginx,以便为每个子域使用不同的用户运行 php。

例如,我想将用户john用于所有脚本foo.example.com,用户jack用于bar.example.com.

我已经在我的系统(ubuntu 服务器)上创建了用户,但我不知道如何指示 nginx 使用这些用户 - 我正在寻找一种可以轻松处理许多用户的解决方案,比如 ~2000。

查看文档,我不明白是否必须php5-cgi为每个用户(使用不同的端口)生成一个进程,然后将它们抓取到我的sites-available站点中(正如我所说的我是新手,但这在我看来就像服务器自杀),并且 nginx 配置中仅有的 2 页讨论了这个……是用中文写的(page1 , page2),很难用 google translate 翻译(但是,查看代码,使用的方式完全不同server-suicide

有什么建议吗?

更新

galador 的回答可以完成这项工作,但我正在尝试构建一个不需要为每个新站点重新启动 nginx/fpm 的 dinamycal 环境(带有通配符子域),这可能吗?

php nginx user-management fastcgi

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

让 PHP-FPM 监听“IPAddress:Port”而不是“/var/run/php5-fpm.sock;”

当我今天对我的网站进行负载测试时(使用blitz.io);尽管有大量 RAM(超过 50%)和 CPU 能力(超过 70%)可用,但结果显示我的网站在每秒达到一定数量的并发用户时开始超时。

我的网站的 Nginx 错误日志 (/var/log/nginx/example.com.error.log) 显示如下内容:

2013/02/12 19:03:57 [错误] 13749#0: *3175 connect() 到 unix:/var/run/php5-fpm.sock 在连接到上游时失败(11:资源暂时不可用),客户端: 54.123.456.46,服务器:example.com,请求:“GET / HTTP/1.1”,上游:“fastcgi://unix:/var/run/php5-fpm.sock:”,主机:“example.com”

谷歌搜索错误让我找到了这个答案,它指出使用 TCP\IP 连接而不是 unix 套接字作为问题的解决方案;因为unix套接字的“高负载情况下的问题是众所周知的”

因此,正如答案所建议的:

  • 我在 /etc/php5/fpm/pool.d/www.conf 中替换listen = /var/run/php5-fpm.socklisten 127.0.0.1:9000

  • 由于我的发行版(Debian Wheezy)上没有/etc/nginx/php_location,所以我没有采取任何措施。

  • fastcgi_pass unix:/var/run/php5-fpm.sock;由于我在站点的 Nginx 配置文件中使用,即 /etc/nginx/sites-available/example.com,因此我将其替换为fastcgi_pass 127.0.0.1:9000;

现在的问题是,当我502 Bad Gateway访问我的网站时出现错误。是的,我做了reloadNginx 和 PHP-FPM。我究竟做错了什么?(这里完全是新手,尽我最大努力边做边学。)

如果这是相关的,当我这样做时sudo service php5-fpm restart,我会收到此错误:

[FAIL] Restarting PHP5 FastCGI Process Manager: php5-fpm failed!
Run Code Online (Sandbox Code Playgroud)

这只是在我做出上述更改后才发生的。我怎样才能解决这个问题? …

php nginx fastcgi php-fpm debian-wheezy

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

两个独立的 PHP-FPM 站点似乎使用相同的代码?

我有两个带有两个代码库的网站,但是当我更改一个代码库时,我会看到两者都发生了变化。

我有两个同一个网站的结帐。它们被设置为通过带有 FastCGI 的 Apache2 使用 PHP-FPM。结帐在:

/var/www/site1
/var/www/site2
Run Code Online (Sandbox Code Playgroud)

Apache 配置如下所示:

<VirtualHost *:80>
    ServerName site1.myserver.com
    DocumentRoot /var/www/site1
    <IfModule mod_fastcgi.c>
        AddHandler php5-fcgi-handler .php
        Action php5-fcgi-handler /php5-fcgi-uri
        Alias /php5-fcgi-uri fcgi-application
        FastCgiExternalServer fcgi-application -socket /var/run/site1-fpm.sock -pass-header Authorization -idle-timeout 30000 -flush
    </IfModule>
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.myserver.com
    DocumentRoot /var/www/site2
    <IfModule mod_fastcgi.c>
        AddHandler php5-fcgi-handler .php
        Action php5-fcgi-handler /php5-fcgi-uri
        Alias /php5-fcgi-uri fcgi-application
        FastCgiExternalServer fcgi-application -socket /var/run/site2-fpm.sock -pass-header Authorization -idle-timeout 30000 -flush
    </IfModule>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

FPM 池配置如下所示:

[site1]
user = site1-user
group = site1-group
listen = /var/run/site1-fpm.sock
listen.owner …
Run Code Online (Sandbox Code Playgroud)

cache fastcgi php-fpm opcode apache-2.4

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

nginx:带有 fastcgi 的多个文档根

在我的 http 指令中使用单个文档根目录时,一切正常。但是,我想添加一个带有附加指令的位置指令,但我无法让 fastcgi 与这个附加的根一起工作(访问http://localhost/sqlbuddy时我收到一个白页)。

这是我的 nginx.conf 的摘录:

server {

root /home/tman/dev/project/trunk/data;
index index.php;

location /sqlbuddy {
    root /srv/http;
    index index.php;
}

location ~* \.php {
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi.conf;
}
}
Run Code Online (Sandbox Code Playgroud)

还有我的 fastcgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param …
Run Code Online (Sandbox Code Playgroud)

linux nginx httpd fastcgi

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

Ubuntu Linode 上 Nginx 的 PHP 错误(通过 FastCGI)

我使用以下指南在 Linode 的 Ubuntu 10.04 服务器上设置了 LEMP(Linux、Nginx、MySQL 和 PHP):http : //library.linode.com/lemp-guides/ubuntu-10.04-lucid

从本质上讲,我上传了我的PHP脚本到一个目录(/srv/www/mysite.com/public_html)中指定/etc/nginx/sites-available/mysite.com.conf

在浏览器中访问该站点给我一个 500 内部服务器错误。我假设 PHP 代码有一些错误,这很好。但是,我完全不知道如何调试它,因为有几个组件:PHP、FastCGI 和 Nginx。

我的问题是,如何让这些错误显示在浏览器中,或者至少显示在日志中,以便我可以弄清楚发生了什么?我不确定是否需要告诉 Nginx 在某处记录错误,或者 FastCGI,或者编辑 php.ini。

我对服务器有完全的 root 访问权限来解决这个问题。但是,我不确定如何重新启动 PHP/FastCGI(虽然我知道如何重新启动 Nginx),因为我遵循的指南使用了某种守护进程。

非常感谢你能给我的任何帮助。

linux ubuntu php nginx fastcgi

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

Nginx 是否在响应中显示 X-Accel 标头?

我尝试通过设置标头来禁用快速 CGI 缓冲X-Accel-Buffering: no,但在 Nginx 响应中没有看到此标头。是设计使然还是我的 Nginx 配置有问题?我没有fastcgi_ignore_headers指令。

nginx fastcgi

3
推荐指数
1
解决办法
4276
查看次数