微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Nginx代理不正确的fastcgi_script_name用于静态文件

server {
    listen loc.app:80;    

    root /app/frontend/web;

    index index.PHP;

    location / {        
        try_files $uri $uri/ /index.PHP$is_args$args;
    }

    location ~ ^/admin {
        proxy_pass http://127.0.0.1:81;     
    }

    location ~* \.PHP${    
        #PHP conf
    }                    
}

server {
    listen 127.0.0.1:81;

    root /app/backend/web;

    index index.PHP;

    location / {        
        try_files $uri $uri/ /index.PHP$is_args$args;
    }

    location ~ \.(js|css)${    
        echo "$document_root"; # /app/backend/web;

        echo "$fastcgi_script_name"; # /admin/assets/569a8b41/css/bootstrap.css         
        ############################## ISSUE ##############################
        # $fastcgi_script_name must be /assets/569a8b41/css/bootstrap.css #
        ###################################################################
    }

    location ~* \.PHP${    
        #PHP conf
    }
}

http://loc.app/admin – 好的
http://loc.app/admin/style.css – 返回404

如何强制Nginx正确处理静态文件

解决方法:

诸如js和css之类的静态文件与fastcgi无关.

但是,由于该文件位于/ admin / assets / 569a8b41 / css中,但是你的conf有/ app / backend / web作为文档根目录,那么这将永远不会找到,因为你要求Nginx看起来总是得到404对于/app/backend/web/admin/assets/569a8b41/css/bootstrap.css,它不存在.

由于您的设置的复杂性,您可以添加一个仅内部位置块来处理请求的实际服务并从原始位置块重定向到此.

location ~ /admin/assets/569a8b41 {
    root /admin/assets/569a8b41;        
}
location ~ ^/admin/(.+)\.(js|css)${    
    rewrite ^/admin/(.+)\.css$/admin/assets/569a8b41/css/$1.css last;
    rewrite ^/admin/(.+)\.js$/admin/assets/569a8b41/js/$1.js last;
}

诸如http://loc.app/admin/style.css之类的请求将在/admin/assets/569a8b41/css/style.css中查找,如果存在,它将提供此服务.

请注意,这假设您在/ admin / assets / 569a8b41下有单独的css和js文件夹.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