Nginx代理不正确fastcgi_script_name为静态文件

Nginx代理不正确fastcgi_script_name为静态文件,第1张

概述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正确处理静态文件

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为静态文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1154670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存