我們已經部署了一個 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 insted
uj5u.com熱心網友回復:
通常應用程式必須自己確定哪些 url 需要 ssl。在 symfony 中,您可以將路由配置為需要 ssl。然后應用程式可以在這些頁面上強制使用 ssl。但是根據您的要求,您的所有頁面都應該是 https。
Symfony 使用兩種方法來確定路由是否安全。當您在代理后面時,例如負載均衡器,您必須在trusted_proxiesand 中允許該代理trusted_headers(通常有 env 變數供您配置)。代理還應發送頁面通過 https 加載的標頭。
如果你不是在代理后面,就像你定義第二個指向檔案系統的虛擬主機那樣,你必須告訴 symfony 一個路由是通過 https 加載的。應將相同的請求標頭傳遞給應用程式。
所以下面應該解決它。
<VirtualHost *:443>
RequestHeader set X-Forwarded-Proto https
</VirtualHost>
我還看到您正在使用/web子目錄進行公共訪問。你還在使用 Symfony 版本 2 嗎?
uj5u.com熱心網友回復:
將此行添加到您的組態檔并重新啟動服務器:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
有關更多詳細資訊:http : //www.sslshopper.com/apache-redirect-http-to-https.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/331017.html
上一篇:洗掉現有的Where子句
