【问题标题】:Using nginx as reverse proxy pointing to AWS alb使用 nginx 作为反向代理指向 AWS alb
【发布时间】: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>:4000proxy_pass <ip of appserver>:8000替换它

标签: node.js amazon-web-services nginx amazon-elastic-beanstalk


【解决方案1】:

只需添加此问题的完整答案。我使用 laravel 作为数据库 api。

Laravel 雄辩的功能很棒且易于编写...但是在进行大量查询时显然会消耗资源。

在将 api 的功能从 eloquent 功能重写为纯 sql 后,它再次完美运行。

学会了不要每次都责怪第三方工具:3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 2020-02-15
    • 2021-05-26
    • 2021-06-17
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多