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
Попробуй это:
-
Отредактируйте /etc/nginx/sites-available/default
-
Раскомментируйте обе строки прослушивания, чтобы заставить nginx прослушивать порт 80 IPv4 и IPv6.
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default_server ipv6only=on; ## listen for ipv6
-
Оставьте server_name
покое
# Make site accessible (...)
server_name localhost;
-
Добавьте index.php
к строке index
root /usr/share/nginx/www;
index index.php index.html index.htm;
-
Раскомментировать 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;
}
-
Отредактируйте /etc/php5/fpm/php.ini
и убедитесь, что cgi.fix_pathinfo
имеет значение 0
-
Перезапустите 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 цента,
- 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 файлов вместо рендеринга, так как остальные ответы ИМХО довольно хороши.
Ответ 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