2013-06-27 13 views
6

Próbuję uruchomić Nginxa ze źródła w folderze użytkownika mojego współdzielonego hosta o strukturze katalogów w stylu debian. Dostaję błąd przy próbie uruchomienia serwera up:Nginx "niepoprawna liczba argumentów w dyrektywie" try_files "..." dla bezpieczeństwa PHP

[emerg] invalid number of arguments in "try_files" directive in /home/.../nginx/conf/sites-enabled/default:11 

Linia odniesienia jest ochrona wykonanie PHP ze strony pułapek Nginx. Oto moje pliki konfiguracyjne:

nginx.conf:

worker_processes 1; 

events { 
    worker_connections 1024; 
} 

http { 

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 
    client_max_body_size 5m; 

    include /home/hittingsmoke/nginx/conf/mime.types; 
    default_type application/octet-stream; 

    gzip on; 
    gzip_disable \"msie6\"; 

    include /home/hittingsmoke/nginx/conf/sites-enabled/*; 
} 

... i witryn dostępnej/default:

server { 
    listen  12513; 

    root /home/hittingsmoke/nginx/html/; 
    index index.php index.html index.htm; 

    server_name _; 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/home/hittingsmoke/php-5.3/var/run/php5-fpm.sock; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 
    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root html; 
    } 

} 

nie mogę znaleźć nic złego z moim configs. Moja konfiguracja jest prawie identyczna z działającą instalacją na uruchomionym systemie Ubuntu. Co ja robię źle?

EDYCJA: Po dalszych testach dzieje się tak tylko wtedy, gdy używam instalacji dostępnych na stronie z załącznikiem w pliku nginx.conf. Jeśli skopiuję/wkleję zawartość moich stron-dostępnych/domyślnych do mojego pliku nginx.conf, wszystko działa poprawnie.

EDIT2: Jak już wspomniałem, jeśli usunąłem try_files z pliku vhosts, to znowu się nie powiedzie z tym samym błędem na fastcgi_params. Oto zawartość mojego pliku fastcgi_params. To wszystko domyślnie:

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; 

EDIT3: Zrobiłem niewielki błąd. Jest to fastcgi_param, a nie fastcgi_param * s *, gdzie błąd występuje po usunięciu dyrektywy try_files.

Odpowiedz

2

Nie wiem, czy to jest twój problem, ale mam moje try_files zewnątrz bloku lokalizacji PHP:

location/{ 
    try_files $uri $uri/ =404; 
} 

location ~ \.php$ { 
    .... 
} 
+0

Nie wygląda na to, że to mój problem. Jeśli przeniesię go do lokalizacji głównej innej niż PHP, po prostu nie powiedzie się w fastcgi_param z tym samym błędem nieprawidłowej liczby argumentów. Wygląda na to, że ma to coś wspólnego z użyciem plików vhosts zamiast utrzymywania konfiguracji mojego hosta w pliku nginx.conf. Jeśli skopiuję/wkleję dokładną zawartość stron-dostępnych/domyślnych w pliku nginx.conf, w którym znajduje się linia dołączania, wszystko działa idealnie. – HittingSmoke

11

Nginx próbuje wyjaśnić, że dyrektywa try_files potrzebuje co najmniej dwie ścieżki:

try_files /path1$uri /path2$uri ... 

Zastosowanie albo /dev/null jako proste obejście:

try_files $uri /dev/null =404; 

Lub nazwaną lokalizację, która pozwala na większą personalizację:

try_files $uri @error 
    ... 
    location @error { 
     ... 
    } 
Powiązane problemy