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正确处理静态文件?
Nginx提供其他站点的SSL证书
Nginx不显示404页面,而是在根目录下提供索引文件
.ebextensions与elasticbeanstalk上的Docker
带有Nginx代理的Gitlab 8不能下载一个zip文件,克隆一个公共的repo作为guest,也不能在CI中build立
用angular-Js和jquery-file-uplad,Nginx和rails分块file upload
像Js和CSS这样的静态文件与fastcgi没有任何关系。
但是,由于该文件位于/admin/assets/569a8b41/CSS但您的conf以/app/backend/web作为文档根目录,因此永远不会找到这个文件,因为您要求Nginx查看为/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/style.CSS ,如果存在的话,它将会提供这个服务。
请注意,这假设您在/admin/assets/569a8b41下有单独的CSS和Js文件夹。
如果你使用〜符号,它意味着下面的模式是一个正则表达式,所以在这种情况下,Nginx将采取所有的URI,并通过它,所以你需要摆脱你的后端配置“管理”部分,我认为/应用程序/后台/网络在这个路径只有管理面板运行,所以这里是我的建议:
location ~ ^/admin { proxy_pass http://127.0.0.1:81; }
改变这个:
location /admin { proxy_pass http://127.0.0.1:81; }
在这种情况下,你的style.CSS文件在/ app / backend / web路径
因此当你调用loc.app/admin/style.Js
在后台Nginx会提出这个请求127.0.0.1:81/style.CSS如果你有一些CSS目录在/ app / backend / web那么你的主要网址应该是loc.app/admin/CSS/style.Js => 127.0.0.1:81/CSS/style.CSS文件应该位于/app/backend/web/CSS/style.CSS
我希望这给出一个想法。
proxy_pass将请求的URI发送给上游服务器。 如果uri在上游服务器上看起来不同,那么在将uri传递给代理(例如: 删除/admin部分 )之前,应该rewrite uri。 但是对于你的情况,这可能不是一个好主意,因为在我看来,你还需要你的后台PHP应用程序的/admin部分来工作,因为它似乎被声明为你的PHP框架中的一个路由。 所以,也许最好的解决方案是只删除/admin部分的静态文件。 更新你的后端服务器的Nginx配置,包含如下所示:
location ~* .(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|HTML|htm|txt|CSS|Js) { rewrite ^/admin/(.*) /$1 last; }
确保你删除了你添加的echo 。
总结以上是内存溢出为你收集整理的Nginx代理不正确fastcgi_script_name为静态文件全部内容,希望文章能够帮你解决Nginx代理不正确fastcgi_script_name为静态文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)