Nginx служит .php файлам в качестве загрузок, вместо их выполнения

Я устанавливаю сайт в капле (Digital Ocean). У меня есть проблема для правильной установки NGINX с PHP. Я сделал учебник https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04, но когда я пытаюсь запустить некоторый .php файл, он просто загружает его... например... http://5.101.99.123/info.php он работает, но... Если я перейду к основному http://5.101.99.123, он загрузит мой index.php:/

Любая идея?

-rw-r--r--  1 agitar_user www-data   418 Jul 31 18:27 index.php
-rw-r--r--  1 agitar_user www-data    21 Aug 31 11:20 info.php

Мой/etc/nginx/sites-available/default

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

        root /var/www/html;
        index index.html index.htm index.php;

        # Make site accessible from http://localhost/
        server_name agitarycompartir.com;

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


              location / {

                    try_files $uri $uri/ =404;
                    # Uncomment to enable naxsi on this location
                    # include /etc/nginx/naxsi.rules
            }

... Другие "местоположение" прокомментированы (#)

Ответ 1

Попробуй это:

  1. Отредактируйте /etc/nginx/sites-available/default

  2. Раскомментируйте обе строки прослушивания, чтобы заставить nginx прослушивать порт 80 IPv4 и IPv6.

    listen   80; ## listen for ipv4; this line is default and implied
    listen   [::]:80 default_server ipv6only=on; ## listen for ipv6
    
  3. Оставьте server_name покое

    # Make site accessible (...)
    server_name localhost;
    
  4. Добавьте index.php к строке index

    root /usr/share/nginx/www;
    index index.php index.html index.htm;
    
  5. Раскомментировать location ~ \.php$ {}

    # pass the PHP scripts to FastCGI server listening on (...)
    #
    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;
    }
    
  6. Отредактируйте /etc/php5/fpm/php.ini и убедитесь, что cgi.fix_pathinfo имеет значение 0

  7. Перезапустите nginx и php5-fpm sudo service nginx restart && sudo service php5-fpm restart Перезапустите nginx и sudo service nginx restart && sudo service php5-fpm restart


Я только начал использовать Linux неделю назад, поэтому я очень надеюсь помочь вам в этом. Я использую текстовый редактор Nano для редактирования файлов. запустите apt-get install nano, если у вас его нет. Google на это, чтобы узнать больше.

Ответ 2

Вам нужно добавить это в /etc/nginx/sites-enabled/default для запуска файлов php на Nginx Server:

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

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

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

Ответ 3

У меня была аналогичная проблема, которая была решена с помощью освобождения кеша браузера (также отлично работала с другим браузером).

Ответ 4

Обновите конфигурацию nginx/etc/nginx/sites-available/default или ваш файл конфигурации

если вы используете php7 используйте это

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;      
    }

если вы используете php5 используйте это

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }

Посетите здесь для более подробной информации Подробнее здесь

Ответ 5

У меня была такая же проблема, и ни один из ответов не разрешил проблему.

Я побежал:

sudo nginx -t

проверить файл конфигурации на /etc/nginx/sites -available/default.

Он дал мне эти ошибки:

nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115
nginx: configuration file /etc/nginx/nginx.conf test failed

Итак, я зашел в конфигурационный файл, а на последней строке был

#}

Я раскоментировал, снова запустил тестовую команду и работал

Ответ 6

Это работало для меня.

1) Файл MyApp

vi/etc/nginx/sites-available/myApp

server {
  listen 80;
  listen [::]:80;

  root /var/www/myApp;
  index index.php index.html index.htm;

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

Пользователи PHP5

Изменить

fastcgi_pass unix:/run/php/php7.0-fpm.sock;

к

fastcgi_pass unix:/var/run/php5-fpm.sock;

2) Настроить cgi.fix_pathinfo

Установите cgi.fix_pathinfo в 0

Расположение:

PHP5  /etc/php 5/fpm/php.ini

PHP7  /etc/php/ 7.0/fpm/php.ini


3) Службы перезагрузки

МПФ

php5 sudo service php5-fpm restart

