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

Переменная Nginx $ uri усекается во время обработки

У нас есть 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;
}