我在AWS ElasticBeanstek上运行laravel应用程序,我使用应用型负载均衡。
Route::get('/what-is-my-ip', function(){
return request()->ip();
});
当我运行这段代码时,不会显示我的ip,它会显示负载平衡器的ip地址。
那些在cloudflare上使用相同问题的人也有过cloudflare的经验,并且有cloudflare的解决方案,但我找不到AWS应用程序负载平衡器的解决方案。
我在获取用户的ip地址和在维护模式下添加-允许ip时遇到问题。
function real_IP() {
$real_IP = '';
if (getenv('HTTP_CLIENT_IP'))
$real_IP = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$real_IP = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$real_IP = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$real_IP = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$real_IP = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$real_IP = getenv('REMOTE_ADDR');
else
$real_IP = 'UNKNOWN';
return $real_IP;
}
当我运行这段代码时,它给出了正确的ip地址,我想跨laravel修复它。
>
HTTPS
(Laravel资产和路由):您应用了SSL/TLS并且URL在浏览器中受到保护,但Laravel不会加载您的资产并抛出错误。该错误看起来像是阻止了URLS,因为您正在尝试加载超文本传输协议URL超文本传输协议请求。大多数人在使用AWS或任何其他云负载均衡器
时面临此问题。在终止TLS/SSL证书的负载均衡器后面运行您的应用程序时,您可能会注意到您的应用程序在使用url助手时有时不会生成HTTPS链接。通常,这是因为您的应用程序正在端口80上从负载均衡器转发流量,并且不知道它应该生成安全链接。
IP
:另一个问题是IP问题。您无法获取用户/访问者IP,它总是返回服务器IP。这个问题也是因为代理
而发生的。
解决方案:当您使用AWS或任何云负载平衡器时,您可能不知道实际负载平衡器的确切IP地址,因此应允许所有代理,如以下示例所示。
使用*
允许信任中间件中的所有代理。这是您的中间件app/Http/middleware/trustproxy。php。
namespace App\Http\Middleware;
use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var string|array
*/
protected $proxies = '*';
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO;
如果您使用的是AWS弹性负载平衡,那么$headers的值应该是Request::HEADER\u X\u FORWARDED\u AWS\u ELB 有关$headers属性中可能使用的常量的更多信息,请查看Symfony关于信任代理的文档。
namespace App\Http\Middleware;
use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array|string
*/
protected $proxies = '*';
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;
我认为它解决了您的HTTPS、IP和其他代理相关问题。要阅读更多详细信息,请阅读Laravel文档。如果您面临任何其他问题或需要改进,请在下面评论。
您需要信任AWS负载均衡器作为代理。
如果您使用的是AWS弹性负载平衡,那么您的值应该是HEADER\u X\u FORWARDED\u AWS\u ELB。有关$headers属性中可能使用的常量的更多信息,请查看Symfony关于信任代理的文档。
如果您使用的是Amazon AWS或其他“云”负载均衡器提供商,您可能不知道实际均衡器的IP地址。在这种情况下,您可以使用*信任所有代理:
protected $proxies = '*';
是否需要检查在EKS中创建的入口资源和由AWS负载均衡器控制器创建的应用程序负载均衡器之间的映射? 我的理解是AWS LBC为类“alb”的入口创建了ALB。删除入口资源后,应该删除此ALB。 但这种情况有时不会发生。可能是因为我搞乱了其他相关资源,比如statefulset、service或pod。(或者可能是由于重复部署而没有首先删除?) 那么,有没有办法在AWS中查看入口和相应ALB之间的链
我正在使用AWS应用程序负载平衡器来设置我的环境。 应用程序负载平衡器在端口443接收来自Internet的请求,并将其转发到端口80 Apache服务器在EC2服务器上运行,docker位于负载平衡器后面的端口80上<我的网站是用CakePHP开发的<我打电话的时候https://www.example.com,我的网页已加载 然而,在PHP中,当我使用以下代码获取当前url时,得到的url是h
我有一个EC2实例,它托管一个在IIS中运行的网站。我还设置了一个带有HTTPS侦听器的AWS应用程序负载平衡器,并在其中添加了网站的SSL证书(保存在AWS证书管理器中)。HTTPS侦听器将流量重定向到我的目标组,目标组又指向我的EC2实例。EC2实例使用安全组只允许来自负载平衡器的流量。 首先,我是否正确地认为应用程序负载平衡器会解密SSL流量,从而使用HTTP将其转发到我的目标组(换句话说,
目标是在一个简单的堆栈中包含 HTTP/2 支持:在多个 EC2 实例中部署的 Web 应用程序是启用了 PROXY 协议策略 (SSL:443 ➝ TCP:80) 的传输级 CLB,以便卸载 SSL/TLS 并平衡传入的 HTTPS 流量。 PROXY协议的几个原因:(1)地理定位逻辑的执行;(2)执行简单的访问控制规则;(3)日志记录。所有这些功能都需要访问可靠的(即不可轻易伪造的)客户端IP
问题内容: 我们正在使用Redis从AWS ELB后面的Web应用程序(基于pub / sub)收集事件。我们正在寻找一种解决方案,以允许我们针对不同的服务器进行扩展并实现高可用性。我们不希望将这两个服务器放在Redis集群中,我们的计划是使用cloudwatch监视它们,并在必要时在它们之间切换。 我们尝试了一个简单的测试,即在ELB后面放置两个Redis服务器,对ELB DNS进行远程登录,然
我有一个java应用程序在两个ec2实例中运行,客户可以使用AWS应用程序负载均衡器访问它们。现在ALB可以作为SSL终止点工作。所有请求都通过端口443上的ALB。工作正常。问题是java应用程序有时需要重定向到不同的路径。由于java应用程序不知道它在SSL ALB后面运行,因此重定向路径包括超文本传输协议://而不是https:// 有什么方法可以在我的应用程序之外将协议修改为https?