проблемы переписывания nginx - PullRequest
1 голос
/ 29 декабря 2011

Я только что переключился с apache на nginx, просто для тестирования, и у меня возникла следующая проблема. Я использую этот конфиг для nginx

location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
        include        fastcgi_params;

} Теперь у меня есть скрипт php makethumbs.php, который автоматически изменяет размеры изображений, отображаемых на моем сайте. С apache работает просто отлично. С nginx я получаю эту ошибку:

2011/12/29 15:13:17 [error] 15548#0: *9 open() "/usr/share/nginx/html/makethumbs.php/0737438664-22.jpg" failed (20: Not a directory), client: 193.138.192.81, server: www.escortele.eu, request: "GET /makethumbs.php/0737438664-22.jpg?width=48&height=64&image=/members/escorte/0737438664-22.jpg HTTP/1.1", host: "escortele.eu:88", referrer: "http://escortele.eu:88/"

Проблема в том, что он видит makethumbs.php в качестве каталога, и это должен быть скрипт, а не каталог.

Я не могу понять, какое правило перезаписи использовать, только для makethumbs.php, поэтому оно действует как скрипт, а не как каталог.

Ответы [ 3 ]

1 голос
/ 08 марта 2012

Вы должны были вставить остальную часть вашего файла конфигурации, потому что то, что вы вставили, не имеет ничего общего с тем, что вы хотите.

Эта ошибка связана с тем, что у вас есть «try_files $ uri $ uri / /index.php;» где-то в вашем конфиге. Вам нужно удалить из него $ uri /, чтобы исправить ошибку, которую вы вставили.

0 голосов
/ 27 августа 2014

Это скрипт, который я использую для миниатюр: http://escorte.pro:88/makethumbs.txt

Моя конфигурация nginx выглядит следующим образом: http://escorte.pro:88/nginx.txt

Я получаю ошибку:

2014/08/27 14:59:07 [ошибка] 20986 # 0: * 86 open () "/usr/share/nginx/html/escorte.pro/makethumbs.php/0737835261-79.jpg" не удалось (20: не каталог), клиент: 83.166.220.234, сервер: escorte.pro, запрос: "GET /makethumbs.php/0737835261-79.jpg?width=48&height=64&image=/members/escorte/0737835261-79. jpg HTTP / 1.1 ", хост:" escorte.pro:88 ", реферер:" http://escorte.pro:88/" 2014/08/27 14:59:07 [ошибка] 20986 # 0: * 87 open () "/usr/share/nginx/html/escorte.pro/makethumbs.php/0743844296-60.jpg" не удалось (20: Не каталог), клиент: 83.166.220.234, сервер: escorte.pro, запрос: "GET /makethumbs.php/0743844296-60.jpg?width=48&height=64&image=/members/escorte/0743844296-60.jpg HTTP / 1.1 ", хост:" escorte.pro:88 ", реферер:" http://escorte.pro:88/"

Скрипт makethumbs.php отлично работает на apache

Есть какие-нибудь подсказки?

Надеюсь, эта информация будет более полной, чем предыдущая ...

0 голосов
/ 27 февраля 2014

Проблема не в

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

Эта часть хороша.Вам это нужно.

Так как вы не опубликовали всю свою конфигурацию, я не могу быть уверен, в чем ваша проблема, но я могу сказать вам, в чем заключалась моя проблема в такой же ситуации.Следуя рекомендациям других, у меня было местоположение, определенное для файлов изображений следующим образом:

location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
     expires max;
     log_not_found off;
}

В этом была проблема.Поскольку Nginx использует наиболее определенное местоположение, которое соответствует, URL-адрес, заканчивающийся на .jpg, будет соответствовать этому местоположению, и это местоположение не говорит ему использовать index.php.Я только что избавился от этого местоположения, и оно сработало.

Дополнительные советы:

  • определите свой корень в блоке сервера, а не в блоках местоположения.
  • Надеюсьне думаю, что вам не нужно "fastcgi_index index.php;"
  • Вам не нужно жестко кодировать корень документа:

change

fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;

до

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
...