php7 sudo service php7.0-fpm restart

NGINX

sudo service nginx restart

Ответ 7

Я видел много решений выше, и многие из них работали правильно для меня, но я не понимал, что они делают, и боялся просто скопировать код, в частности, fastcgi. Так вот мои 2 цента,

  1. nginx - это веб-браузер (а не браузер приложения), поэтому он может обслуживать только статические страницы.
  2. всякий раз, когда мы пытаемся отрендерить/вернуть файл .php, например index.php, nginx не знает, что делать, поскольку он просто не может понять файл .php (или, в этом отношении, любое расширение, кроме нескольких избранных). как .html,.js и т.д., которые являются статическими файлами)
  3. Таким образом, для запуска других типов файлов нам нужно что-то, что находится между nginx и приложением (здесь приложение php). Именно здесь вступает в действие интерфейс общего шлюза (CGI). Это часть программного обеспечения, которая управляет этой связью. CGI могут быть реализованы на любом возможном языке Python (uWSGI), PHP (FPM) и даже C. FastCGI - это в основном обновленная версия CGI, которая намного быстрее, чем CGI.

Для некоторых серверов, таких как Apache, имеется встроенная поддержка для интерпретации PHP и, следовательно, нет необходимости в CGI.

Эта цифровая океанская ссылка довольно хорошо объясняет шаги по установке FPM, и я не пишу шаги, необходимые для решения проблемы загрузки php файлов вместо рендеринга, так как остальные ответы ИМХО довольно хороши.

Ответ 8

Если какой-либо из предложенных ответов не работает, попробуйте следующее:

1.fix www.conf в etc/php5/fpm/pool.d:

listen = 127.0.0.1:9000;(delete all line contain listen= )

2.fix nginx.conf в usr/local/nginx/conf:

remove server block server{} (if exist) in block html{} because we use server{} in default (config file in etc/nginx/site-available) which was included in nginx.conf.

3. исправить файл по умолчанию в etc/nginx/site-available

location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; }

Служба 4.restart nginx

sudo service nginx restart

5.restart php service

перезапуск службы php5-fpm

6.Enjoy

Создайте любой php файл в /usr/share/nginx/html и запустите его в "server_name/file_name.php" (имя_сервера зависит от вашей конфигурации, normaly - localhost, file_name.php - имя файла, созданного в /usr/share/nginx/html ).

Я использую Ubuntu 14.04

Ответ 9

Для меня это помогло добавить ?$query_string в конец /index.php, как показано ниже:

location / {
        try_files $uri $uri/ /index.php?$query_string;
}

Ответ 10

Ответ выше, казалось, слишком сильно закомментировал решение, которое я достиг. Вот как выглядел мой файл:

/и т.д./Nginx/сайты-доступные/по умолчанию

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

