Nginx + Php5-fpm không hiển thị tệp php


8

Tôi đã dành hàng giờ để tìm ra cách cài đặt Nginx + Ruby Enterprise Edition + PHP5-fpm và MYSQL, cuối cùng tất cả đã được cài đặt và tất cả dường như đã bắt đầu tốt.

Nhưng vì một số lý do, các tập tin php không được xử lý.

Các tệp .html hoạt động tốt, nhưng khi tôi thử và xem tệp .php, nó xuất hiện như thể nó không tồn tại, mặc dù vậy. Thật thú vị, khi tôi thử và xem tệp .html không tồn tại, tôi nhận được một tin nhắn Nginx 404 đẹp, nhưng khi tôi xem tệp .php, nó thậm chí không cung cấp cho tôi.

Vì vậy, theo hiểu biết của người mới, có vẻ như có gì đó không ổn với cấu hình, hoặc Nginx và PHP-fpm không nói chuyện với nhau.

Tôi đã xem xét nhiều ví dụ khác về các tập tin cấu hình nginx và tôi chắc chắn rằng khía cạnh đó của mọi thứ đều ổn. Chà ... đây là bit có liên quan của tập tin conf

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }

    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;

Bất kỳ trợ giúp nào cũng được đánh giá rất cao.

chỉnh sửa : Dưới đây là các tiêu đề được trả về từ tệp php thử nghiệm " http://eman.id.au/test.php ":

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

Câu trả lời:


10

Tôi tin rằng hôm nay tôi đã gặp phải vấn đề tương tự, nginx không gửi yêu cầu tới php-fpm (như được chỉ ra trong tiêu đề) nhưng bạn vẫn nhận được 404, mặc dù tệp tồn tại và không có lỗi (PHP / cú pháp) nào cả, và không có lỗi hiển thị trong bất kỳ nhật ký nào (ngins hoặc php-fpm).

Bạn đã không bao gồm cấu hình nginx đầy đủ của mình, nhưng có thể bạn không có tùy chọn "root" xác định (chính xác?) Trong phần "máy chủ" của bạn? Bạn cần chắc chắn rằng bạn làm, rằng nó trỏ đến đúng vị trí của nó và nó nằm trong phần "máy chủ", không nằm trong phần "vị trí" - ví dụ:

server {
    root /var/www/eman;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
        include fastcgi_params;
    }
}

Tôi không chắc chắn, nhưng đó có thể là vấn đề
Emmanuel

Tôi đã kết thúc việc xây dựng lại VPS và thử lại bằng hướng dẫn khác, và bây giờ nó hoạt động tốt. :)
Emmanuel

Điều này làm việc cho tôi và tôi đã sử dụng ổ cắm unix cho tham số fastcgi_pass
Sean

1

Nếu bạn xem các tiêu đề http://eman.id.au/test.php trả lời thì bạn sẽ thấy X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. Nó sẽ không hiển thị điều này nếu yêu cầu không được chuyển đến PHP. Ngoài ra, nếu PHP không thể tìm thấy đường dẫn tệp được truyền cho nó, nó sẽ báo lỗiNo input file specified.

Vì trang web của bạn không xuất ra được cung cấp bởi tiêu đề và không có No input file specified.lỗi, lý do rất có thể là bạn có lỗi trong tập lệnh PHP và đã tắt các lỗi hiển thị. Điều này dẫn đến một trang trống và một mục trong nhật ký lỗi của bạn, vì vậy hãy xem trong đó và xem nếu nó không được lấp đầy.


À, vậy ra !! Tôi đã xem trang này trong google chrome và nó chỉ báo lỗi 404, nhưng tôi vừa xem nó trong firefox và nó chỉ là một trang trống. Không có lỗi trong tập lệnh php. Trong thực tế, tôi đã lấy tất cả php ra khỏi nó và nội dung duy nhất của nó là thẻ h1
Emmanuel

Tôi đã cập nhật bài viết gốc của mình với các tiêu đề http của tệp test.php
Emmanuel

Và bạn hoàn toàn chắc chắn rằng các tập lệnh của bạn được đặt trong / var / www / eman / và rằng đường dẫn và tệp có thể đọc và thực thi được bởi quy trình PHP?
Martin Fjordvald

Có, chúng là các tập lệnh chắc chắn nằm trong / var / www / eman / tệp test.php nằm trong cùng thư mục với index.html hoạt động tốt. Tôi nên kiểm tra cái gì để đảm bảo chúng có thể đọc và thực thi được theo quy trình PHP ??? Tôi không chắc về điều đó?
Emmanuel

Vâng, bạn sinh ra PHP theo một cách nào đó thông qua spawn-fcgi hoặc php-fpm, tệp cấu hình hoặc lệnh được sử dụng để sinh ra sẽ chứa người dùng của quá trình, sau đó bạn sẽ phải kiểm tra quyền linux cho người dùng đó.
Martin Fjordvald

0

Vài suy nghĩ:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

Điều này có cần thêm một dấu gạch chéo không

   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;

NGINX cũng có một chút điều lạ về bộ nhớ đệm, vì vậy khi bạn thử URL trong trình duyệt của mình, hãy thêm? Random = 12391 vào cuối để buộc làm mới. Tôi đã bối rối trong 30 phút qua một cấu hình chỉ để thấy nó hoạt động ổn định nhưng tôi đã bị bộ đệm lưu trữ.

Bạn cũng có thể muốn thoát khỏi vị trí của mình tốt hơn một chút (mặc dù điều này không gây ra vấn đề mà bạn gặp phải) Thực hành tốt hơn:

location ~ .php$

đến

location ~ \.php$

.php $ sẽ khớp với một yêu cầu như yourpagephp chứ không chỉ yourpage.php


Được rồi, tôi đã chỉnh sửa các tập tin conf, nhưng không may mắn ...
Emmanuel

URL là: eman.id.au/test.php, eman.id.au tự hoạt động tốt trên index.html
Emmanuel

Điều bộ nhớ đệm là không đúng sự thật, Nginx không lưu trữ bất cứ thứ gì bạn không nói cụ thể. Tuy nhiên, nó không giống như Apache, thay đổi tệp cấu hình yêu cầu tải lại tệp cấu hình. Ngoài ra trình duyệt của bạn sẽ lưu trữ các yêu cầu, vì vậy đó là những gì bạn có thể nhầm lẫn với nó.
Martin Fjordvald
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.