【发布时间】:2018-05-10 12:36:50
【问题描述】:
我已成功设置面向公众的 nginx 负载均衡器,上游指向一个应用程序负载均衡器,该负载均衡器可平衡我的高可用性 Elastic Beanstalk 环境。
我遇到的问题似乎是一夜之间,当我访问它挂起的 url 时。然后通过 nginx 重新加载它再次工作......
架构中的更多信息:
(应用程序负载均衡器上的侦听器)
80 ---> nodejs:4000
8400 ---> php:8400
在小型 ec2 上运行的面向公众的负载均衡器:
/etc/nginx/conf.d/my.site.com.conf:
upstream api_container {
server awseb-AWSEB-PKTUBG0TQ9ME-840688617.eu-west-1.elb.amazonaws.com:8400;
}
upstream app_container {
server awseb-AWSEB-PKTUBG0TQ9ME-840688617.eu-west-1.elb.amazonaws.com;
}
server {
listen 80;
listen [::]:80;
server_name my.site.com
location /.well-known {
alias /var/www/ssl/.well-known;
}
location / {
rewrite ^ https://my.site.com$request_uri permanent;
}
}
server {
listen 443 ssl;
keepalive_timeout 75s;
server_name my.site.com;
add_header Access-Control-Allow-Origin '*';
add_header Access-Control-Allow-Methods 'POST, GET, OPTIONS, PUT, DELETE';
add_header Access-Control-Allow-Headers 'Authorization, X-Requested-With, X-Requested-At, enctype, Accept, Content-Type, Content-Disposition, X-Xsrf-Token, X-Csrf-Token';
add_header Access-Control-Expose-Headers 'Authorization';
location / {
include proxy_params;
proxy_cache STATIC; // this is set in nginx.conf
proxy_pass http://app_container/;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
}
location /lv1 {
include proxy_params;
proxy_pass http://api_container/;
}
// ssl certs import down here
}
/etc/nginx/proxy_params
proxy_ignore_headers "Cache-Control" "Expires";
proxy_max_temp_file_size 0;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 1024m;
client_body_buffer_size 4m;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_intercept_errors off;
我错过了一些基本的东西吗?我不是 nginx 大师,但我有点难过......我的假设与缓冲或缓存有关?但我不能指望它
更新
原来是 php-fpm 在 api 实例上使用 97-100% cpu 变得疯狂,所以我从代理收到超时和错误...
在 api 网络服务器上,我有 nginx 通过 php-fpm 套接字为 laravel 提供服务,并且它在特定请求上使用接近 100% 的 cpu。看起来是代码问题...
nginx 是这个工具吗?也许只是 apache 和 php?
【问题讨论】:
-
这个网址指向api_container;
-
制作了 edts:但您不应该能够访问这些它们只允许来自应用程序负载均衡器的流量
-
你的负载均衡器和应用服务器在同一个VPC还是在不同的vpc??
-
都在同一个 vpc 上
-
用
proxy_pass <ip of appserver>:4000和proxy_pass <ip of appserver>:8000替换它
标签: node.js amazon-web-services nginx amazon-elastic-beanstalk