Надеюсь, это поможет некоторым людям, которые разочарованы в воскресенье днем ​​(c:

Ответ 11

Для тех, кто имеет ту же проблему с PHP 7, это то, что я сделал, чтобы сделать nginx корректно исполнять php файлы в CentOS 7, размещенные здесь, поэтому в случае любой проблемы, имеющей такую ​​же проблему:

  • Следуйте пошагово этому документу на Digital Ocean.

  • Откройте /etc/nginx/conf.d/default.conf (по умолчанию у меня нет сайтов и недоступных сайтов, вы можете редактировать соответственно).

  • Отредактируйте параметр location, как показано ниже:

default.conf:

location ~ \.php$ {
    try_files $uri =404;
    #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;

    #instruct nginx execute php7 files instead download them :D
    fastcgi_pass unix:/var/run/php-fpm/www.sock;

    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  • Перезапустите службы Nginx и PHP sudo systemctl restart php-fpm и sudo systemctl restart nginx.

  • Последний, но самый важный, очистить кеш браузера или запустить в incognito (Chrome) или Private Browsing (Firefox) и т.д.

Надеемся на это полезное и счастливое кодирование

Ответ 12

Моим решением было добавить

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

в мой пользовательский файл конфигурации, например etc/nginx/sites-available/example.com.conf

Добавление в /etc/nginx/sites-available/default не помогло мне.

Ответ 13

В моем случае я не использовал /etc/nginx/sites-available/default Я использовал другой файл конфигурации блока сервера (например, example.com), и единственный способ решить эту проблему - это удалить сервер по умолчанию. символьная ссылка на файл конфигурации блока:

$ rm /etc/nginx/sites-enabled/default

затем перезагрузите Nginx:

$ sudo systemctl reload nginx

Ответ 14

Что работало для меня с Ubuntu 16.04, а php7 удаляло эту строку

fastcgi_split_path_info ^(.+\.php)(/.+)$;

После этого перестала загружаться php файлы.

Ответ 15

Раскомментировать расположение .php в /etc/nginx/sites -available/default

sudo vi/etc/nginx/sites-available/default:

location ~ \.php$ {
            include snippets/fastcgi-php.conf;

            # With php5-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

Ответ 16

Если что-то еще вам не поможет. И, возможно, раньше вы установили apache2 с тестовым файлом info.php. Просто очистите данные приложения (кеш, cookie) для локального хоста.

Ответ 17

проверьте, что расширение вашего файла nginx - *.conf.
например:/etc/nginx/conf.d/myfoo.conf

У меня такая же ситуация. После того, как я переименую свой файл конфигурации из myfoo в myfoo.conf, он исправлен. Не забудьте перезапустить nginx после его переименования.

Ответ 18

Сначала вы должны Remove cache в своем браузере

Затем откройте терминал и запустите следующую команду:

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

Затем добавьте следующий код в файл default:

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

Если какое-либо несоответствие только исправления и перезапуск Nginx из терминала с помощью следующей команды

sudo systemctl restart nginx

Затем перейдите в браузер и наслаждайтесь...

Ответ 19

Для меня это была строка: fastcgi_pass unix: /var/run/php5-fpm.sock;

который должен был быть просто: fastcgi_pass unix: /run/php5-fpm.sock;

Ответ 20

Я собирался сойти с ума, пытаясь это исправить, для меня проблема заключалась в том, что Cloudflare кэшировал файл php и продолжал заставлять меня скачивать его.

Решением для меня было очистить кеш на Cloudflare.

Ответ 21

У меня была та же проблема, которая решила, что этот блок сервера также имеет этот блок над другими блоками местоположения, если у вас проблемы с загрузкой css Который я добавил в свой сайт, доступен файл conf.

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info  ^(.+\.php)(/.+)$;
fastcgi_index            index.php;
fastcgi_pass             unix:/var/run/php/php7.3-fpm.sock;
include                  fastcgi_params;
fastcgi_param   PATH_INFO       $fastcgi_path_info;
fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Ответ 22

Так что это то, что, наконец, сработало в моем случае, как переписать правила, где виновник
Я изменил правила перезаписи nginx следующим образом.

   location /vendors { rewrite ^/vendors/?$ /vendors.php break; } 

становится...

  location /vendors { rewrite ^/vendors/?$ /vendors.php last; }

Очевидно, что без последнего ключевого слова запрос не был перезапущен, поэтому он никогда не попадал в сегмент местоположения .php и был просто интерпретирован как загрузка -

Ответ 23

для записи, я обнаружил, что мой php-fpm не работает, и я исправил его с service php7.2-fpm stop

Ответ 24

Теперь я решил свою проблему с помощью этого кода (измените свой IP-адрес):

location / {
access_log off;
    log_not_found  off;
    client_max_body_size    2000m;
    client_body_buffer_size 512k;
    proxy_buffering on;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
    proxy_buffer_size 64k;
    proxy_buffers 32 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_connect_timeout 300s;
    proxy_http_version 1.1;
    proxy_set_header Range "";
    proxy_pass   https://123.123.123.123:444;
    proxy_set_header   Host   $host;
    proxy_set_header   X-Real-IP  $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
    proxy_redirect     off;
}

Ответ 25

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

    root /var/www/html;
    index index.php index.html index.htm;

    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
}

Приведенные выше фрагменты помогли мне в случае php7.2