我不确定这是 Nginx 或 PHP-FPM 设置,但长日志行被截断。是否有增加最大日志行长度的设置?
我有带有 Nginx 和 PHP-FPM 的 Fedora 16。一切都很好。所有带有 PHP 通知、警告、错误等的日志都在/var/log/php-fpm/www-error.log.
有没有办法配置 PHP-FPM 在配置为 Nginx 错误日志的正确日志文件中写入错误?所以我想记录每个虚拟主机的PHP 错误,而不是在一个全局文件中。(就像在 Apache Httpd 和 PHP 中一样)。
我讨厌配置 nginx。这太复杂了。如何让 PHP 在我的用户目录中工作?这是我的 nginx.conf 的相关部分:
location ~ ^/~(.+?)(/.*)?$ {
autoindex on;
autoindex_exact_size off;
alias /home/$1/public_html$2;
location ~ \.php {
include /etc/nginx/fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误:FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream在 nginx 错误日志中。
这是我的/etc/nginx/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; …Run Code Online (Sandbox Code Playgroud) 我正在与passNginx 1.2.4结合使用并尝试将自定义参数传递给. 以下是我目前找到的选项:PHP-FPM 5.4.8fastcgiPHP
使用env指令设置环境变量 innginx并使用getenv()或$_ENVfrom获取它PHP。问题是env只在main上下文中操作,而我需要在上下文中设置参数server。
使用fastcgi_param专为此设计的指令。
我曾尝试使用更改某些参数的值fastcgi_param但未成功:
nginx:
fastcgi_param PATH_INFO "/var/tmp";
Run Code Online (Sandbox Code Playgroud)
PHP:
我检查了我能找到的所有预定义数组:
echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header); …Run Code Online (Sandbox Code Playgroud) 我在 serverFault 上搜索了 allot 并找到了这个解决方案......
将其包含在虚拟主机中应该可以工作:
php_admin_flag register_argc_argv = On
php_value max_execution_time = 1000
php_value session.gc_maxlifetime = 15000
php_admin_flag magic_quotes_gpc = on
Run Code Online (Sandbox Code Playgroud)
但比它让我明白,我根本没有使用 mod_php。我已经安装了 php-fpm。如果我的方法有效,或者是否有其他方法,我真的找不到任何信息......
那么,如果我有 php-fpm 并且想要为虚拟主机设置不同的设置,我该怎么办?
S。
我在 nginx 上设置了 2 个网站,应该根据访问的域加载正确的网站。
例如: website1.com website2.com
但是,在访问这两个域中的任何一个时,它们都会加载 website1.com。
我的配置有什么问题?两个配置都在启用站点的单独文件中
website1.com 配置
server {
listen 80;
listen [::]:80 ipv6only=on;
root /var/www/website1.com;
index index.php index.html index.htm;
# Make site accessible from http://localhost/
server_name website1.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$query_string;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location ~ \.php$ {
try_files $uri /index.php =404; …Run Code Online (Sandbox Code Playgroud) 我们已经在 Ubuntu Trusty 上运行了 nginx。它通过 https 为多个网站提供服务,运行在一个 IP 地址上。
随机地,虽然它似乎与工作负载略有关系,但有时单个请求会出现在错误的虚拟主机上。这导致请求lustrum.thalia.nu被服务,thalia.nu反之亦然。当用户突然进入不同的网站时,这会产生令人讨厌的错误页面。当您按下 时F5,用户将再次到达原始目标。
它似乎与浏览器或操作系统无关。已确认在 Firefox(Linux、Windows、Mac)、Edge(Windows)和 Chrome(Linux、Windows、Android)和 Safari(iOS)上发生。
当系统处于负载状态时,该问题似乎更频繁地发生,这表明存在某种竞争条件。
server {
server_name lustrum.thalia.nu;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/certs/lustrum.thalia.nu.crt;
ssl_certificate_key /etc/nginx/certs/lustrum.thalia.nu.key;
add_header Strict-Transport-Security "max-age=63072000; preload";
root /var/www/thalia-lustrum/public_html;
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+?\.php)(/.*)$; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 docker 配置一个 php webapp。这个想法是php-fpm在一个独立的容器中运行应用程序,并有另一个运行 nginx 的容器。此设置的想法是使用相同的 nginx 容器将请求代理到已经在同一台机器上工作的其他 web 应用程序。问题是我无法nginx正确处理静态文件(js、css 等),因为对这些文件的请求一直转到fpm.
这是文件系统的样子:
/
??? Makefile
??? config
? ??? webapp.config
??? webapp
??? web
??? index.php
??? static.js
Run Code Online (Sandbox Code Playgroud)
我正在使用Makefile看起来像这样的(对此不感兴趣docker-compose)运行整个事情:
PWD:=$(shell pwd)
CONFIG:='/config'
WEBAPP:='/webapp'
run: | run-network run-webapp run-nginx
run-network:
docker network create internal-net
run-webapp:
docker run --rm \
--name=webapp \
--net=internal-net \
--volume=$(PWD)$(WEBAPP):/var/www/webapp:ro \
-p 9000:9000 \
php:5.6.22-fpm-alpine
run-nginx:
docker run --rm \
--name=nginx \
--net=internal-net \
--volume=$(PWD)$(CONFIG)/webapp.conf:/etc/nginx/conf.d/webapp.domain.com.conf:ro \ …Run Code Online (Sandbox Code Playgroud) 这与这些问题基本相同:
但是那里的答案似乎不适用于带有 PHP 7 的 Ubuntu 16.04。
/etc/php/7.0/fpm/pool.d/www.conf:
catch_workers_output = yes
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
Run Code Online (Sandbox Code Playgroud)
/var/log/fpm-php.www.log存在并归www-data.
/etc/php/7.0/fpm/php.ini:
log_errors = On
Run Code Online (Sandbox Code Playgroud)
Nginx 虚拟主机的服务器块
access_log /var/log/myapp/access.log;
error_log /var/log/myapp/error.log error;
Run Code Online (Sandbox Code Playgroud)
/var/log/myapp/access.log 存在并归www-data.
但是当发生错误时,我在任何指定的日志文件中都没有收到错误,并且在任何其他地方也找不到它。
我浏览了关于另一个问题的所有建议,但没有找到任何有效的答案。我假设自从这些答案发布以来,情况已经发生了变化。有什么建议?
我的网络服务器上的 opcache 一直达到我设置的限制,即使我觉得我没有那么多 PHP 代码,它真的应该有足够的空间。
更糟糕的是,即使在清除 opcache 时,它也会立即显示超过 2/3 的可用空间已被填充。
刚才的例子:
运行 opcache_reset() 之前的 phpinfo 片段:
Used memory 122958472
Free memory 5552
Run Code Online (Sandbox Code Playgroud)
运行 opcache_reset() 后的 phpinfo 片段:
Used memory 90691312
Free memory 43526416
Run Code Online (Sandbox Code Playgroud)
我知道在 PHP7 中,opcache(显然)备份到磁盘,所以也许东西正在自动重新加载?但这似乎违背了重置 opcache 的目的,我不知道 opcache 备份到磁盘上的哪个位置,所以我无法检查。
我正在 nginx 上运行 PHP-FPM,准确地说是 vesion 7.0.15-0ubuntu0.16.04.4。
php-fpm ×10
nginx ×8
fastcgi ×3
php ×3
php7 ×2
virtualhost ×2
apache-2.2 ×1
docker ×1
fcgi ×1
linux ×1
logging ×1
opcache ×1
ssl ×1
tls ×1
ubuntu-16.04 ×1