NGINX+PHP-FPM вообще все запросы перенаправляются на index.php

109
08 июня 2021, 18:20

Настроил NGINX+PHP-FPM, но любые запросы обрабатываются с помощью index.php, например есть директория /a/, содержащая различные файлы, даже если в ней есть index.php, то переход по адресу http://test.loc/a/ будет обрабатываться корневым /index.php, который лежит не в указанной директории, а в корне сайта. Только если конкретно указать http://test.loc/a/index.php, тогда будет обработан правильный index.php. Если же попытаться открыть картинку по адресу http://test.loc/IMG.jpg, то даже если картинка существует, запрос будет обработан через корневой /index.php, со всеми другими ресурсами, которые не *.php. Как это починить? Система Manjaro.

# Это код пула
[me]
user = me
group = me
listen = /var/run/php-fpm/jcp370.sock
listen.owner = http
listen.group = http
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

В fastcgi-php.conf уже указан fastcgi_index

# А вот это код виртуального домена
server {
        listen 80;
        listen [::]:80;
        root /home/me/www/jcp370.loc/www;
        index index.php index.html;
        server_name jcp370.loc;
        access_log /home/me/www/jcp370.loc/logs/access.log combined;
        error_log /home/me/www/jcp370.loc/logs/error.log warn;
        location / {
                try_files $uri $uri/ /index.php?$args;
        }
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php-fpm/jcp370.sock;
                fastcgi_intercept_errors on;
                fastcgi_read_timeout 300;
        }
}

В access.log на все запросы ответ 200. В error.log

2019/08/20 13:59:39 [crit] 25275#25275: *1 stat() "/home/me/www/jcp370.loc/www/" failed (13: Permission denied), client: 127.0.0.1, server: jcp370.loc, request: "GET / HTTP/1.1", host: "jcp370.loc"
2019/08/20 13:59:42 [crit] 25275#25275: *1 stat() "/home/me/www/jcp370.loc/www/admin" failed (13: Permission denied), client: 127.0.0.1, server: jcp370.loc, request: "GET /administrator HTTP/1.1", host: "jcp370.loc"
2019/08/20 14:07:10 [crit] 25663#25663: *1 stat() "/home/me/www/jcp370.loc/www/ad/" failed (13: Permission denied), client: 127.0.0.1, server: jcp370.loc, request: "GET /ad/ HTTP/1.1", host: "jcp370.loc"
2019/08/20 14:07:14 [crit] 25663#25663: *1 stat() "/home/me/www/jcp370.loc/www/ad/wef" failed (13: Permission denied), client: 127.0.0.1, server: jcp370.loc, request: "GET /ad/wef HTTP/1.1", host: "jcp370.loc"
2019/08/20 14:07:17 [crit] 25663#25663: *1 stat() "/home/me/www/jcp370.loc/www/ad/wef3" failed (13: Permission denied), client: 127.0.0.1, server: jcp370.loc, request: "GET /ad/wef3 HTTP/1.1", host: "jcp370.loc"
2019/08/20 14:10:09 [crit] 25663#25663: *9 stat() "/home/me/www/jcp370.loc/www/wef.png" failed (13: Permission denied), client: 127.0.0.1, server: jcp370.loc, request: "GET /wef.png HTTP/1.1", host: "jcp370.loc"
2019/08/20 14:11:35 [crit] 25663#25663: *11 stat() "/home/me/www/jcp370.loc/www/DSC_9416.jpg" failed (13: Permission denied), client: 127.0.0.1, server: jcp370.loc, request: "GET /DSC_9416.jpg HTTP/1.1", host: "jcp370.loc"

Сейчас на директорию сайта рекурсивно стоят 777 права. Думал хоть так прокатит, нет. Полагаю что накосячил где-то в location / {} но на других серверах у меня всё хорошо с таким конфигом.

Answer 1

Пример файла конфигурации nginx для корректной работы с различными скриптами (не только index.php) в директории проекта:

server {
        listen 80;
        listen [::]:80 ipv6only=on;
    # Log files for Debugging
        access_log /var/log/nginx/laravel-access.log;
        error_log /var/log/nginx/laravel-error.log;
    # Webroot Directory for Laravel project
        root /var/www/laravel/public;
        index index.php index.html index.htm;
        # Your Domain Name
        server_name laravel.hakase-labs.co;
        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }
    # PHP-FPM Configuration Nginx
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

Источник

P.S. После изменения конфигурации не забудьте перезапустить nginx.

P.P.S. Конфигурация гарантированно рабочая, т.к. работает как минимум у меня на как минимум 1 машине, точно на скольких - не помню. :)

READ ALSO
Как получить нужные данные из JSON?

Как получить нужные данные из JSON?

Пытаюсь получить данные из Json, но ничего не получается

120
Возвратить массив из функции

Возвратить массив из функции

Данная функция должна возвратить массив с папками БЕЗ использования глобальных переменныхПодскажите, пожалуйста, как это сделать?

178
Не добавляется телефон в amocrm

Не добавляется телефон в amocrm

ЗадачаСоздать контакт и добавить к нему телефон

196