Настройка nginx: не видно путь

Настройка nginx: не видно путь

28.11.2017 11:14:33 Просмотров 36 Источник

Помогите, пожалуйста, разобраться: какая из указанных настроек nginx мешает корректной работе с дирректориями?

Проблема: Файлы в корне исполняются корректно, но как только нужно исполнить файл глубже, чем корень - nginx пытается всё равно искать его в корне.

Пример: Если в google.com/admin/index.php делается запрос файла /template/123.png то он ищет его в google.com/template/ а не в google.com/admin/template/

Настройки nginx:

server {
    listen   80;
    server_name google.com;
    root /home/google/www/html;
    index index.php;

    location ~ [^/]\.php(/|$) {
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;
        include fastcgi_params;
        fastcgi_split_path_info         ^(.+?\.php)(/.*)?$;
        fastcgi_param   SCRIPT_FILENAME     $document_root$fastcgi_script_name;
        fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_script_name;
        set     $path_info      $fastcgi_path_info;
        fastcgi_param   PATH_INFO       $path_info;


        fastcgi_param   SERVER_ADMIN        email@example.com;
        fastcgi_param   SERVER_SIGNATURE    nginx/$nginx_version;
        fastcgi_index   index.php;
    }
}

Лог:

2017/11/26 22:41:35 [error] 31955#31955: *183 open() "/home/google/www/html/template/123.png" failed (2: No such file or directory), client: 80.251.118.111, server: google.com, request: "GET /template/123.png HTTP/1.1", host: "google.com", referrer: "http://google.com/admin/index.php»

Файл лежит в /home/google/www/html/admin/template/123.png

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/750984/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-nginx-%d0%bd%d0%b5-%d0%b2%d0%b8%d0%b4%d0%bd%d0%be-%d0%bf%d1%83%d1%82%d1%8c#comment1157105_750984
@alexanderbarakin, в логах вот так видно: server: google.com, request: "GET /template/123.png

Ответы - Настройка nginx: не видно путь / Настройка nginx: не видно путь

Suvitruf says Reinstate Monica

28.11.2017 11:27:37

Я не совсем понимаю проблему. Оно работает как и должно, собственно. nginx от корня все пути начинает смотреть.

Если вы хотите, к примеру, чтоб запросы с google.com/admin/index.php шли не в /template/, а /admin/template/, то можете использовать $http_referer для редиректа куда надо.

https://ru.stackoverflow.com/questions/750984/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-nginx-%d0%bd%d0%b5-%d0%b2%d0%b8%d0%b4%d0%bd%d0%be-%d0%bf%d1%83%d1%82%d1%8c/750989#comment1157102_750989
А можно пример? Только учусь с nginx работать, не совсем ясно что сделать нужно. P.S.: я просто беру CMS и там все линки строятся от исполняемого файла. Если исполняемый файл лежит в директории admin/, то ожидается поиск файлов относительно данной директории, а не корня
Является ответом!
Valery Krasnoselsky

29.11.2017 12:27:18

Попробуйте добавить:

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

Вот конфигурация, которую рекомендуют joomla под nginx.

https://ru.stackoverflow.com/questions/750984/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-nginx-%d0%bd%d0%b5-%d0%b2%d0%b8%d0%b4%d0%bd%d0%be-%d0%bf%d1%83%d1%82%d1%8c/751007#comment1157152_751007
Ну, не хочу я Jumla переписывать. Не мой мопед, нужно его просто разместить. При этом на хостингах он ведёт себя нормально. Наталкивает на мысль о том, что это решается настройкой.
https://ru.stackoverflow.com/questions/750984/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-nginx-%d0%bd%d0%b5-%d0%b2%d0%b8%d0%b4%d0%bd%d0%be-%d0%bf%d1%83%d1%82%d1%8c/751007#comment1157463_751007
Попробуйте добавить: location / { try_files $uri $uri/ /index.php?q=$request_uri; } Вот конфигурация, которую рекомендуют joomla под nginx docs.joomla.org/Nginx
Oleg

29.11.2017 12:48:22

Вопрос решился использованием целевого конфига от CMS

https://docs.joomla.org/Nginx

Закрыть X