我正在使用PHP-FPM的Nginx。 显示请求的页面,但是firebug显示CSS,JS和图像的path正在返回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是从源编译额外的模块。
我会假设你已经提供了足够的信息,而不是在你select不共享的nginxconfiguration信息中遗漏任何重要的东西。
考虑到这个警告
看起来你正在将/extras/下的所有东西都传递给PHP,包括对静态数据的请求。 这是正确的被拒绝,因为这意味着一个恶意PHP脚本上传一个.jpg扩展(例如)将不会被执行为PHP。
要解决此问题,您只需将/extras/下的PHP脚本请求传递给PHP。
location ~ /extras/.*\.php$ {
如果你需要专门处理该目录下的静态文件,那么你可以为它们设置一个location块。 (你可能应该这样做,因为你好像把所有的东西都传给了Django …)
location /extras/ { }
另一个可能导致你悲伤的问题是你的server块没有定义有效的root 。 这是最常见的nginx错误configuration之一 。 它应该是这样的:
root /var/www/my_server;
(这也意味着你不应该在每个location定义冗余的root )。