系统相关
首页 > 系统相关> > php – Nginx代理不正确的fastcgi_script_name用于静态文件

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文件夹.

标签:nginx,php,yii2-advanced-app
来源: https://codeday.me/bug/20190608/1200061.html