nginx fastcgi Phiên bản chính không xác định trong khi cấu hình userdir


10

Tôi ghét cấu hình nginx. Thật là phức tạp. Làm cách nào để PHP hoạt động trong thư mục người dùng của tôi? Đây là phần có liên quan của nginx.conf của tôi:

    location ~ ^/~(.+?)(/.*)?$ {
        autoindex on;
        autoindex_exact_size off;
        alias /home/$1/public_html$2;

        location ~ \.php {
            include /etc/nginx/fastcgi.conf;
            fastcgi_intercept_errors on;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
        }
    }

Điều này cho tôi lỗi: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstreamtrong nhật ký lỗi nginx.

Đây là /etc/nginx/fastcgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
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;

Tôi cho rằng nginx không giải quyết chính xác tên tập lệnh. Tôi ghét phải nói cho nginx biết nơi tìm trong hệ thống tập tin của tôi, viết các biểu thức tùy chỉnh cho chức năng nên được tích hợp (hoặc ít nhất là được chuẩn hóa và ghi lại).


Phần còn lại của nó ở đâu? tức là /etc/nginx/fastcgi.conf?
Michael Hampton

@MichaelHampton Tôi vừa thêm thông tin đó
nnyby

Câu trả lời:


9

Vấn đề là trong fastcgi.conf của bạn, bạn xác định SCRIPT_FILENAME$document_root$fastcgi_script_name;nhưng sau đó bạn sử dụng aliasdirecive để đặt đường dẫn.

Bạn nên cập nhật SCRIPT_FILENAMEđể sử dụng$request_filename

Bạn cũng có thể quay lại vị trí lồng nhau nếu bạn thích. Nếu bạn vẫn gặp lỗi này sau đó thì tôi đã ghi lại tất cả các khả năng ở đây: http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

Vui lòng kiểm tra vì có thể có nhiều nguyên nhân khác.


4

Khi bạn xác định chuyển hướng, bí danh và Bạn sử dụng fastcgi trong conf của trang web của bạn trong nginx Bạn có thể thử điều này để cho phép chúng hoạt động:

Thay đổi:

vị trí ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
...
}


Vào:

vị trí ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ request_filename;
fastcgi_param REQUEST_URI $ uri? $ args;
...
}

Nếu điều này không hoạt động, hãy thử sử dụng như đã nói ở trên mà không có REQUEST_URI, vì vậy nó sẽ là:

vị trí ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ request_filename;
...
}


Điều này làm việc cho tôi trong OSX Sierra
ajaybc

2

Hãy thử sử dụng một locationkhối riêng cho các tập lệnh PHP trong userdirs. Điều này không cần phải được lồng.

location ~ ^/~([^/]+)/(.+\.php)$ {
    alias /home/$1/public_html/$2;
    include /etc/nginx/fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
}

Cám ơn vì sự gợi ý! Bây giờ tôi gần hơn một chút, nhưng vẫn nhận được cùng một lỗi.
nnyby
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.