【问题标题】:How to run Symfony web server at a sub-path?如何在子路径上运行 Symfony Web 服务器?
【发布时间】:2018-09-12 21:03:17
【问题描述】:

我有一个在 VM 中运行的 Symfony 4 Web 应用程序。

我用bin/console server:start 0.0.0.0:8000 启动应用程序。我在虚拟机中打开了 8000 端口,并在主机上运行了一个 nginx 代理服务器。

由于主机上运行着许多虚拟机,我设置了 nginx 来转发这样的请求:

  • https://host/project1/foo/bar -> http://vm1:8000/foo/bar
  • https://host/project2/subpath -> http://vm2:8000/subpath

问题在于 Symfony 没有为资源甚至路由生成正确的路径,因为基本路径不同(主机代理上的 /projectX/path 与 VM 本地服务器上的 /path 相对)。

我绕过这个的想法是让 VM 中的每个子项目都使用自己的自定义基本路径(例如http://vmX:8000/projectX/)运行。这样,我可以生成正确的路径,而 Router::setTrustedProxies() 负责 URL 生成。

问题是:如何配置 Symfony 的嵌入式 PHP 服务器以使用路径前缀运行?我(想我)知道如何使用在 VM 上运行的 Web 服务器来执行此操作,但我宁愿避免使用它。

谢谢!

【问题讨论】:

    标签: php symfony webserver


    【解决方案1】:

    这样的?

    server {
          listen       80;
          server_name  foobar.com;
    
    
          location / {
             proxy_pass      http://127.0.0.1:18080;
             proxy_set_header HOST $host;
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
    
         location /newsletter/ {
             rewrite /newsletter/(.*) /$1  break;
    
             proxy_pass      http://127.0.0.1:18081;
             proxy_set_header HOST $host;
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
    }
    

    这里有 2 个应用程序:/ -> wordpress、/newsletter

    Symfony 应用程序在 docker 容器中运行。

    【讨论】:

    • 我已经完成了这部分工作。麻烦的是,如果我在 Twig 模板中有类似 {{ url('index') }} 的东西(考虑到 index/ 的路由名称),那么输出是 http://foobar.com/ 而不是 http://foobar.com/newsletter/ 那是因为 @ 987654327@ 不知道它应该有一个/newsletter/ 路径前缀。我的问题是,我如何让它知道没有其他网络服务器的前缀。
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多