2013-06-27 36 views
6

Tôi đang cố gắng để Nginx chạy từ nguồn trong thư mục người dùng của máy chủ chia sẻ của tôi với cấu trúc thư mục kiểu debian. Tôi gặp lỗi khi cố gắng khởi động máy chủ:Nginx "không hợp lệ số đối số trong" try_files "chỉ thị ..." cho bảo mật PHP

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

Dòng được tham chiếu là bảo vệ thực thi PHP khỏi trang Nginx cạm bẫy. Dưới đây là file cấu hình của tôi:

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/*; 
} 

... và sites-available/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; 
    } 

} 

tôi không thể tìm thấy bất cứ điều gì sai trái với configs của tôi. Thiết lập của tôi gần giống với cài đặt đang hoạt động trên hộp Ubuntu tôi đang chạy. Tôi đang làm gì sai?

EDIT: Khi thử nghiệm thêm, điều này chỉ xảy ra khi tôi đang sử dụng thiết lập có sẵn trang web có chứa trong nginx.conf. Nếu tôi sao chép/dán nội dung của trang web của tôi-có sẵn/mặc định vào nginx.conf của tôi tất cả mọi thứ hoạt động tốt.

EDIT2: Như đã đề cập, nếu tôi đã xóa try_files khỏi tệp vhosts, lỗi này lại không thành công với cùng lỗi trên fastcgi_params. Đây là nội dung của tệp fastcgi_params của tôi. Đó là tất cả mặc định:

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: Tôi đã mắc lỗi nhẹ. Đó là fastcgi_param, không phải fastcgi_param * s *, nơi có lỗi sau khi xóa chỉ thị try_files.

Trả lời

2

Không chắc nếu đây là vấn đề của bạn, nhưng tôi đã có try_files của tôi bên ngoài khối vị trí PHP:

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

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

Có vẻ như đó không phải là vấn đề của tôi. Nếu tôi di chuyển nó đến vị trí gốc không phải PHP, nó chỉ thất bại tại fastcgi_param với cùng một số lỗi không hợp lệ của các đối số. Có vẻ như điều này có liên quan đến việc sử dụng các tệp vhosts thay vì giữ cấu hình máy chủ lưu trữ của tôi trong nginx.conf. Nếu tôi sao chép/dán nội dung chính xác của các trang web có sẵn/mặc định vào nginx.conf, nơi dòng bao gồm thì mọi thứ hoạt động hoàn hảo. – HittingSmoke

11

Nginx cố gắng giải thích rằng chỉ try_files cần ít nhất hai con đường:

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

Sử dụng một trong hai /dev/null như một công việc xung quanh đơn giản:

try_files $uri /dev/null =404; 

Hoặc một vị trí được đặt tên cho phép tùy chỉnh nhiều hơn:

try_files $uri @error 
    ... 
    location @error { 
     ... 
    } 
Các vấn đề liên quan