我看到一个奇怪的问题,php.ini如果我php-fpm在启动它时没有明确地将它传递给它,则不会使用它。
这是我正在使用的新贵脚本:
start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [016]
pre-start script
mkdir -p /run/php
end script
expect fork
respawn
exec /usr/local/php/sbin/php-fpm --fpm-config /etc/php/php-fpm.conf
Run Code Online (Sandbox Code Playgroud)
如果 PHP 以上述开头,php.ini则永远不会使用my ,即使它在Configuration File (php.ini) Path.
这是来自phpinfo()以下内容的相关部分:
Configuration File (php.ini) Path /etc/php/
Loaded Configuration File (none)
Scan this dir for additional .ini files (none)
Additional .ini files parsed (none)
Run Code Online (Sandbox Code Playgroud)
如果我修改 upstart 脚本的最后一行php-fpm以 php.ini明确指向:
exec /usr/local/php/sbin/php-fpm --fpm-config /etc/php/php-fpm.conf -c /etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)
然后我们看到 …
使用 apache+php_mod 就像放置一样简单:
php_value memory_limit 128M
Run Code Online (Sandbox Code Playgroud)
进入应用程序虚拟主机。
我怎样才能为 nginx+php-fpm 做这样的事情?
请帮我调整我的 php5-fpm 和 nginx 配置。
问题是我的 php5-fpm 日志不断报告缓慢的脚本并杀死一个子线程。
专用服务器,四核至强,32Gb 内存。1 个 php 应用程序/站点正在运行。
Php 应用程序:坚果壳,搜索引擎,结果触发 curl 请求。每次搜索页面加载时间通常为 2 - 3 秒。
这是我认为正在发生的事情:
我有 750 个并发 php 用户在执行搜索。pm.max_children = 400由于 RAM 限制,我只能设置。我假设每个用户(子线程)有 50Mb,所以 = 20GB。我假设每个用户 = 1 个子线程。因此,pm.max_children这不足以涵盖 750 个需要 3 秒进行搜索的活跃 php 用户。
所以我想我看到用户排队是因为我看到 3 秒变成了 4 - 7 秒。当用户排队时,我认为脚本越来越慢会触发错误日志消息,而 php5-fpm pm 会杀死孩子吗?
这就是我认为正在发生的事情。我在下面提供了我的错误日志输出、nginx、php5-fpm 配置。
如果我可以调整我的配置,并且确实pm.max_children应该至少等于您的最大并发用户数,我真的很感激任何建议,请记住,我的 php 搜索打开了大约 3 秒。我需要更多的内存还是额外的服务器?
这是我的记忆,但我在大约 30 分钟前才重新启动了 nginx
:/var/log# free -m
total used free shared buffers cached …Run Code Online (Sandbox Code Playgroud) 我在 1GB 单核 VPS 上运行带有 Nginx 1.5.1 和 PHP-FPM (PHP 5.3.26) 的 Drupal 6,在 SSD 存储上有 3GB 的交换空间。我刚刚从共享主机切换到这个非托管 VPS,因为我的网站变得太重了,所以我仍在学习绳索。我有中等高的流量,我并没有真正密切监控它,但 Google Adsense 通常每天记录接近 30K 的页面浏览量。我通常有 50 到 80 个经过身份验证的用户登录,还有几百个匿名用户在任何给定时刻访问 Boost 静态 HTML 缓存。我最多配置了 10 个 PHP-FPM 子进程。我正在使用“按需”PHP-FPM 流程管理器。
我偶尔会遇到一个很难调试的错误,因为它似乎是随机的。在用户有意发布的大约 30 个帖子中,其中 1 个被复制。我是这样配置的,第一次点击后post按钮就被禁用了,所以不是双击的结果。事实上,当我发帖时,它甚至发生在我身上。双柱会在几秒钟内发生。我检查了日志文件,重复的帖子似乎总是对应于 nginx POST 错误:recv() failed (104: Connection reset by peer) while reading response header from upstream。而这个事件似乎与 index.php 的执行超时错误和 PHP-FPM 工作进程的后续 SIGTERM 的 PHP-FPM 错误有关。
以下是nginx访问和错误日志以及 PHP-FPM 错误日志:
nginx_acess.log 文件:
1.2.3.4 - - [02/Jul/2013:12:34:34 -0500] "POST …Run Code Online (Sandbox Code Playgroud) 我无法在本地开发机器上执行 PHP 文件。我似乎已经成功安装了nginx并且php-fpm似乎也已正确安装,并且正在运行,但无法弄清楚为什么 PHP 文件被下载而不是被执行。
在经历了很多很多小时的挫折之后,我认为最好问问以前可能做过这件事的人!我已尽力提供所有信息,但如果有任何可能有用或我遗漏的信息,请随时在评论中提问。
请注意:请仔细阅读我遇到的问题。我之所以这么说是因为我已经通读了几乎所有与 Google 可以提供给我的与此问题相关的文章,并尝试了几种不同的方法、修复、建议、重新安装、配置等。但每个人都无法提供帮助修复甚至调试我遇到的问题。换句话说,这绝对不是一个重复的问题。我花了几个小时阅读以确保!
我已经成功安装了nginx和php-fpm使用https://github.com/josegonzalez/homebrew-php. 好的 ol' trustybrew doctor确认一切都是最新的,我已经安装了所有必要的东西(XQuartz、Xcode 命令行工具等)。
以下是一些在尝试理解我的设置时可能有用的文件摘录:
php-fpm 日志
tail -f /usr/local/var/log/php-fpm.log
[24-Dec-2013 00:05:59] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[24-Dec-2013 00:05:59] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[24-Dec-2013 00:05:59] NOTICE: fpm is running, pid 31745 …Run Code Online (Sandbox Code Playgroud) 每次我在 CentOS 机器上升级 php(通过 yum upgrade)时,我的 /var/lib/session 文件夹所有权都会变成具有 600 权限的 root:apache。我使用 nginx 作为我的网络服务器。这会破坏我的网站并阻止存储会话。
修复方法只是将文件夹 chown nginx:nginx 。但是每次 yum 更新 php 时我都必须手动执行此操作。
我想问题源于这样一个事实,即当我最初设置盒子时,我运行了 apache。我在哪里可以将此配置更改为“nginx”以解决此问题?我查看了 php.ini,但在那里看不到任何相关内容。会话目录已指定,但与用户无关。
我有这个设置:一个带有 php-fpm 和http://blueimp.github.io/jQuery-File-Upload/的 Nginx 服务器
当我尝试在大约 10MB 后上传文件时失败。激活 SPDY 时会发生这种情况。当 SPDY 关闭时,上传工作正常。
有没有人知道这个问题的解决方法/修复?
是否可以在位置块中设置超时指令以防止 nginx 从长时间运行的 PHP 脚本 (PHP-FPM) 返回 504?
server
{
listen 80;
server_name ubuntu-vm.test-api;
root /home/me/Sites/path/to/site/;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
# Fix for server variables that behave differently under nginx/php-fpm than typically expected
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Include the standard fastcgi_params file included with nginx
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_index index.php;
# Override the SCRIPT_FILENAME variable set by fastcgi_params
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Pass to upstream PHP-FPM; …Run Code Online (Sandbox Code Playgroud) Debian 7.5 Nginx/1.6.0 PHP 5.6.0RC2 (fpm-fcgi) (build: Jul 11 2014 08:17:52) Munin v2.0.21-2
我在网上搜索了几天来寻找我的问题的答案,但似乎没有人知道该怎么做。我让 Munin 启动并运行,但 Munin 动态图形缩放 (dynazoom) 不起作用,这似乎是 cgi 的问题我已经使用 spawnfcgi 用 lighttpd 和 apache 测试了 Munin,一切正常,但不能使用 php5-fpm。缩放屏幕上的图形显示但没有 php5-fpm 它只是显示一个损坏的图像链接就像这个图像http://serversupportforum.de/forum/attachments/monitoring/4901d1373968950-munin-dynazoom-funktioniert-nicht-1592281191 .png "穆宁动态图缩放(dynazoom)"
现在很多人都在使用 Nginx 和 php-fpm,所以我认为这对很多人都有很大帮助。例如:https : //stackoverflow.com/questions/18645812/munin-dynamic-graph-zoom-dynazoom-not-working-centos6-nginx-php-fpm
这是我的 nginx 配置文件:
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# …Run Code Online (Sandbox Code Playgroud) 我创建了一个目录,用于存储PHP 5 FPM套接字文件:sudo mkdir /var/run/php-fpm。它由root:root核心 PHP FPM 流程拥有。
当 PHP FPM 启动时,它会为此目录中的每个池创建套接字文件,nginx 使用它们进行通信。
但是,当我重新启动我的机器 ( sudo reboot) 时,该目录在重新启动后消失了,并且 PHP FPM 无法启动,因为它无法在丢失的目录中创建套接字文件。
可能是什么问题?我该如何调试?
我正在使用最新的 Ubuntu Server 14.04。