Конфигурация Nginx для sudirectory с PHP возвращает 404 - PullRequest
0 голосов
/ 23 октября 2018

У меня есть сайт www.example.com, использующий пользовательскую среду PHP и CMS, которая загружает совершенно другую среду.Первоначально он был на apache2, а сейчас я пытаюсь перейти на nginx.Домен www загружает файл, но когда дело доходит до загрузки кодовой базы в подкаталоге, он просто возвращает 404 на моем nginx.Если я переключаюсь обратно на apache2, он загружается нормально.Вот мой конфиг, который я в основном искал из ответов на другие запросы stackoverflow:

server {
listen 80 default;
client_max_body_size 256M;
access_log /var/log/nginx/site.access.log;

root /site;
index index.php;

if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
}

location ~ \.php$ {
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/site_php_errors.log";
    fastcgi_buffers 32 32k;
    fastcgi_buffer_size 64k;
    include fastcgi_params;
}

location /cms {
    root /cms/;
}

location ~ /cms/.+\.php$ {
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/site_php_errors.log";
    fastcgi_buffers 32 32k;
    fastcgi_buffer_size 64k;
    include fastcgi_params;
}

}

Я пытался этот ответ , но мне не повезло.У меня должна быть какая-то базовая конфигурация, неправильно настроенная, но я не могу понять, какая именно..Htaccess в / cms выглядит следующим образом:

RewriteEngine On
RewriteBase /cms

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]

Редактировать : обновил конфигурацию, используя этот пример , и теперь я могу войти в CMS, но этонемедленно входит в цикл перенаправления 302, который я не могу понять, почему это происходит:

server {
listen 80 default_server;

# client_max_body_size 256M;

root /application;

index index.php;

server_name _;

# access_log /var/log/nginx/application.access.log;

location / {
   try_files $uri $uri/ /index.php$is_args$args;
}

location /cms {
        alias /application/cms;
        try_files $uri $uri/ @cms;

        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass php-fpm:9000;
        }
    }

location @cms {
    rewrite /cms/(.*)$ /cms/index.php?/$1 last;
}

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
    fastcgi_buffers 32 32k;
    fastcgi_buffer_size 64k;
}

}

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Обратите внимание, что веб-серверы NGINX не читают .htaccess.Таким образом, должно быть, что предоставленный вами .htacces вообще не читается.

Вы можете попытаться преобразовать его в аналог NGINX.увидеть принятый ответ в этом вопросе stackoverflow.Это может помочь вам

Изменить файл Apache .htaccess для использования с Nginx

0 голосов
/ 23 октября 2018

Я думаю, что я нашел вашу проблему, в вашем фактическом коде, эту часть: location ~ \.php$ { ожидайте найти файл вызова .php, поэтому у вас всегда есть ошибка 404.Просто обновите это так:

location ~ index.php$ {
    include fastcgi_params;
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
    fastcgi_buffers 32 32k;
    fastcgi_buffer_size 64k;
}

Я рекомендую вам использовать: fastcgi_pass unix:/run/php/php7.1-fpm.sock; (проверьте доступный сокет в папке /run/php/) вместо вызова локальной сети php-fpm:9000.Много выполняет.

0 голосов
/ 23 октября 2018

Добавьте это средство сразу после индекса строки index.php

location / {
   try_files $uri $uri/ /index.php?q=$uri&$args; 
}

С уважением

...