我试图让Nginx为我的身份valIDation的pipe理员用户提供一些PHP的静态文件。 这很好,我回来的文件。 但是它有一个404状态码。
我正在使用以下(Symfony / Silex)PHP代码:
use SymfonyComponenthttpFoundationBinaryfileResponse; use SymfonyComponenthttpFoundationResponseheaderBag; $filePath = '/usr/share/Nginx/project/src/path/to/my/protected/static/dir/' . $file; if (empty($file) || !is_readable($filePath)) { $app->abort(404); } $response = new BinaryfileResponse($filePath); $response->trustXSendfileTypeheader(); $response->setPrivate(); $response->setContentdisposition( ResponseheaderBag::disposition_INliNE,$file,iconv('UTF-8','ASCII//TRANSliT',$file) ); $response->headers->addCacheControlDirective('must-revalIDate',true); return $response;
这是我的Nginxconfiguration:
server { Listen 443; Listen [::]:443; root /usr/share/Nginx/project/web; index index.PHP; error_page 401 403 404 /404.HTML; server_name example.com; rewrite ^/(.*)/$ /$1 permanent; location / { # First attempt to serve request as file,then # as directory,then let PHP handle the file try_files $uri $uri/ /index.PHP$is_args$args; index index.PHP; autoindex off; location ~* .(svg|jpg|jpeg|png|gif|ico|CSS|Js)$ { expires 150d; } } location ~ .PHP$ { set $path_info $fastcgi_path_info; fastcgi_index index.PHP; fastcgi_split_path_info ^(.+.PHP)(/.*)$; try_files $uri $uri/ /index.PHP$is_args$args; fastcgi_pass unix:/var/run/PHP/PHP7.0-fpm.sock; include fastcgi_params; fastcgi_param APP_ENV production; fastcgi_param SCRIPT_filename $document_root$fastcgi_script_name; } }
受保护的目录位于Nginxconfiguration( /usr/share/Nginx/project/web )的根目录之外。
DataStax无声安装windows Server的Cassandra Com@R_301_5845@y Edition失败
Visual Studio 2008 c ++应用程序中的无声崩溃
在Python中静默打印pdf
使用指定path的Java JDK无提示安装
FastCGI在stderr中发送:“主要脚本未知” – Nginx和silex
我在日志中发现了这些types的错误消息:
open() "/usr/share/Nginx/project/web/admin/static/admin.Js" Failed (2: No such file or directory),request: "GET /admin/static/admin.Js http/1.1"
/admin/static/admin.Js确实是请求的url。
更新1
它看起来像Nginx总是试图打开url并添加一个条目的错误日志,即使PHP处理响应就好了。
即使我replace所有的PHP代码: return new Response('test',200); 身体“testing”的响应代码仍然是404 …
我也尝试在我的Nginxconfiguration中添加一个额外的位置块:
location /protected_admin_files { internal; alias /usr/share/Nginx/project/src/path/to/my/protected/static/dir; }
然后尝试redirect到这样的文件:
return new Response('',200,[ 'x-accel-redirect' => '/protected_admin_files/' . $file ]);
但也没有运气。 与正确的回应身体相同的404 …
通过C#或PowerShell卸载windows修补程序
我自己找到了原因
这是我在错误日志中发现的一旦我设置错误级别deBUG ( 这里是完整的日志 )
... [deBUG] rewrite phase: 1 [deBUG] http script regex: "^/(.*)/$" [notice] "^/(.*)/$" does not match "/admin/static/admin.Js",request: "GET /admin/static/admin.Js http/1.1",host: "example.com" [deBUG] test location: "/" [deBUG] test location: "protected_admin_files" [deBUG] test location: ~ ".(svg|jpg|jpeg|png|gif|ico|CSS|Js)$" [deBUG] using configuration ".(svg|jpg|jpeg|png|gif|ico|CSS|Js)$" ... [deBUG] http filename: "/usr/share/Nginx/project/web/admin/static/admin.Js" [deBUG] add cleanup: 00000000025AE108 [error] open() "/usr/share/Nginx/project/web/admin/static/admin.Js" Failed (2: No such file or directory),clIEnt: 24.132.134.203,server: example.com,host: "example.com" [deBUG] http finalize request: 404,"/admin/static/admin.Js?" a:1,c:1 [deBUG] http special response: 404,"/admin/static/admin.Js?" [deBUG] internal redirect: "/index.PHP?" ...
显然,我的第一个location /块的嵌套location正在造成404。
location / { try_files $uri $uri/ /index.PHP$is_args$args; index index.PHP; autoindex off; location ~* .(svg|jpg|jpeg|png|gif|ico|CSS|Js)$ { expires 150d; } }
由于扩展名而匹配,使Nginx去寻找文件。 因为它没有被发现,404被设置,并且当PHP返回x-accel-redirect头时,这个过程显然不会被覆盖。
总结以上是内存溢出为你收集整理的Nginx提供404状态码的静态文件?全部内容,希望文章能够帮你解决Nginx提供404状态码的静态文件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)