Я использую Nginx с PHP-FPM. Запрошенная страница отображается, но 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 скомпилирован из исходников для дополнительных модулей.
Я предполагаю, что вы предоставили достаточно информации и ничего не упустили важный в информации о конфигурации nginx, которую вы решили не раскрывать.
Помня об этом ...
Похоже, вы проезжаете все под /extras/
в PHP, включая запросы статических данных. Это справедливо отрицается, поскольку это означает, что вредоносный PHP-скрипт загружен с .jpg
расширение (например) не будет выполняться как PHP.
Чтобы решить эту проблему, вам нужно передавать только запросы для скриптов PHP в /extras/
в PHP.
location ~ /extras/.*\.php$ {
Если вам нужно специально обрабатывать статические файлы в этом каталоге, вы можете создать location
блок для них. (Вероятно, вам стоит это сделать, поскольку вы, кажется, передаете все остальное в Django ...)
location /extras/ { }
Еще одна проблема, которая, вероятно, вызывает у вас горе, - это то, что вы server
блок не имеет действительного root
определено. Это один из самых распространенных неправильная конфигурация nginx. Это должно быть примерно так:
root /var/www/my_server;
(Это также означает, что вы не должны определять избыточные root
s в каждом location
.)