php - docker-compose nginx 找不到 symfony Assets 的路由

标签 php symfony docker nginx docker-compose

SO中有类似的问题,但不适用于这个特定问题。

工具:docker-compose 1.21.2; symfony 3.4; nginx 1.10.3

我有几个分离的容器(“每个容器应该只有一个问题”)。除了在浏览器中获取 symfony (3.4) 应用程序的 Assets 外,一切正常。 定义的路线有效,模板正确呈现,只有 Assets 是问题 .除了使用相同的设置但在本地(没有容器)的开发机器中提供服务之外,没有任何问题。

使用卷它可以工作,但我想让它们在生产中使用,因为文档表明 https://docs.docker.com/compose/production/#modify-your-compose-file-for-production您可能需要的更改:

  • 删除应用程序代码的任何卷绑定(bind),以便代码保留在容器内并且不能从外部更改

  • 事实:
  • 在 nginx 容器日志中报告 404 次访问但没有错误。
  • 在 php-symfony 容器中,prod 日志显示像 request.ERROR: Uncaught .... NotFoundException for "GET /css/main.css" at ...RouterListener.php {"exception": ".../NotFoundHttpException(code: 0) ... ResourceNotFoundException"} [] 这样的行
  • 在浏览器中检查开发 http://<host>:<port>/app_dev.php/css/main.css nginx 返回 404。(我让开发环境在外部可用)
  • 在浏览器中检查 dev 的路由,例如 http://<host>:<port>/app_dev.php/css出现 Symfony 异常页面 找不到“GET/css”的路由具有相同的信息ResourceNotFoundException > NotFoundHttpException
  • 修改 web 的访问权限容器中的文件夹 chmod -R a+rwx .../web没有什么区别。

  • 相关栏目 docker-compose.yml
    version: "2"
    services:
        site:
            ...
            working_dir:
                /var/www/html/site
        site_webserver:
            ...
            ports:
               - <port>:80
            depends_on:
               - site
            links:
               - site
    

    相关栏目 nginx.conf
    server {
        listen 80;
        server_name "";
        root /var/www/html/site/web;
    
        location / {
            try_files $uri /app.php$is_args$args;
        }  
    
        location ~ ^.*/(app_dev|config)\.php(/|$) {
            fastcgi_pass lockate_site:9000;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $document_root;
        }
    }
    

    最佳答案

    你应该有现有的文件/var/www/html/site/web/css/main.css!你有吗?

    Nginx 配置不应将此请求/css/main.css 传递给 PHP 代码。它应该简单地将现有文件发送到浏览器。
    我想你有这个文件,但是在另一个路径上。

    你应该为它持有正确的 nginx 配置,或者将 assets-files 放在/var/www/html/site/web/目录中

    关于php - docker-compose nginx 找不到 symfony Assets 的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50757778/

    相关文章:

    php - wp_mail 在 html 电子邮件的文本区域中换行

    php - Doctrine 删除实体并一次性添加一个新实体

    ruby - Dockerfile:尝试安装 ruby​​-build 时权限被拒绝

    php - Mercurial - 保持部署和开发存储库

    javascript - 将 Node.js 与 Symfony2 或 PHP 集成

    php - FosRestbundle 强制错误消息的内容类型

    symfony - 如何在 Symfony2 服务类中访问 Doctrine DBAL?

    python - 如何连接到rabbitMQ docker容器?

    docker - Docker hello-world给出以下错误:容器/hello:无此类文件或目录“:未知

    php - 周期性日历事件