Назад | Перейти на главную страницу

nginx / php / fastcgi: файлы php из дополнительных каталогов не оцениваются как php

я бегу nginx-1.14.0 с участием php-fpm7.2. Когда я получаю доступ к файлам php, которые находятся в root, они правильно отправляются через fastcgi, и их php правильно оценивается. Однако, когда я получаю доступ к файлам php - даже с тем же содержимым - из вторичных каталогов сайта, они отправляются обратно как BIN данные и не отправленные через fastcgi для оценки как php.

Вот соответствующие элементы в моем файле конфигурации nginx ...

server {

    ... etc. ...

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

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ ^/(fm)(/?$|/.+\.php) {
        alias /usr/share/nginx/$1$2;
        # I get the same results with "alias $1$2;"
        include phpsite_params;
    }

    location ~ ^/(css|static|img|js)($|/.*) {
        alias $1$2;
    }

    location ~ \.php$ {
        include phpsite_params;
    }
}

В /usr/share/nginx/html/index.php файл правильно проходит через fastcgi и оценивается как php, когда я отправляю этот URL: http://example.com.

Однако /usr/share/nginx/fm/index.php файл просто отправляется мне в виде простого текста без оценки php, когда я отправляю этот URL: http://example.com/fm, а также этот URL: http://example.com/fm/, а также этот URL: http://example.com/fm/index.php.

Вот содержание phpsite_params ...

fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_read_timeout 600;
include fastcgi_params;

... а вот содержимое fastcgi_params ...

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     $request_filename;
fastcgi_param   SCRIPT_NAME         $fastcgi_script_name;
fastcgi_param   REQUEST_URI         $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;

fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;

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

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;

Что я делаю не так в своей конфигурации?

Заранее благодарим вас за любую помощь или предложения.

ОБНОВИТЬ: Я добавил следующий раздел в свой файл конфигурации nginx, и он работает правильно. Но в этом месте не используется PHP, и, следовательно, это указывает на то, что ошибка конкретно связана с fastcgi.

    location ~ ^/(junk)($|/.*) {
        alias $1$2;
        autoindex on;
    }

Может ли кто-нибудь придумать что-нибудь в fastcgi или php-fpm, что могло бы вызвать мою проблему?

Я добился того, что он работает через множество проб и ошибок. Я не уверен, почему мне не удалось заставить оригинал работать, но следующее работает правильно и возвращает тот же результат для всех трех URL-адресов ... http://example.com/fm, http://example.com/fm/, и http://example.com/fm/index.php ...

rewrite ^/(fm)$ /$1/ permanent;

location ~* ^/(fm)/(.*)$ {
    index index.php;
    alias /usr/share/nginx/$1/$2;
    try_files "" /$1/index.php;
    include phpsite_params;
}

Мне нужно было переписать, потому что я не мог понять, как заставить это работать для http://example.com/fm если схема расположения была такой: ^/(fm)(/?.*)$

В /fm/ сайт имеет подкаталоги, такие как icon, и поэтому относительные URL-адреса, такие как icon/icon1.jpg должны работать, в дополнение к /fm/index.php URL.

Если кто-нибудь может предложить способ сделать всю эту работу без rewrite, Буду признателен.