在下面的几行中,我可能有一个特定于站点的配置文件,其中包含该站点独有的其他fastcgi_params。如果这个文件存在,我想加载它。
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
if (-f /path/www/$host/nginx.conf) {
include /path/www/$host/nginx.conf;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,我得到的错误是:
nginx: [emerg] "include" 指令在这里是不允许的......
我认为与其单独检查,不如让include 来检查我。
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; …Run Code Online (Sandbox Code Playgroud) 我有一个启用了 Lighttpd 和 fastcgi 的 Centos 5 系统。它记录访问但不记录错误。我有内部服务器错误 500 并且日志中没有信息,当我尝试打开不存在的文件时 - 错误日志中也没有信息。如何正确启用它?
下面是我启用的模块列表:
server.modules = (
"mod_rewrite",
"mod_redirect",
"mod_alias",
# "mod_access",
# "mod_cml",
# "mod_trigger_b4_dl",
# "mod_auth",
"mod_status",
"mod_setenv",
"mod_fastcgi",
# "mod_webdav",
# "mod_proxy_core",
# "mod_proxy_backend_fastcgi",
# "mod_proxy_backend_scgi",
# "mod_proxy_backend_ajp13",
# "mod_simple_vhost",
# "mod_evhost",
# "mod_userdir",
# "mod_cgi",
# "mod_compress",
# "mod_ssi",
# "mod_usertrack",
# "mod_expire",
# "mod_secdownload",
# "mod_rrdtool",
"mod_accesslog" )
Run Code Online (Sandbox Code Playgroud)
下面是调试的设置:
## enable debugging
#debug.log-request-header = "enable"
#debug.log-response-header = "enable"
#debug.log-request-handling = "enable"
debug.log-file-not-found = "enable"
#debug.log-condition-handling = …Run Code Online (Sandbox Code Playgroud) 我对我的 nginx 配置感到沮丧,所以我要求帮助编写我的配置文件,以从同一根目录的子目录中提供多个项目。这不是虚拟主机,因为它们都使用相同的主机值。也许一个例子可以澄清我的尝试:
192.168.1.1/应当成为index.php从/var/www/public/192.168.1.1/wiki/应当成为index.php从/var/www/wiki/public/192.168.1.1/blog/应当成为index.php从/var/www/blog/public/这些项目使用 PHP 并使用 fastcgi。
我目前的配置非常小。
server {
listen 80 default;
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
root /var/www;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经试过各种事情alias和rewrite,但没能得到的东西正确的FastCGI的设置。这似乎应该有比写位置的块,复制更雄辩的方式root,index,SCRIPT_FILENAME,等。
任何让我朝着正确方向前进的指针都表示赞赏。
我不确定这是 Nginx 或 PHP-FPM 设置,但长日志行被截断。是否有增加最大日志行长度的设置?
我讨厌配置 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) nginx 正在通过 fastcgi 连接到 php-fpm,使用/etc/nginx/fastcgi_params位置块中的标准。
当从命令行连接到 /.status (php-fpm.ini::ping.path) 时cgi-fcgi -bind,结果按预期返回(X-Powered-By 设置、响应正文等)。
当使用 nginx 请求时,结果返回空(X-Powered-By 设置,没有正文长度或内容)。nginx 返回 200,因为它得到了“有效”响应。
监视 tcpdump,我在它们的 FCGI 标头中隔离了对奇偶校验的请求(减去仍由 shell 设置的用户相关环境变量。)
我已经搜索了答案,但似乎找不到与此问题相关的任何实质性内容。
应该在Apache2.4上使用mod_proxy_fcgi还是mod_fastcgiwith php-fpm?
在安全性和性能方面有什么区别吗?有什么建议吗?
在此先感谢您的帮助。
我正在使用 FastCGI 在 nginx 后面运行 Django。我发现在发送给客户端的一些响应中,响应中间发生了随机数据损坏(中间可能有几百个字节左右)。
在这一点上,我已将其范围缩小为 nginx 的 FastCGI 处理程序或 Django 的 FastCGI 处理程序中的错误(即可能是 flup 中的错误),因为当我在独立(即runserver)模式下运行 Django 服务器时,从未发生此问题。它只发生在 FastCGI 模式下。
其他有趣的趋势:
它往往发生在较大的响应上。当客户端第一次登录时,它们会被发送一堆 1MB 块以将它们同步到服务器数据库。在第一次同步之后,响应要小得多(通常一次只有几 KB)。损坏似乎总是发生在开始时发送的那些 1MB 块上。
当客户端通过 LAN 连接到服务器(即低延迟、高带宽连接)时,这种情况发生得更频繁。这让我觉得在 nginx 或 flup 中存在某种竞争条件,并且会因数据速率的增加而加剧。
现在,我不得不通过在响应标头中放置一个额外的 SHA1 摘要来解决这个问题,并让客户端拒绝标头与正文校验和不匹配的响应,但这是一种可怕的解决方案。
有没有其他人经历过这样的事情,或者有任何关于如何确定是 flup 还是 nginx 有问题的指示,以便我可以向适当的团队提交错误?
在此先感谢您的帮助。
注意:我也在 lighttpd + FastCGI + Django 中发布了一个类似的错误:https : //stackoverflow.com/questions/3714489/lighttpd-fastcgi-django-truncated-response-sent-to-client-due-to - 出乎意料......即使这不是一回事(截断与损坏),它开始看起来像共同的罪魁祸首是 flup / Django 而不是 web 服务器..
编辑:我还应该注意我的环境是什么:
Mac Mini 上的 OSX 10.6.6
Python 2.6.1(系统)
Django 1.3(来自官方压缩包)
flup 1.0.2(来自 flup 站点上的 Python …
我正在尝试使用 DAViCal 设置 nginx。但是,我在日志中收到一个“文件未找到”,其中包含“FastCGI sent in stderr:”Primary script unknown”。看起来我的别名有问题,但我确实想不通。
我的虚拟主机:
server {
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default_server ipv6only=on; ## listen for ipv6
root /var/www-data;
index index.html index.htm index.shtml index.php;
# Make site accessible from http://localhost/
server_name just.a.server;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html;
ssi on;
# Uncomment to enable naxsi …Run Code Online (Sandbox Code Playgroud) fastcgi ×10
nginx ×8
php-fpm ×6
php ×5
alias ×1
apache-2.4 ×1
corruption ×1
django ×1
fcgi ×1
lighttpd ×1
log-files ×1
mod-fastcgi ×1