Nginx 和 PHP-FPM 403 禁止

Chr*_*ris 2 php nginx php-fpm

我正在将 Nginx 与 PHP-FPM 一起使用。显示请求的页面,但萤火虫显示 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/"
Run Code Online (Sandbox Code Playgroud)

但是,我尝试设置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;

    }
Run Code Online (Sandbox Code Playgroud)

我的/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;
Run Code Online (Sandbox Code Playgroud)

的输出/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
Run Code Online (Sandbox Code Playgroud)

Nginx 1.2.6 是从源代码编译的,用于额外的模块。

Mic*_*ton 5

我假设您已经提供了足够的信息,并且没有遗漏您选择不共享的 nginx 配置信息中的任何重要信息。

考虑到这个警告......


看来,要传递的一切/extras/到PHP,包括静态数据的请求。这是正确的被拒绝,因为这意味着上传的带有.jpg扩展名的恶意 PHP 脚本(例如)将不会作为 PHP 执行。

要解决此问题,您只需将 PHP 脚本的请求传递/extras/给 PHP。

location ~ /extras/.*\.php$ {
Run Code Online (Sandbox Code Playgroud)

如果您需要专门处理该目录下的静态文件,那么您可以location为它们制作一个块。(您可能应该这样做,因为您似乎将其他所有内容都传递给了 Django...)

location /extras/ { }
Run Code Online (Sandbox Code Playgroud)

您遇到的另一个可能让您感到悲伤的问题是您的server块没有有效的root定义。这是最常见的nginx 配置错误之一。它应该是这样的:

root /var/www/my_server;
Run Code Online (Sandbox Code Playgroud)

(这也意味着您不应该root在每个location. 中定义冗余s 。)