Tại sao index.php được tải xuống thay vì được hiển thị bởi Nginx?


12

Tôi đã đập đầu tôi được 2 ngày rồi. Vấn đề là index.phpđược tải xuống thay vì được xử lý. Tôi đang sử dụng Ubuntu 14.04, Nginx, php5. Các nginx/site-available/defaultlà như dưới đây. Tôi đã thêm các index.phpmục theo quy định của nhiều bài viết.

    server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }


    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    #   root /usr/share/nginx/html;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #   fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #
    #   # With php5-cgi alone:
    #   fastcgi_pass 127.0.0.1:9000;
    #   # With php5-fpm:
    #   fastcgi_pass unix:/var/run/php5-fpm.sock;
    #   fastcgi_index index.php;
    #   include fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}



    #server {
    #   listen 8000;
    #   listen somename:8080;
    #   server_name somename alias another.alias;
    #   root html;
    #   index index.php index.html index.htm;
    #
    #   location / {
    #       try_files $uri $uri/ =404;
    #   }
    #}


    # HTTPS server
    #
    #server {
    #   listen 443;
    #   server_name localhost;
    #
    #   root html;
    #   index index.php index.html index.htm;
    #
    #   ssl on;
    #   ssl_certificate cert.pem;
    #   ssl_certificate_key cert.key;
    #
    #   ssl_session_timeout 5m;
    #
    #   ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    #   ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
    #   ssl_prefer_server_ciphers on;
    #
    #   location / {
    #       try_files $uri $uri/ =404;
    #   }
    #}

Các nginx.confnhư sau ..

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
    }

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##

    #include /etc/nginx/naxsi_core.rules;

    ##
    # nginx-passenger config
    ##
    # Uncomment it if you installed nginx-passenger
    ##

    #passenger_root /usr;
    #passenger_ruby /usr/bin/ruby;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # auth_http localhost/auth.php;
#   # pop3_capabilities "TOP" "USER";
#   # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#   server {
#       listen     localhost:110;
#       protocol   pop3;
#       proxy      on;
#   }
# 
#   server {
#       listen     localhost:143;
#       protocol   imap;
#       proxy      on;
#   }
#}

Giải pháp tiếp theo cho đến bây giờ.

  1. thêm mục index.php
  2. đã xóa dòng default_type application/octet-stream;trong nginx.conf
  3. không ghi chú các fastcgimục trong defaulttập tin.

Tôi cũng đã thử các giải pháp này cho cùng một vấn đề nhưng chúng không hiệu quả với tôi.

Câu trả lời:


34

Đôi khi nó có thể đơn giản như xóa bộ nhớ cache của trình duyệt . Nếu có một số cấu hình sai và nó thực sự đang tải xuống các tệp, sau khi sửa cấu hình, trình duyệt cần phải được yêu cầu dừng sử dụng tải xuống được lưu trữ.


7
Không thể tin rằng tôi đã dành một giờ cho việc này .. Mẹo hay, +1
Allman

Chỉ cần cứu tôi khỏi bất tận đau đầu
stevendesu

Bạn là một người cứu rỗi !!
Srinivas Gowda

1
vẫn còn hiệu lực trong năm 2016 :))
Comforse

vẫn còn hiệu lực vào năm 2019
Blake Frederick

8

Hãy chắc chắn rằng bạn đã cài đặt php-fpm,

sudo apt-get update && sudo apt-get install php5-fpm

Bây giờ chỉnh sửa nginx/site-available/defaulttập tin của bạn và location ~ \.php$chặn

 location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

khởi động lại dịch vụ nginx

sudo service nginx reload

và tải lại php5-fpm

sudo service php5-fpm restart


fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;dường như là mssing trong khối này. Xem: stackoverflow.com/q/23443398/2010467
LiveWireBT

4
Khối vị trí của tôi giống hệt với khối này, ngoại trừ include fastcgi.confthay vì fastcgi_params(Tôi đang ở trên Ubuntu 14.10) và nó vẫn đang tải xuống các tệp PHP thay vì thực thi chúng.
nnyby

0

Đầu tiên bạn phải Remove cachevào trình duyệt của mình

Sau đó mở terminal và chạy lệnh sau:

sudo apt-get install php-gettext
sudo nano /etc/nginx/sites-available/default

Sau đó thêm mã sau vào defaulttệp:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name localhost;

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

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Nếu có sự không phù hợp, chỉ cần sửa và khởi động lại Nginx từ thiết bị đầu cuối bằng lệnh sau

sudo systemctl khởi động lại nginx

Sau đó vào trình duyệt và thưởng thức ...


0

Kiểm tra phiên bản fpm php-mysqlcài đặt trên máy chủ và php-fpm.socktrong tệp cấu hình.

sudo nano /etc/nginx/sites-enabled/example.com

Các phiên bản fpm nên giống nhau.

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.