Data publikacji: Aug 26, 2010 8:34:54 PM
Założyłem, że zarówno w / jak i /virtual jest kohana. Jeżeli nie należy poprawić sekcję / oraz /virtual (zabroniony dostęp do niektórych katalogów) oraz @root i @virtual (przepisywanie urli).
# cat /etc/nginx/sites-enabled/default
### BACKENDY
upstream php-fpm {
server 127.0.0.1:9000;
}
upstream php-cgi {
server 127.0.0.1:9001;
}
server {
listen 127.0.0.1:80 default;
server_name default;
access_log /var/log/nginx/default.access.log;
error_log /var/log/nginx/default.error.log;
### DODATKI ###
# Uwaga: należy dodac stosowne ograniczenia dostępu do adresów /nginx_status, /fpm_status i /fpm_ping
# Uwaga: należy odpowiednio zmodyfikować konfiguracje poola fpm:
# pm.status_path = /fpm_status
# ping.path = /fpm_ping
# ping.response = fpm_pong
# Status nginx
location /nginx_status {
stub_status on;
access_log off;
}
# Status fpm
location = /fpm_status {
access_log off;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /fpm_status;
fastcgi_pass php-fpm;
}
# Ping fpm
location = /fpm_ping {
access_log off;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /fpm_ping;
fastcgi_pass php-fpm;
}
### KATALOG /virtual ###
location /virtual {
# Ważne: użycie alias powoduje że /virtual/COS jest zamieniane na /var/www/root_virtual/COS.
# Jeżeli podane było by root, to /virtual/COS byłoby zmieniane na /var/www/root_virtual/virtual/COS.
alias /var/www/root_virtual;
try_files $uri $uri/ @virtual;
# Wyłączenie logowania dla niektórych typów plików
if ($uri ~ \.(css|js|jpg|png|gif)$) {
access_log off;
}
}
location ~ ^/virtual(/.+\.php)(.*)$ {
root /var/www/root_virtual;
set $fastcgi_script_name_real $1;
set $fastcgi_path_info_real $2;
# Sprawdzenie czy plik faktycznie istnieje.
if (!-f $document_root$fastcgi_script_name_real) {
return 403;
}
include "/etc/nginx/includes/fastcgi_params_real";
fastcgi_pass php-fpm;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
location @virtual {
rewrite ^/virtual(/.*) /virtual/index.php?url=$1 last;
}
### GLOWNY KATALOG ###
location / {
root /var/www/root;
try_files $uri $uri/ @root;
if ($uri ~ \.(css|js|jpg|png|gif)$) {
access_log off;
}
}
location = /favicon.ico {
access_log off;
log_not_found off;
}
# Takie coś można wyeksploitować poprzez upload/1.jpg/costam.php, tj.
# uploadujemy plik do upload/1.jpg, zawierający poprawny naglowek obrazka
# i jednocześnie kod PHP na końcu. Wywołanie go w ten sposób spowoduje
# wykonanie kodu zawartego w obrazku.
# location ~ .+\.php$ {
# root /var/www/root;
# include "/etc/nginx/fastcgi_params";
# fastcgi_pass php-cgi;
# }
location ~ ^(.+\.php)(.*)$ {
root /var/www/root;
set $fastcgi_script_name_real $1;
set $fastcgi_path_info_real $2;
# Sprawdzenie czy plik faktycznie istnieje.
if (!-f $document_root$fastcgi_script_name_real) {
return 403;
}
include "/etc/nginx/includes/fastcgi_params_real";
fastcgi_pass php-fpm;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
location @root {
rewrite ^(/.*) /index.php?url=$1&$args last;
}
}
# cat /etc/nginx/includes/fastcgi_params_real
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_FILENAME $document_root$fastcgi_script_name_real;
fastcgi_param SCRIPT_NAME $fastcgi_script_name_real;
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 PATH_INFO $fastcgi_path_info_real;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info_real;
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;