2016-03-03 42 views
0

我有一個需要https或某些頁面的應用程序。SSL終止ElasticBeanstalk Symfony

我正在嘗試使用ElasticBeanstalk(EB)部署Symfony應用程序。 EB具有此功能,它將每個請求http或https請求作爲http傳遞給EC2實例,並使用HTTP_X_FORWARDED_PORT和HTTP_X_FORWARDED_PROTO讓EC2實例知道原始請求協議是什麼。根據Symfony文檔,我可以做這樣的事情。

Request::setTrustedProxies(['127.0.0.1', $request->server->get('REMOTE_ADDR')]); 
Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, 'HTTP_X_FORWARDED_FOR'); 
Request::setTrustedHeaderName(Request::HEADER_CLIENT_HOST, 'HTTP_HOST'); 
Request::setTrustedHeaderName(Request::HEADER_CLIENT_PORT, 'HTTP_X_FORWARDED_PORT'); 
Request::setTrustedHeaderName(Request::HEADER_CLIENT_PROTO, 'HTTP_X_FORWARDED_PROTO'); 

和在控制器中我已經定義了這樣的方案。

/** 
* 
* @Route("/products", schemes = { "https" }) 
*/ 
class ProductsController extends Controller 
{ 
    /** 
    * @Route("/{id}", name="show_product", schemes = { "https" }) 
    * @Method("GET") 
    * 
    * @return Response A HTTP response 
    */ 
    public function index($id, Request $request) 

但它導致從https - > http - > https的永無止境的循環。有什麼辦法可以解決這個問題嗎?

回答

0

我找到了解決方案。我在這裏發佈解決方案,以便其他人可以從中受益。實際上Symfony尋找HTTP頭而不是服務器頭,所以映射應該是這樣的。

Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, 'X_FORWARDED_FOR'); 
Request::setTrustedHeaderName(Request::HEADER_CLIENT_HOST, 'HTTP_HOST'); 
Request::setTrustedHeaderName(Request::HEADER_CLIENT_PORT, 'X_FORWARDED_PORT'); 
Request::setTrustedHeaderName(Request::HEADER_CLIENT_PROTO, 'X_FORWARDED_PROTO');