Из-за чего файл PHP в подпапке скачивается а не выполняется(NGINX)?

Ссылка скопирована
1 ответ

По вводным: пытаюсь сделать так, чтобы файл `/install/app.php` выполнялся, а он скачивается.

По вводным: если важно: сайт на phpBB.

Текущий конфиг NGINX

server { server_name cait.ru www.cait.ru; listen 185.135.80.100; rewrite ^ https://$server_name$request_uri? permanent; } server { server_name cait.ru www.cait.ru; listen 185.135.80.100:443 ssl http2; ssl_certificate /home/ssss/domains/cait.ru/ssl.cert; ssl_certificate_key /home/ssss/domains/cait.ru/ssl.key; root /home/ssss/domains/cait.ru/public_html; index index.html index.htm index.php; access_log /var/log/nginx/cait.ru_access_log; error_log /var/log/nginx/cait.ru_error_log; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME /home/ssss/domains/cait.ru/public_html$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT /home/ssss/domains/cait.ru/public_html; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS $https; set $_PHP_COKET unix:/var/run/php8.4-fpm-cait.ru.sock; # Global / — для всего сайта, кроме /install/ (из-за ^~) location / { try_files $uri $uri/ /index.php?q=$uri&$args; } # Global PHP handler (не для /install/, оно в ^~) location ~ \.php$ { try_files $uri =404; fastcgi_pass $_PHP_COKET; # Добавьте аналогичные fastcgi_param, если в location_php.conf их нет } location @php_ZAnyCK { try_files $uri =404; fastcgi_pass $_PHP_COKET; } rewrite ^/wp-content/(.*\.jpg)?$ /wp-content/$1 last; rewrite ^(.*?)(cache|inc|jscript|lofiversion|nunu|skin_acp|style_emoticons|style_images|support|uploads)(.*\.PNG)?$ /C/$1$2$3 last; # nginx configuration #location / {if (!-e $request_filename){rewrite ^(.*)$ /app.php break;}} #location /install/ {if (!-e $request_filename){rewrite ^(.*)$ /app.php break;}} location /config.php {fastcgi_pass $_PHP_COKET;} location /common.php {fastcgi_pass $_PHP_COKET;} location ^~ /viewtopic.php {fastcgi_pass $_PHP_COKET;} location ^~ /viewforum.php {fastcgi_pass $_PHP_COKET;} location ^~ /ucp.php {fastcgi_pass $_PHP_COKET;} location ^~ /style.php {fastcgi_pass $_PHP_COKET;} location ^~ /sitemap.php {fastcgi_pass $_PHP_COKET;} location ^~ /search.php {fastcgi_pass $_PHP_COKET;} location ^~ /report.php {fastcgi_pass $_PHP_COKET;} location ^~ /posting.php {fastcgi_pass $_PHP_COKET;} location ^~ /memberlist.php {fastcgi_pass $_PHP_COKET;} location ^~ /mcp.php {fastcgi_pass $_PHP_COKET;} location ^~ /feed.php {fastcgi_pass $_PHP_COKET;} location ^~ /faq.php {fastcgi_pass $_PHP_COKET;} #location ^~ /install {fastcgi_pass $_PHP_COKET;if (!-e $request_filename){rewrite ^(.*)$ /app.php break;}} #location ^~ /install { # # Добавляем обработку PHP внутри /install # location ~ \.php$ {return 401; # # Убедись, что есть include fastcgi_params; (если нет глобально) # include fastcgi_params; # fastcgi_pass $_PHP_COKET; # } # # Условное перенаправление, как было # if (!-e $request_filename){return 402; # rewrite ^(.*)$ /app.php break; # } # # Если нужны дополнительные параметры (например, для картинок, JS), добавь здесь #} }

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
WordPress-редакция Ответ

Если PHP-файл в подпапке Nginx скачивается, а не выполняется, значит запрос не попадает в location, который передаёт PHP в PHP-FPM. Nginx отдаёт файл как статический, потому что правило для .php не сработало, перекрыто другим location или внутри подпапки есть отдельная логика phpBB.

В конфиге должен быть PHP location примерно такого вида:

location ~ .php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

location ~ .php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/run/php/php8.2-fpm.sock; }

Проверьте, что fastcgi_pass указывает на реальный сокет/порт вашей версии PHP-FPM:

ls -la /run/php/
systemctl status php8.2-fpm

ls -la /run/php/ systemctl status php8.2-fpm

Если есть location для /install/, он может перехватывать запрос раньше. Нужно либо убрать статическую отдачу для этой папки, либо внутри неё разрешить PHP.

Проверьте итоговую конфигурацию:

nginx -T | grep -n "php|install|fastcgi"

nginx -T | grep -n "php|install|fastcgi"

После изменения:

nginx -t
systemctl reload nginx

nginx -t systemctl reload nginx

Никогда не оставляйте PHP-файлы скачиваемыми: так можно раскрыть исходный код и конфиги. Если /install/app.php временный установщик, после установки его лучше удалить или закрыть.

Итог: добавьте/исправьте PHP-FPM location, проверьте, что /install/app.php попадает именно туда, а не в статический location. После правки проверьте nginx -T и перезагрузите Nginx.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно