У нас есть NGinX в качестве прокси-сервера для веб-приложения PHP. Скрипты PHP обслуживаются процессом PHP-FPM. Ниже приведена конфигурация nginx:
location /app/ {
alias /var/www/html;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|svg|ttf|woff)$ {
alias /var/www/html;
expires 24h;
log_not_found on;
try_files $uri $uri;
}
rewrite /app.* /app/index.php?$args;
location ~ \.php$ {
try_files $uri =404;
# typical php-fpm configuration
}
}
# wordpress site hosted on root of the domain
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|svg|ttf|woff)$ {
expires 24h;
log_not_found off;
auth_basic off;
}
Само приложение PHP основано на Yii. Теперь проблема в том, что когда NGinx обслуживает статическое изображение, он случайным образом обрезает фактический путь (иногда после 80 символов, а иногда после 4 тире в URL-адресе). например
Допустим, доступ к URL-адресу example.com/app/themes/app/images/some_folder/some_image_name.png
, он показывает 404, а в error.log я вижу, что NGinx пытается найти следующий путь /var/www/html/app/themes/app/images/some_folder/**some_image_name.pn/**
(грамм удаляется из URL-адреса), в то время как другое изображение, имя файла которого короче, чем имя виновника, в том же месте успешно размещается.
РЕДАКТИРОВАТЬ: Мы отметили шаблон, на самом деле nginx снова добавляет $ uri после исходного $ uri, то есть в вышеупомянутом примере он заменяет 'g' на '/', который является начальным символом $ uri, а в другом случае он заменяет '. png 'с' / var '. Надеюсь, это поможет в отладке. :)
Изменение alias
к root
для пути к каталогу решит вашу проблему.
location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|svg|ttf|woff)$ {
root /var/www/html;
expires 24h;
log_not_found on;
try_files $uri $uri;
}