我正在使用带有 PHP-FPM 的 Nginx。请求的页面已显示,但 firebug 显示 CSS、JS 和图像的路径返回 403 Forbidden 错误,这破坏了样式。
查看日志:
013/03/09 21:15:43 [error] 1012#0: *17 FastCGI sent in stderr: "Access to the script '/var/www/my_server/extras/extras/go/_common/imgs/WebLogo2-trans.png' has been denied (see security.limit_extensions)" while reading response header from upstream, client: 33.33.33.1, server: my-server.com, request: "GET /extras/extras/go/_common/imgs/WebLogo2-trans.png HTTP/1.1", upstream: "fastcgi://unix:/var/tmp/php-fpm.sock:", host: "www.my-server.com", referrer: "http://www.my-server.com/extras/better/"
但是,我尝试设置security.limit_extensions = .php .css .js .jpg
只是为了看看会发生什么,但是 mimetype 被解释为 text/html 并且无法加载。
我已尝试对每个文件和目录执行 chmod 777,但没有成功。
以下是 Nginx 服务器块:http://dpaste.com/1017993/以及相关位置块。位置块包含来自另一个文件,该文件未反映在服务器块中:
location /extras/ {
access_log /var/log/nginx/my_server/extras.log debug_phpfpm;
include /etc/nginx/fastcgi_params;
root /var/www/my_server/extras;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
autoindex on;
fastcgi_pass unix:/var/tmp/php-fpm.sock;
fastcgi_index index.php;
expires max;
}
我的/etc/nginx/fastcgi_params
;
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 HTTPS $https if_not_empty;
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 SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
输出/usr/sbin/php5-fpm -version
:
PHP 5.3.10-1ubuntu3.5 (fpm-fcgi) (built: Jan 18 2013 23:44:08)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with XCache v1.3.2, Copyright (c) 2005-2011, by mOo
Nginx 1.2.6 是从源代码编译的,包含额外的模块。
答案1
我假设你已经提供了足够的信息,没有遗漏任何东西重要的在您选择不共享的 nginx 配置信息中。
考虑到这个警告...
看来你正在通过一切下/extras/
,包括对静态数据的请求。这被正确地拒绝,因为这意味着上传的带有.jpg
扩展名的恶意 PHP 脚本(例如)将不会作为 PHP 执行。
要解决此问题,您只需/extras/
将对 PHP 下的 PHP 脚本的请求传递给 PHP。
location ~ /extras/.*\.php$ {
如果您需要特别处理该目录下的静态文件,则可location
以为它们创建一个块。 (您可能应该这样做,因为您似乎将其他所有内容都传递给了 Django...)
location /extras/ { }
另一个可能让你烦恼的问题是你的server
块没有有效的root
定义。这是最常见的问题之一nginx 配置错误。它应该是这样的:
root /var/www/my_server;
(这也意味着你不应该root
在每个单独的 中定义多余的location
。)