标签: php-fpm

Nginx + Php5-fpm 不渲染 php 文件

我花了几个小时弄清楚如何安装 Nginx + Ruby 企业版 + PHP5-fpm 和 MYSQL,最后都安装好了,一切似乎都开始正常了。

但由于某种原因,php 文件没有被处理。

.html 文件工作正常,但是当我尝试查看 .php 文件时,它看起来好像不存在,即使它确实存在。有趣的是,当我尝试查看一个不存在的 .html 文件时,我收到了一个很好的 Nginx 404 消息,但是当我查看一个 .php 文件时,它甚至没有给我。

所以我的新手理解,看起来配置有问题,或者 Nginx 和 PHP-fpm 没有相互交谈。

我一直在查看 nginx 配置文件的许多其他示例,我确信这方面没问题。好吧……无论如何,这是conf文件的相关部分:

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }
Run Code Online (Sandbox Code Playgroud)

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏。

编辑:以下是从测试 php 文件“ http://eman.id.au/test.php ”返回的标头:

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, …
Run Code Online (Sandbox Code Playgroud)

linux nginx php5 php-fpm

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

如何让 Nginx 将对不存在的文件的所有请求重定向到单个 php 文件?

我有以下 nginx vhost 配置:

server {
    listen 80 default_server;

    access_log /path/to/site/dir/logs/access.log;
    error_log /path/to/site/dir/logs/error.log;

    root /path/to/site/dir/webroot;
    index index.php index.html;

    try_files $uri /index.php;

    location ~ \.php$ {
            if (!-f $request_filename) {
                    return 404;
            }

            fastcgi_pass localhost:9000;
            fastcgi_param SCRIPT_FILENAME /path/to/site/dir/webroot$fastcgi_script_name;
            include /path/to/nginx/conf/fastcgi_params;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想重定向所有与 index.php 存在的文件不匹配的请求。这适用于目前大多数 URI,例如:

example.com/asd
example.com/asd/123/1.txt
Run Code Online (Sandbox Code Playgroud)

无论是中asdasd/123/1.txt存在,所以他们重定向到的index.php和工作正常。但是,如果我输入 url example.com/asd.php,它会尝试查找asd.php,当找不到时,它会返回 404 而不是将请求发送到index.php

有没有得到一个方式asd.php进行也发送到index.php如果asd.php不存在?

php nginx redirect php-fpm

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

带有 PHP FPM 的 Apache2 fcgid(不是 FastCGI)

Apache2 有一个内置的 fastcgi 替代品,称为 fcgid。这很好,但它缺少 FastCgiExternalServer 指令,我用来连接到 PHP-FPM。我怎样才能对 apache2 中的 fcgid 模块做同样的事情?

我的目标是将 php-fpm 与 apache2 一起使用(在 debian Squeeze 上)。

php-fpm apache-2.2

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

Nginx 忽略客户端的 HTTP 1.0 请求并通过 HTTP 1.1 响应

我正在测试使用nginx/php5-fpm, 与代码

<?php

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 
// also tested: header("Status: 404 Not Found");

echo $_SERVER["SERVER_PROTOCOL"];
Run Code Online (Sandbox Code Playgroud)

并强制在命令中使用HTTP 1.0curl

curl -0 -v 'http://www.example.com/test.php'


> GET /test.php HTTP/1.0

< HTTP/1.1 404 Not Found
< Server: nginx
< Date: Sat, 27 Oct 2012 08:51:27 GMT
< Content-Type: text/html
< Connection: close
< 
* Closing connection #0
HTTP/1.0
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我已经在请求使用HTTP 1.0,但是 nginx 回复我HTTP 1.1

赏金

@MaximDounin,@MichaelHampton 已经为规范提供了答案,谢谢。我正在为未来的读者扩展这个问题:

问:当客户端请求 HTTP 1.0 时,响应 HTTP 1.1 的优势是什么?谷歌采取的方法不应该更合理,即当客户端请求 1.0 时,用 1.0 …

php http nginx php-fpm

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

是否可以使用不同的池选项设置 PHP-FPM(启用 xdebug /禁用 xdebug)

我有一个 LEMP 环境,需要选择将所有开发子域与暂存区分开(使用 xdebug 暂存开发而不使用)。

  • dev.projectX.mydomain.tld
  • staging.projectX.mydomain.tld

因此我设置了两个池php-dev和php-stage,但似乎只能在php.ini中启用扩展!?

这是我的 pool.conf (dev)

[php-dev]
listen = 127.0.0.1:9101
listen = /var/run/php-fpm/a1-php-dev.socket
listen.backlog = -1
listen.allowed_clients = 127.0.0.1

user = nginx
group = nginx

request_slowlog_timeout = 3s
slowlog = /var/log/php-fpm/slowlog-php-dev.log

pm = dynamic
pm.max_children = 20
pm.start_servers = 10
pm.min_spare_servers = 4
pm.max_spare_servers = 16
pm.max_requests = 500
pm.status_path = /status

request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes

env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = …
Run Code Online (Sandbox Code Playgroud)

php-fpm xdebug pool

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

php5-fpm 的神秘错误

我在 Ubtuntu 12.04LTS 上使用最新的 php5-fpm(来自 debphp)和 nginx 1.4.3 遇到了非常困难的情况。

简而言之,我根本无法启动php5-fp,我一直在系统日志中收到此错误:

kernel: [1213013.564441] init: php5-fpm main process (7357) terminated with status 78
kernel: [1213013.564496] init: php5-fpm main process ended, respawning
..... (repeated several times)
kernel: [1213014.143911] init: php5-fpm respawning too fast, stopped
Run Code Online (Sandbox Code Playgroud)

我的/var/log/php5-fpm.log根本没有人口。没有php5-fpm.sockphp5-fpm.pid/run(或/var/run)。

我的/etc/php5/fpm/php-fpm.conf在下面:(这个文件现在似乎没有加载,因为我试图将一些虚假信息放入其中但没有引起任何更改)

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

include=/etc/php5/fpm/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Note: the default prefix is …
Run Code Online (Sandbox Code Playgroud)

nginx php-fpm ubuntu-12.04

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

`No input file specified.`的真正解决方案(nginx,fpm)

这个问题的大多数答案是,设置 fastcgi_param SCRIPT_FILENAME 并且它会起作用(斜体格式被破坏了?!)。

我已经设置了这个变量(正确)但它仍然显示错误而不是 404 页面,因为问题的根源在这里:

location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
Run Code Online (Sandbox Code Playgroud)

一个不存在的路径被传递给 php5-fpm,这反过来打印错误,在日志中看起来像:

FastCGI sent in stderr:
"Unable to open primary script: ... (No such file or directory)"
while reading response header from upstream
Run Code Online (Sandbox Code Playgroud)

所以在该行之前fastcgi_pass 必须有一个条件来检查文件是否真的存在,或者,如果fpm worker返回“file not found”,引导nginx返回404页面。

我怎样才能做到这一点?

nginx fastcgi php-fpm http-status-code-404

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

使用 Nginx 和 PHP-FPM 后,请求永远不会在 pm.max_children 之后排队

一旦池达到 pm.max_children,Nginx 就会在尝试向 PHP-FPM 发送新请求时开始超时。“最大侦听队列”在 php-status 页面中始终为 0。

  • PHP-FPM 5.5.16
  • nginx 1.6.1

以下是 php-fpm 池的示例:

[example]

catch_workers_output = no

; Configure listener
listen = /var/run/php-fpm/example.sock
listen.backlog = 65535
listen.owner = nginx
listen.group = nginx

; Unix user/group of processes
user = nginx
group = nginx

; Choose how the process manager will control the number of child processes.
pm = ondemand
pm.max_children = 10
pm.max_requests = 200
pm.process_idle_timeout = 30s
pm.status_path = /status

; Pass environment variables
env[HOSTNAME] = $HOSTNAME …
Run Code Online (Sandbox Code Playgroud)

php nginx php-fpm max-requests pool

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

正确理解 pm.max_children 调优

我做了一些调查,发现这个可以计算和调整pm.max_children

https://myshell.co.uk/blog/2012/07/adjusting-child-processes-for-php-fpm-nginx/

但例如:

  • 我的服务器上有 8Gb
  • 我正在托管 30 个网站
  • php-fpm 平均进程大小约为 40mb
  • php-fpm 最大进程大小约为 80mb
  • 我想为 php-fpm 进程分配最大 5Gb 的内存

如果我应用这个:

pm.max_children = 专用于 Web 服务器的总 RAM / 最大子进程大小

所以在我的情况下:

pm.max_children = 5120 / 80 = 64

但是如果我在每个 php-fpm 网站 conf 文件上添加pm.max_children = 64,这意味着每个网站都可以使用64个子进程X 1 个进程的大小(例如40mb)= 2560Mb

如果我们想象,同时所有 30 个网站都达到了 pm.max_children 值,我们将有:2560Mb(每个网站的最大值)x 30 个网站 = 76 800 Mb

我对么?

Si 是的,这意味着当许多网站托管在同一台服务器上时,我们必须将计算结果pm.max_children = 5120 / 80 = …

memory nginx web-server php-fpm php7

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

太多打开的文件 (CentOS7) - 已经尝试设置更高的限制

第一次设置 VPS——注意不要在这里问,除非我做了尽职调查并提供了上下文。

在我的远程 VPS 上,通过终端,我运行的几乎所有命令都以一条Error: Too many open files消息结束,我需要您的帮助才能继续前进。

CentOS Linux release 7.6.1810 (Core)在一台有 1 个 CPU 内核和 2048Mb RAM 的机器上运行。它已经设置了一个Nginx 1.16.1, PHP-FPM 7.3.9, MariaDb 10.4.8用于简单 wordpress 站点的 LEMP 堆栈。

我试过了:

  1. 谷歌和论坛搜索。
  2. 应用这些设置(每次都通过控制面板手动重启 VPS):

中的系统范围设置/etc/security/limits.conf

nginx       soft    nofile      1024
nginx       hard    nofile      65536
root        hard    nofile      65536
root        soft    nofile      1024
Run Code Online (Sandbox Code Playgroud)

调整内存限制和上传/etc/php.ini

memory_limit = 256M
file_uploads = On
upload_max_filesize = 128M
max_execution_time = 600
max_input_time = 600
max_input_vars = 3000 …
Run Code Online (Sandbox Code Playgroud)

linux nginx centos php-fpm

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