Nginx скачивает php файлы вместо выполнения
Hey, So I am having a lot of problems with nginx lately. As of nginx is not accepting my php file to put it on my sub domain. I have setup php-fpm etc. I need help with it and below is the config.
Also the directory where the file is present root /var/www and server_info won’t be shown as I don’t wanna.
I have also did the php-fpm for php7.1 as that was available.
Thanks/ Kind regards, /shar.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.
@hansen and @jtittle Thanks for all the help. The File is up and runnung! I had to fix snippets/fastcgi-php.conf .
After that it workd.
So thanks alot guys!
The first thing I normally recommend is cleaning up the server block and removing the clutter so you aren’t accidentally running in to issues with various lines should they happen to cause issues.
So your cleaned up server block would look like this:
Note, on your include snippets/fastcgi-php.conf line, you’re missing a ; at the end. I’ve fixed that in the above :-).
From there, how PHP is handled depends on what’s within the block starting with:
The first thing I see is:
So we’d need to know what’s in that file to know if there’s something causing issues. You can also check the error log using the command that @hansen provided:
Generally, when it comes to PHP, you’d have something that looks like this instead of what you have right now:
Within snippets/fastcgi-php.conf , I’d use:
Once those changes are made, restart NGINX and see if everything is working. If not, check the error log to see what it’s showing and paste that to a code block as a reply and we can better help.
Others "location" are commented.
Yes. you didn't set up PHP-FPM with Nginx correctly. That's all we can tell you though since you didn't show us any of your config.
Whichever file (or files) you put your config in. The relevant part being. where you set up PHP-FPM in your Nginx config.
5.перезапустить php сервис
Leave server_name alone
Edit /etc/php5/fpm/php.ini and make sure cgi.fix_pathinfo is set to 0
Edit /etc/nginx/sites-available/default
раскомментируйте обе линии прослушивания, чтобы nginx прослушивал порт 80 IPv4 и IPv6.
29 Answers 29
Добавьте index.php в строку index
6.наслаждайтесь
создайте любой php файл в /usr/share/nginx/html и запустите в "имя_сервера / имя_файла.РНР" (имя_сервера зависит от вашей конфигурации,обычно это localhost, имя_файла.php-это имя файла, который создан в /usr/share/nginx / html ).
Я использую Ubuntu 14.04
ответ выше, казалось, комментировать слишком много для решения, которое я достиг. Вот как выглядел мой файл:
/etc/nginx/sites-available / default
надеюсь, что это поможет некоторым людям, которые разочарованы в воскресенье днем (c:
для меня это помогло добавить ?$query_string в конце /index.php, как показано ниже:
что работало для меня с Ubuntu 16.04, и php7 удалял эту строку
fastcgi_split_path_info ^(.+\.php)(/.+)$;
после этого он перестал загружать php-файлы.
следуйте шаг за шагом этот документ на Цифровой Океан.
открыть /etc/nginx/conf.d/default.conf (по умолчанию у меня нет сайтов-включен или сайты-доступны, вы можете редактировать соответственно).
редактировать location параметр as ниже:
перезапустить службы Nginx и PHP sudo systemctl restart php-fpm и sudo systemctl restart nginx .
последнее, но самое главное, очистить кэш браузера или работает в incognito (Chrome) или Private Browsing (Firefox) etc.
раскомментировать .расположение php в /etc/nginx/sites-доступно / по умолчанию
sudo vi / etc/nginx/sites-доступно / по умолчанию:
Если что-то еще не поможет вам. И, возможно, ранее вы установили apache2 с информация.тестовый файл php. Просто очистите данные приложения (кэш,cookie) для localhost.
проверьте расширение файла конфигурации nginx *.конф.
например: /etc/nginx / conf.d / myfoo.confУ меня такая же ситуация. После того, как я переименую мой конфигурационный файл из myfoo в myfoo.конф, это исправлено. Не забудьте перезапустить nginx после переименования.
сначала надо Remove cache в браузере
затем откройте терминал и выполните следующую команду:
затем добавьте следующий код в тег default file:
sudo systemctl перезапустить nginx
затем перейдите в браузер и наслаждайтесь .
для меня это была линия: fastcgi_pass unix:/var/run/php5-fpm.носок;
, который должен был быть просто: fastcgi_pass unix:/run / php5-fpm.носок;
Не ставить пакет php.
так там для c7 не предлагают php ставить, только php-fpm. ошибся, пора спать.
Deleted ( 02.02.17 00:37:13 )
Последнее исправление: Deleted 02.02.17 00:40:25 (всего исправлений: 1)
Паставить, а потом отключить. Нахуа?
Вот так весело собирают пакеты в центоси. Когда у меня krfb и krdc оказались в одном пакете и ставились только вместе - я тоже был удивлён.
Ставь «nginx php5». Есть подозрение, что по зависимостям вылезают какие-то апачевские либы и модули.
Я ещё раз говорю, что всё сделал по инструкции. Установил php-fpm - не заработало, на всякий случай установил php - всё равно не заработало.
Не очень понимаю механику. С apache php соединяется при помощи модуля, для nginx такого модуля нет, но нужно запустить php-fpm «systemctl start php-fpm.service». Всё остальное тоже выполнил. Где искать ошибку?
а если телнетом на порт php-fpm стукануть, то что потдается?
Ну, если даже инструкция с самого РУСЛИНУКСНЕТ не работает, то совершенно очевидно, что способов запустить лемп-стек на центоси не существует.
Ставишь nginx + php + php-fpm , в nginx.conf :
Стартуешь демон php-fpm и проверяешь результат :)
Тогда еще в конфиге пула php-fpm надо на этот сокет поменять, по дефолту там 9000 порт.
а если телнетом на порт php-fpm стукануть, то что потдается?
В подходе. Для начала разберись в общих чертах как эта связка должна работать, а потом уже настраивай её. Тебе ведь её потом эксплуатировать.
Не надо пытаться слепо повторить инструкцию.
В общих чертах понимаю, что к nginx php привязывается через fastcgi-интерфейс php-fpm, а к apache с помощью модуля mod_php.
В /etc/php-fpm.conf есть строки:
В /etc/nginx/nginx.conf есть:
sunny1983 ★★★★★ ( 02.02.17 15:34:30 )
Последнее исправление: sunny1983 02.02.17 15:35:36 (всего исправлений: 1)
У меня до php-fpm клиентские запросы кажется на доходят?
Покажи весь конфиг.
nginx обращается к демону php-fpm по протоколу FastCGI через unix или обычный сетевой сокет. Домен php-fpm запускает воркеры которые исполняют php-скрипты.
А вот это вот что такое:
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
И почему директория логов php-fpm находится внутри директории логов nginx?
Хотел в этот же блок добавить location ~ \.php$ но nginx ругаясь в логах на неправильный конфиг. Тогда я добавил location ~ \.php$ в default_server
Тогда я добавил location ~ \.php$ в default_server
Ладно, буду дальше курить доки по nginx. Я думал, что «_» (default_server) это глобальные настройки всех виртуальных хостов.
А может в jobs? За два килорубля настрою тебе LEMP. Ну или за килорубль, если на дебиане
Демпингую на 500 WMR :-D
А чё не сразу до одного доширака?
Так неинтересно. Должен быть аукцион дух состязания.
А вообще: не получится настроить php-fpm, повесь на бекенд Апач.
sunny1983 ★★★★★ ( 02.02.17 18:37:54 )
Последнее исправление: sunny1983 02.02.17 18:41:06 (всего исправлений: 2)
Ладно, ладно) Ты если чё пиши, не стесняйся, мы тут.
Ты опять все усложнил.
Ну ок, читай документацию дальше. Пока-что ты прочёл явно недостаточно. Или понял недостаточно.
Держи конфиг, не мучайся
Для каждого домена я делал свой конфиг.
Закомментируй стандартные настройки (все секции server) в
. Почистить кеш в браузере.
Конфиг owncloud, может кстати кому то еще пригодиться:
Так,
Если другие версии (сборки) ngninx и php-fpm данная инструкция сработает?
У меня установлены nginx 1.10.2 из epel, php и php-fpm 5.4.16 из base.
То что у тебя в nginx.conf в директиве listen не стоит default_server это нормально?
Нормально, зависит от конфигурации.
Да должно сработать конечно. Про кеш в браузере не забывайте очистить.
Сменил в конфигах tcp-сокет на файл сокета unix:/var/run/php-fpm/php-fpm.sock, почистил кэш - по прежнему нифига.
Для тех кто не читал переписку, любые попытки добавить директивы fastcgi_* куда-либо кроме default_server приводят к тому, что nginx отказывается запускаться.
Мой / etc / nginx / sites-available / default
Прочие «локации» прокомментированы .
Перезапустите nginx и php5-fpm sudo service nginx restart && sudo service php5-fpm restart
Я начал использовать Linux только неделю назад, поэтому очень надеюсь помочь вам в этом. Я использую текстовый редактор nano для редактирования файлов. запустите apt-get install nano, если у вас его нет. Google, чтобы узнать больше.
Я долго боролся с этой проблемой, и эти шаги у меня сработали.
Шаг 1. Конфигурация блока расположения для всех файлов PHP
Шаг 2. Добавьте fastcgi_param в файл конфигурации. Нам просто нужно открыть файл / etc / nginx / fastcgi_params и добавить следующую строку в конец файла.
А затем перезапустите службы,
Вам нужно добавить это в / etc / nginx / sites-enabled / default для выполнения файлов php на сервере Nginx:
У меня была аналогичная проблема, которая была решена путем очистки кеша браузера (также отлично работала с другим браузером).
Обновите конфигурацию nginx / etc / nginx / sites-available / default или свой файл конфигурации
Если вы используете php7, используйте это
Если вы используете php5, используйте это
Посетите здесь, чтобы получить полную информацию. Подробности здесь
Я вижу много решений выше, и многие из них работали у меня правильно, но я не понимал, что они делают, и беспокоился о том, чтобы просто скопировать и вставить код, в частности, fastcgi . Итак, вот мои 2 цента,
- nginx - это веб-сервер (а не сервер приложений ), поэтому он может обслуживать только статические страницы.
- всякий раз, когда мы пытаемся отобразить / вернуть файл .php, например index.php, nginx не знает, что делать, поскольку он просто не может понять файл .php (или, если на то пошло, любое расширение, кроме нескольких избранных, таких как .html, .js и т. д., которые являются статическими файлами)
- Таким образом, для запуска других типов файлов нам нужно что-то, что находится между nginx и приложением (здесь приложение php). Именно здесь на помощь приходит общий интерфейс шлюза (CGI). Это часть программного обеспечения, которое управляет этой связью. CGI могут быть реализованы на любом возможном языке Python (uWSGI), PHP (FPM) и даже C. FastCGI - это, по сути, обновленная версия CGI, которая намного быстрее, чем CGI.
Для некоторых серверов, таких как Apache, встроена поддержка интерпретации PHP, и поэтому нет необходимости в CGI.
Эта цифровая ссылка на океан довольно хорошо объясняет шаги по установке FPM, и я не пишу шаги, необходимые для решения проблемы загрузки файлов php вместо рендеринга, поскольку другие ответы IMHO довольно хороши.
Для тестирования файла конфигурации в / etc / nginx / sites-available / default.
Это дало мне следующие ошибки:
Итак, я зашел в файл конфигурации, и в последней строке было
Я раскомментировал, снова запустил тестовую команду, и она сработала
Это сработало для меня.
1) Файл MyApp
Vi / и т. д. / nginx / сайты-доступные / myApp
2) Настройте cgi.fix_pathinfo
Установите cgi.fix_pathinfo в 0
3) Перезапустите службы
Php5 sudo service php5-fpm restart
Php7 sudo service php7.0-fpm restart
Мне помогло добавить ?$query_string в конец /index.php, как показано ниже:
listen = 127.0.0.1:9000;(delete all line contain listen= )
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.
Restart nginx and php5-fpm sudo service nginx restart && sudo service php5-fpm restart
I have just started using Linux a week ago, so I really hope to help you on this. I am using nano text editor to edit the files. run apt-get install nano if you don't have it. Google on it to know more.
@Joy, tried your suggestion but it didn't worked. Had to use fastcgi_pass unix:/run/php/php7.0-fpm.sock;
For php7.2: unix:/var/run/php5-fpm.sock; convert to unix:/var/run/php/php7.2-fpm.sock; (one more nesting /php )
I had similar problem which was resolved by emptying the browser cache (also worked fine with different browser).
It was strange to me that my site worked on IE and chrome while in mozilla it downloded the site intead of executing it. It was mozilla's cache fault.
You need to add this to /etc/nginx/sites-enabled/default to execute php files on Nginx Server:
@AndrewFox- my filename is php7.0-fpm.pid and not php7.0-fpm.sock in /var/run/php/ what does that mean?
@vsync try it. sudo service php7.0-fpm restart . if sock is missing it indicates that php process is being run.
I see a lot of solutions above and many worked correctly for me, but I didn't understand what they were doing and was worried of just copy pasting the code, specifically, fastcgi. So here are my 2 cents,
- nginx is a web server (and not an application server) and thus, it can only serve static pages.
- whenever, we try rendering/returning a .php file, for example index.php, nginx doesn't know what to do, since it just can't understand a .php file (or for that matter any extension apart from a select few like .html, .js etc. which are static files)
- Thus in order to run other kinds of files we need something that sits between nginx and the application (here the php application). This is where common gateway interface (CGI) comes in. It's a piece of software that manages this communication. CGIs can be implemented in any possible language Python (uWSGI), PHP (FPM) and even C. FastCGI is basically an upgraded version of CGI which is much much faster than CGI.
For some, servers like Apache, there is built in support to interpret PHP and thus no need for a CGI.
This digital ocean link, explains the steps to install FPM pretty well and I am not writing the steps needed to solve the issue of php files getting downloaded instead of rendering since the other answers IMHO pretty good.
мой /etc/nginx / sites-доступно / по умолчанию
Раскомментируйте обе строки прослушивания, чтобы nginx прослушивал порт 80 IPv4 и IPv6.
5. перезапустите службу php
Изменить /etc/nginx/sites-available/default
Uncomment location ~ \.php$ <>
раскомментировать location ~ \.php$ <>
Edit /etc/nginx/sites-available/default
6. наслаждаться
Создайте любой файл php в / usr / share / nginx / html и запустите в «имя_сервера / имя_файла.php» (имя_сервера зависит от вашей конфигурации, обычно это localhost, имя_файла.php - имя файла, созданного в / usr / share / nginx / html).
Я использую Ubuntu 14.04
Приведенные выше фрагменты работали для меня в случае php7.2
Приведенный выше ответ, казалось, слишком много комментировал решение, которое я достиг. Вот как выглядел мой файл:
/ и т.д. / nginx / сайты-доступные / по умолчанию
Надеюсь, это поможет некоторым людям, которые расстроены воскресным днем (c:
Мое решение было добавить
Добавление в /etc/nginx/sites-available/default у меня не сработало.
Для тех, у кого такая же проблема с PHP 7, это то, что я сделал, чтобы nginx правильно выполнял файлы php в CentOS 7, размещенный здесь, поэтому на случай, если у кого-то возникнет такая же проблема:
Пошагово следуйте этому документу на Цифровой океан.
Откройте /etc/nginx/conf.d/default.conf (по умолчанию у меня нет сайтов с включенными или доступными сайтами, вы можете отредактировать их соответствующим образом).
Отредактируйте параметр location , как показано ниже:
Перезапустите службы Nginx и PHP sudo systemctl restart php-fpm и sudo systemctl restart nginx .
И последнее, но самое важное: очистить кеш браузера или запустить его в incognito (Chrome) или Private Browsing (Firefox) и т. Д.
Надеюсь, это полезное и счастливое кодирование
Затем перезагрузите Nginx:
Это то, что в конечном итоге сработало в моем случае как правила перезаписи, в которых виноват
Я изменил правила перезаписи nginx следующим образом.
Очевидно, без ключевого слова last запрос не был перезапущен, поэтому он не попал в сегмент местоположения .php и был просто интерпретирован как загрузка -
Теперь я решил свою проблему с помощью этого кода (измените свой IP):
Что сработало для меня с Ubuntu 16.04, а php7 удалял эту строку
После этого он перестал скачивать файлы php.
Раскомментируйте расположение .php в / etc / nginx / sites-available / default
sudo vi / etc / nginx / sites-available / default:
Если что-то еще тебе не поможет. А может быть, раньше вы установили apache2 с тестовым файлом info.php. Просто очистите данные приложения (кеш, cookie) для localhost.
Проверьте, что расширение файла конфигурации nginx - * .conf.
например: /etc/nginx/conf.d/myfoo.conf
У меня такая же ситуация. После того, как я переименовал свой файл конфигурации с myfoo в myfoo.conf, он исправился. Не забудьте перезапустить nginx после его переименования.
Сначала вам нужно Remove cache в браузере
Затем откройте терминал и выполните следующую команду:
Затем добавьте следующий код в файл default :
Если какое-либо несоответствие, просто исправьте и перезапустите Nginx с терминала с помощью следующей команды
sudo systemctl перезапустить nginx
Затем перейдите в браузер и наслаждайтесь .
Для меня это была строка: fastcgi_pass unix: /var/run/php5-fpm.sock;
Что должно было быть просто: fastcgi_pass unix: /run/php5-fpm.sock;
Решением для меня было очистить кеш Cloudflare.
У меня была та же проблема, которая решила, что этот блок сервера также имеет этот блок над другими блоками местоположения, если у вас есть проблемы с загрузкой css. Который я добавил в свой файл conf, доступный для сайтов.
Для записи, я обнаружил, что мой php-fpm не работает, и исправил это с помощью service php7.2-fpm stop
(Я настраивал этот сервер в первую очередь для электронной почты и не использовал PHP, когда впервые установил nginx, просто как способ более легкого запуска certbot.)
добавить index.php до index строка
Отредактируйте /etc/php5/fpm/php.ini и убедитесь, что для cgi.fix_pathinfo установлено значение 0
оставить server_name только
4. перезапустить службу nginx
Edit /etc/php5/fpm/php.ini и убедится cgi.fix_pathinfo установлен к 0
Оставьте server_name в покое
Uncomment both listen lines to make nginx listen on port 80 IPv4 and IPv6.
4.перезапустите службу nginx
sudo service nginx restart
Раскомментировать location ~ \.php$ <>
перезагрузите nginx и php5-fpm (если вы не знаете, как это сделать, перезагрузите сервер)
вам нужно добавить это в /etc/nginx/sites-enabled / default для выполнения php-файлов на сервере Nginx:
У меня была аналогичная проблема, которая была решена путем очистка кэша браузера (также отлично работал с другим браузером).
обновить nginx config / etc/nginx/sites-доступно / по умолчанию или ваш файл конфигурации
Если вы используете php7 используйте это
Если вы используете php5 используйте это
посетите здесь для получения полной информации здесь
это сработало для меня.
1) MyApp file
vi / etc/nginx/sites-available / myApp
пользователи PHP5
изменить
до
2) Настройка cgi.fix_pathinfo
установить cgi.fix_pathinfo для 0
Location:
PHP5 / etc/php5/fpm / php.ini
PHP7 /etc/php/7.0/fpm / php.ini
3) перезапустите службы
FPM
php5 sudo service php5-fpm restart
php7 sudo service php7.0-fpm restart
NGINX
listen = 127.0.0.1:9000;(delete all line contain listen= )
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.
Add index.php to the index line
Читайте также: