我们的整个网站将通过https提供服务。我在每条路线上都有“https”。但是,如果他们试图通过http将其重定向到https,我该如何将其重定向到https?
Route::group(array('https'), function()
{
// all of our routes
}
对于使用Laravel 4/5和Elastic Beanstalk的用户,使用这些方法强制使用HTTPS是很困难的,因为IsSecurity()
将返回false
。此外,使用.htaccess
重定向将导致Chrome的重定向循环,并延迟Firefox中的页面加载时间。
此设置是为
aws
。Linux可能略有不同?经过数小时的尝试,我成功地通过以下步骤将所有HTTP请求转发到HTTPS:
>
获取SSL证书。指南和提供商很多,可以通过谷歌搜索找到。
使用aws
控制台命令将证书上传到AWS。指挥结构为:
aws iam upload-server-certificate --server-certificate-name CERTIFICATE_NAME --certificate-body "file://PATH_TO_CERTIFICATE.crt" --private-key "file://YOUR_PRIVATE_KEY.pem" --certificate-chain "file://YOUR_CERTIFICATE_CHAIN.ca-bundle" --path /cloudfront/
创建一个弹性Beanstalk应用程序。继续执行设置过程。安装应用程序后,转到配置-
选择安全监听器端口为443。选择协议为HTTPS。从步骤2中选择SSL证书ID的CERTIFICATE_NAME
。保存配置。
转到您的控制台。单击EC2实例。单击负载均衡器。单击负载均衡器。单击实例并向下滚动以查看分配给该负载均衡器的EC2实例。如果EC2实例与您的应用程序URL具有相同的名称(或接近的名称),请注意负载均衡器的DNS名称。它应该是格式awseb-e...
回到你的控制台。单击CloudFront。单击创建分发。选择一个Web分发。
设置分发。将您的源域名设置为在步骤5中找到的负载平衡器DNS名称。将查看器协议策略设置为将HTTP重定向到HTTPS。将“转发查询字符串”设置为“是”。将备用域名(CNAMEs)设置为要用于应用程序的URL。将SSL证书设置为在步骤2中上载的证书\u名称
。创建您的发行版。
在CloudFront中单击您的分发名称。单击“原点”,选择原点,然后单击“编辑”。确保您的源协议策略是匹配查看器。回去单击行为,选择原点,然后单击编辑。将转发头更改为白名单并添加主机。拯救
去你的控制台。单击路线53。单击“托管区域”。单击“创建托管分区”。设置你的域名。设置完成后,单击“创建记录集”。输入您的记录。选择Alias作为是。您的别名目标是CloudFront发行版。保存记录。
为域设置名称服务器以指向路由53名称服务器。等待一切传播,可能需要几个小时。转到你的URL。您将自动重定向到HTTPS。
“但是,等等,我的链接不会转到HTTPS!?”您需要处理CloudFront将通过的X-Forwarded-Proto
头。对于Laravel 4,请遵循本指南。对于Laravel 5,运行以下命令:
php artisan make:middleware EB_SSL_Trust
然后将其添加到EB\u SSL\u Trust
文件中:
public function handle($request, Closure $next)
{
$request->setTrustedProxies( [ $request->getClientIp() ] );
return $next($request);
}
并将其添加到您的App\Http\Kernel.php
文件中:
protected $middleware = [
...
'App\Http\Middleware\EB_SSL_Trust',
...
];
注意:您的所有资产,如CSS、JS或图像,都需要通过HTTPS发送。如果使用Laravel创建这些链接,请使用secure_asset()
在视图中创建HTTPS URL。
另一个答案可能是让web服务器处理这个问题。如果您使用的是Apache,则可以使用RedirectSSL功能确保所有请求都将发送到站点的HTTPS版本,如果没有,则可以重定向它们。这将在拉威尔收到请求之前发生。
Apache重定向SSL
如果您使用的是NGINX,那么可以通过使用两个服务器块来实现这一点。一个用于端口80上的正常HTTPS,另一个用于端口443上的HTTPS。然后将普通服务器块配置为始终重定向到ssl版本。
server {
listen 80;
server_name mydomain.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443;
server_name mydomain.com;
ssl on;
# other server config stuff here.
}
我个人会选择这个选项,因为PHP本身不需要处理任何事情。在web服务器级别处理这样的检查通常比较便宜。
使用App::before
您可能能够利用App/filters.php
文件中的App::before()
块。
将块更改为包括一个简单的检查,以查看当前请求是否安全,如果不安全,则重定向它。
App::before(function($request)
{
if( ! Request::secure())
{
return Redirect::secure(Request::path());
}
});
使用过滤器
另一个选择可能是创建这样的过滤器。人们通常也将其存储在app/filters.php
中。
Route::filter('force.ssl', function()
{
if( ! Request::secure())
{
return Redirect::secure(Request::path());
}
});
然后,您可以像这样对任何路由、路由组或控制器强制执行该新筛选器。
个别路线
Route::get('something', ['before' => 'force.ssl'], function()
{
return "This will be forced SSL";
});
路线组
Route::group(['before' => 'force.ssl'], function()
{
// Routes here.
});
控制器
您需要在控制器的__construct()
方法中执行此操作。
public function __construct()
{
$this->beforeFilter('force.ssl');
}
我将spring saml扩展与Apache2.2+Tomcat7.0+OKTA(IdP)一起使用。securitycontext.xml如下所示: MetadataGeneratorFilter: 谢谢 奈良 HTTP请求转储:
当我们使用AWS应用型负载均衡将传入请求重定向到我们的服务器时,我们创建了一个SSL证书并将其设置为负载均衡器。它同时监听HTTP 80和HTTPS 443端口的流量。在这两种情况下,流量都被重定向到目标组实例的HTTP 80端口。 在这些情况下,有nginx服务器配置为侦听它们所在的实例的HTTP 80端口。 当我更新nginx.conf文件以将传入的HTTP请求重定向到HTTPS协议时,我们面
我们使用拉维5。要将http连接重定向到https,请使用中间件HttpsProtocol。 在我们的4个测试用例中,只有1个正确工作(最后一个重定向)。其他3种情况的中间件添加了url extra index.php。 http://www.aqualink.az/index.php ---
我试图点击一个postendpoint,但它给出了错误302,当我在同一台服务器上尝试另一个get Url时,它给出了200。然后,我使用laxrirectstrategy()重定向了post请求。post请求正在重定向到get请求(只有同一个endpoint的方法名是get和post),它没有从post方法获得响应。有人能告诉我如何使用apahce httpClient 4.5将post请求重定
问题内容: 我正在构建我的第一个Angular.js应用程序,并且正在使用Yeoman。 Yeoman使用Grunt来允许您使用命令’grunt server’运行node.js连接服务器。 我正在html5模式下运行我的angular应用程序。根据angular文档,这需要修改服务器以将所有请求重定向到应用程序的根目录(index.html),因为angular应用程序是单页ajax应用程序。
问题内容: 这是我的standalone-full.xml配置,其中ssl配置了 security realm . Subsystem Socket Binding 问题答案: 重写规则可用于重定向用户。在undertow子系统(standalone.xml或domain.xml)中,你需要创建一个新的重写过滤器,然后在新的fitler-ref中启用该过滤器: 在过滤器部分中创建新的重写过滤器。在