【问题标题】:nginx / symfony route to public/styles folder not workingnginx / symfony 路由到 public/styles 文件夹不起作用
【发布时间】:2020-03-30 12:27:57
【问题描述】:

这是我第一次为 symfony 项目配置 nginx(使用 docker)。

到我的索引文件的路径一切正常。 但是现在我需要使用到 public/styles/*****.css 和其他类似 public/js 等的路由。

我无法运行它。它总是告诉我 symfony 不允许路由,或者不允许来自 nginx 的其他尝试,HTML500。

这是我的 NGINX 配置:

server {
 server_name ~.*;

 location / {
     root /usr/src/app;
     try_files $uri /index.php$is_args$args;
 }

 location ~ ^/index\.php(/|$) {
     client_max_body_size 50m;

     fastcgi_pass php:9000;
     fastcgi_buffers 16 16k;
     fastcgi_buffer_size 32k;
     include fastcgi_params;
     fastcgi_param SCRIPT_FILENAME /usr/src/app/symfony/public/index.php;
 }

 error_log /dev/stderr debug;
 access_log /dev/stdout;
}

这是我尝试调用的:

http://localhost:8000/styles/main.css
http://localhost:8000 -> works proper, loading my index route

这是我的 base.html.twig 的一部分

<link href="styles/main.css" rel="stylesheet" type="text/css">

【问题讨论】:

  • 你是否在同一个 docker 镜像中运行 Nginx 和 Symfony?
  • 不,nginx 和 php 在不同的容器中运行

标签: php symfony nginx


【解决方案1】:

如果文件位于 /usr/src/app/public/styles/ ,则更改您的根指令值

http://localhost:8000/styles/main.css 根据nginx root directive doc 从“{root}/styles/main.css”获取文件,而您的“{root}/styles/main.css”为“/usr/src/app/styles/ “现在。

更新:

如果后端可以将 /style 转换为 /public/styles,那么您需要对后端的代理请求(请参阅proxy_pass 或搜索 sn-ps 以进行代理),否则您需要将 index.php 移至 public 并更改 root,否则将 /public/styles 移动到本地文件系统中的 /styles。

代理变得更有意义,因为您说您使用分离的 docker 容器作为后端。 (可以通过linking containers 完成,通过proxypass http://other-docker-container-name:XXXX 代理,其中XXXX 是另一个容器上的暴露端口)

更新 2: 我最初怎么说,问题作者需要为root 设置另一个值,正如我在评论中所说,正确的值是/usr/src/app/symfony/public

【讨论】:

  • 根指令必须仍然是 ./index.php 并且我想允许 ./styles 和 ./scripts 和 ./images 中的所有内容
  • style 文件夹通常可以通过 HOSTNAME/styles/... 因为它在 [root]/public/styles,... 索引文件是 [root]/public/index.php工作,所以看来我必须改变这一行:try_files $uri /index.php$is_args$args;这似乎阻止了 index.php 以外的任何其他文件
  • /index.php 有效,因为 location ~ ^/index\.php(/|$) 块,我刚才注意到你的路径更复杂(fastcgi_param SCRIPT_FILENAME /usr/src/app/symfony/public/index.php)所以根值应该是这样的:/usr/src/app/symfony/public/
  • 删除 "fastcgi_param SCRIPT_FILENAME /usr/src/app/symfony/public/index.php;" 中的 index.php导致我出错:找不到文件...
  • 为什么要删除“fastcgi_param SCRIPT_FILENAME ...”?您不应该删除它,您需要更改 root 才能获取静态文件。请尝试更改根目录,看看发生了什么。
【解决方案2】:

找到了解决方案,只是在第一个位置出现之前添加了这些行

location /styles {
    root /usr/src/app/symfony/public/;
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-11
    • 2018-10-04
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多