Nginx $uri 变量在处理过程中被截断

Nginx $uri 变量在处理过程中被截断

我们使用 NGinX 作为 PHP Web 应用程序的代理服务器。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 个字符之后,有时在 url 中的 4 个破折号之后)。例如

假设访问的 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/**G已从 URL 中删除,但同一位置的另一个文件名比罪魁祸首文件名短的图像已被成功定位。

编辑:我们注意到一个模式,实际上 nginx 是在原始 $uri 之后再次附加 $uri,即在上面提到的例子中,它将“g”替换为“/”($uri 的起始字符),在另一种情况下,它将“.png”替换为“/var”。希望它有助于调试。:)

答案1

更改aliasroot目录路径可以解决您的问题。

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;
}

相关内容