【问题标题】:how to deploy symfony over http and https?如何通过 http 和 https 部署 symfony?
【发布时间】:2021-12-08 14:11:37
【问题描述】:

我们已经部署了一个 symfony 项目并且工作正常,但是现在我们想要启用 https。

我们像这样创建并启用了另一个虚拟主机:

<VirtualHost *:443>
ServerName      project.domain.net

DocumentRoot /home/user/dev/project/web
<Directory /home/user/dev/project/web>
    AllowOverride All
    Require all granted
</Directory>

# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeScript assets
<Directory /home/user/dev/project>
  Options FollowSymlinks
</Directory>

ErrorLog /var/log/apache2/project.test_error.log
CustomLog /var/log/apache2/project.test_access.log combined


SSLEngine on
    SSLCertificateChainFile /ssl/cert.pem
    SSLCertificateKeyFile /ssl/private.key
    SSLCertificateFile /ssl/wildcard.crt

我们可以导航到https://project.domain.net,看起来没问题,但是当我们检查时

    $request->getUri();

结果是http://project.domain.net,所以是http而不是https

这是为什么呢?如何解决?

更新: 我们添加了@Leroy 给出的配置,结果是:

HTTP_X_FORWARDED_PROTO https
REQUEST_METHOD        GET
REQUEST_SCHEME         http
SERVER_NAME zerbikatdesa.sare.gipuzkoa.net
SERVER_PORT  80

$request->getUri 仍然返回 https 的 http

【问题讨论】:

  • (a) 您是否在代理或负载平衡器后面? (b) 为什么这个标签是 Laravel?

标签: php laravel apache symfony


【解决方案1】:

通常应用程序必须自行确定哪些 url 需要 ssl。在 symfony 中,您可以将路由配置为需要 ssl。然后应用程序可以在这些页面上强制使用 ssl。但是根据您的要求,您的所有页面都应该是 https。

Symfony 使用 2 种方法来确定路由是否安全。当您在代理后面时,例如负载均衡器,您必须在trusted_proxiestrusted_headers 中允许该代理(通常有环境变量供您配置)。代理还应发送通过 https 加载页面的标头。

如果你不在代理后面,就像你定义第二个指向文件系统的虚拟主机一样,你必须告诉 symfony 一个路由是通过 https 加载的。应将相同的请求标头传递给应用程序。

所以下面应该解决它。

<VirtualHost *:443>
   RequestHeader set X-Forwarded-Proto https
</VirtualHost>

我还看到您正在使用/web 子目录进行公共访问。你还在使用 Symfony 第 2 版吗?

【讨论】:

  • 不,这是第 3 版。我会试试这个,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 2021-02-28
  • 2016-06-22
相关资源
最近更新 更多