我有一个ELB(Amazon Elastic Load Balancer)配置为在HTTPS上对最终用户请求进行负载平衡,在后端我的应用程序在HTTP上配置的Tomcat服务器上运行.
因此,当我的最终用户向应用程序发出请求时,请求将在HTTPS上,因为他们现在访问ELB,ELB在内部将其重定向到HTTP上的tomcat服务器.在tomcat中,我的应用程序通过Spring Security受到保护,如果请求是针对受保护资源而用户未登录,则会将用户重定向到已配置的登录页面.现在,这种到最终用户的重定向将通过HTTP,因为tomcat服务器最初从ELB获得了请求作为HTTP.这将导致404,因为我没有在HTTP上配置内向流量.
我们如何解决这个问题?唯一的选择是在enduser-ELB和ELB-tomcat上都有HTTPS,或者我在这里遗漏了一些东西?
tomcat spring-security http-redirect amazon-web-services amazon-elb
使用webserver(apache或nginx),我能够找到x-forwarded-for标头并找到客户端IP而不是ELB的IP.
我可以使用相同的东西,IPTables以便我能够阻止某些IP地址吗?
我可以在网络服务器级别这样做.但是,我认为这有点效率低,我希望我能用IP表或类似的东西实现这个目标吗?
我遇到了在aws弹性beanstalk上全局安装pm2的问题.我创建了以下用于安装pm2的脚本:
option_settings:
- option_name: NODE_ENV
value: production
container_commands:
01_enable_rootaccess:
command: echo Defaults:root \!requiretty >> /etc/sudoers
02_install_imagemagic:
command: yum install -y ImageMagick
03_download_new_relic:
command: rpm -Uvh http://download.newrelic.com/pub/newrelic/el5/i386/newrelic-repo-5-3.noarch.rpm
ignoreErrors: true
04_install_new_relic:
command: yum install -y newrelic-sysmond
ignoreErrors: true
05_add_license_key:
command: /usr/sbin/nrsysmond-config --set license_key=xxxxxxx
ignoreErrors: true
06_start_new_relic:
command: /etc/init.d/newrelic-sysmond start
ignoreErrors: true
07_install_pm2:
command: sudo /opt/elasticbeanstalk/node-install/node-v0.10.26-linux-x64/bin/npm install pm2 -g
ignoreErrors: true
08_stop_old_pm2_processes:
command: sudo /opt/elasticbeanstalk/node-install/node-v0.10.26-linux-x64/bin/pm2 delete all
ignoreErrors: true
09_start_pm2:
command: sudo /opt/elasticbeanstalk/node-install/node-v0.10.26-linux-x64/bin/pm2 startup -u ec2-user
ignoreErrors: true
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用'pm2 delete all'和'pm2 startup'来执行命令8和9 put …
amazon-web-services node.js npm amazon-elb amazon-elastic-beanstalk
本主题适用于HTTP流量(在Linux平台上).对于下面的问题,可能有一个很好的解决方案与ELB(每个人的价格合理).但到目前为止我找不到任何东西.这就是我需要专家意见的原因.
我多年来一直在使用AWS Elastic Load Balancing(ELB).突然意识到ELB有一个巨大的(对我来说很关键)的缺点,即阻止IP的入站连接.
因为一旦你落后于ELB,你的服务器内部防火墙(如iptables:)就已经没用了,因为ELB的所有转发流量都标记为ELB IP(不是真正的客户端IP).ELB仅像X-Forwarded-Forhttp头一样转发真实客户端IP ,这对于无用iptables.(除非你可以建议有一个Linux防火墙iptables,它也可以处理带有XFF(X-Forwarded-For)标头的HTTP流量.)
我理解这是反向代理的正常行为,但我需要放一个防火墙!我在AWS上知道,建议使用VPC和网络ACL规则通过IP阻止入站连接.但是NACL有规则限制!(AWS仅允许NACL中最多40条规则)
想象一下,你正在运行一个高流量的公共网站,然后需要阻止每天检测到很多坏的IP.这40条规则有何帮助?
我开始考虑使用NginxLoad-balancer(在单独的Instance上).我以前用过Nginx,这是一个很有前途的.当然,可以取代ELB.然后:
iptables上Nginx的实例!(那么,那个VM将成为LB +防火墙)但在我采取行动之前,
谢谢大家的建议.
我们的AWS EBS实例中的elasticbeanstalk-access_log日志文件包含408个错误,如下所示:
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:59 +0000] "-" 408 - "-" "-"
Run Code Online (Sandbox Code Playgroud)
它们随机出现,有时它们之间有几分钟,有时在几秒钟内就会出现4-6个错误.当服务器上没有任何实际流量时,这些错误也会发生在我们的非公共登台环境中,因此这些请求的来源可能是AWS自己的服务之一.
http amazon-web-services http-status-code-408 amazon-elb amazon-elastic-beanstalk
自从部署ALB以来已经差不多一年了.
经典LB和ALB之间几乎没有技术比较.
我的研究得出的唯一一件事是:aws论坛问题
虽然上述内容暗示ALB不可靠,但它只是一个来源.
我有兴趣了解在ELB和ALB之间切换的人的经验,主要是关于延迟,弹性,HA.
在我看来,Layer4平衡比Layer7更强大,因此一般性能会更好.
我在谷歌上发现的在AWS上运行django应用程序的典型设置都建议设置如下
ELB - > nginx - > gunicorn - > django
我想知道为什么这里真的需要nginx部分?ELB不足以代理吗?
在我们的例子中,我们在ECS上的各个docker容器中运行多个Gunicorn/django实例.
django reverse-proxy amazon-web-services gunicorn amazon-elb
我已在 AWS Route 53 上创建了一个私有托管区域。我想知道为在私有托管区域中具有记录条目的内部负载均衡器创建证书的最佳方式是什么。AWS 提供解决方案吗?
我创建了一个网络负载均衡器和一个目标组。然后我尝试为负载均衡器创建一个侦听器,但目标组在下拉菜单中显示为“不可用”。
我下一步可以做什么来调试这个?非常感谢您的帮助。
图片: https: //ibin.co/w800/3vKxtcYYs3mg.jpg
在运行Nginx的EC2实例前面使用AWS Elastic Load Balancer(应用程序类型)时,我遇到了HTTPS请求的"502 Bad Gateway"问题.Nginx在服务于python应用程序(金字塔框架)的服务器服务器的每个实例上充当反向代理.我正在尝试在ELB上使用TLS终止,以便EC2实例仅处理HTTP.这是粗略的设置:
客户端HTTPS请求> ELB(侦听443,在后端转发到80)> Nginx侦听端口80(在Ec2实例上)>转发到waitress/Pyramid(在同一个ec2实例上)
当我在HTTPS上发出请求时,我收到502错误.但是,当我发出常规HTTP请求时,我会得到预期的响应(与上面相同的设置,除了ELB正在侦听端口80).
一些额外的信息:ELB健康检查正在运行.所有VPC /安全组都配置正确(我相信).我正在使用AWS上的标准设置/演练在ELB上使用AWS证书.我通过SSH进入Ec2实例和Nginx访问日志,看起来HTTPS请求仍然是加密的?还是一些编码问题?
这是EC2实例上的nginx.conf:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
access_log /etc/nginx/access.log;
sendfile on;
# Configuration containing list of application servers
upstream app_servers {
server 127.0.0.1:6543;
}
server {
listen 80;
server_name [MY-EC2-SERVER-NAME];
# Proxy connections to the application servers
# app_servers
location / {
proxy_pass http://app_servers;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
} …Run Code Online (Sandbox Code Playgroud) amazon-elb ×10
nginx ×2
amazon-ec2 ×1
django ×1
firewall ×1
gunicorn ×1
http ×1
ip-blocking ×1
iptables ×1
node.js ×1
npm ×1
tomcat ×1