2017-02-20 73 views
0

应用程序位于aws(elasticbeanstack)上的负载平衡器后面。在负载平衡之前它已经工作了。应用程序响应400错误请求。关于这个话题有很多问题。我尝试了很多。粘滞的会话,更改上游代理http://localhost,连接升级......但我无法弄清楚。下面是nginx的error.log中:Sails.js套接字连接400错误请求

* 1217连接()失败(111:连接 拒绝),同时连接到上游,客户端:172.31.31.90,服务器:, 请求:“GET /socket.io /?__sails_io_sdk_version=0.13.8 & __sails_io_sdk_platform =浏览器& __sails_io_sdk_language = JavaScript的& EIO = 3 &运输=轮询&吨= LfS5yzc & SID = i1QLZeltxMS0D5oBAAAE HTTP/1.1" ,上游: “http://127.0.0.1:8081/socket.io/?__sails_io_sdk_version=0.13.8&__sails_io_sdk_platform=browser&__sails_io_sdk_language=javascript&EIO=3&transport=polling&t=LfS5yzc&sid=i1QLZeltxMS0D5oBAAAE

Nginx confifarions;

user nginx; 
worker_processes auto; 

error_log /var/log/nginx/error.log; 

pid  /var/run/nginx.pid; 

events { 
    use epoll; 
    worker_connections 1024; 
    multi_accept on; 
} 

http { 

    port_in_redirect off; 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 

    # Cache modifikasyonları 
    open_file_cache   max=10000 inactive=10m; 
    open_file_cache_valid 20m; 
    open_file_cache_min_uses 1; 
    open_file_cache_errors on; 

    # Transfers 
    client_body_buffer_size 10K;   # client POST buffer size 
    client_header_buffer_size 1k;   # client header size 
    client_max_body_size 20M;    # allowed size for a client request 
    large_client_header_buffers 2 1k;  # number and size of buffers for large client headers 

    # Timeouts 
    client_body_timeout 30; 
    client_header_timeout 30; 
    keepalive_timeout 65; 
    send_timeout 10; 

    # Elastic Beanstalk Modification(EB_INCLUDE) 

    log_format healthd '$msec"$uri"' 
         '$status"$request_time"$upstream_response_time"' 
         '$http_x_forwarded_for'; 

    include /etc/nginx/conf.d/*.conf; 

    # End Modification 
} 

服务器:

upstream nodejs { 
    server 127.0.0.1:8081; 
    keepalive 256; 
} 

server { 
    listen 8080; 

    location/{ 
     proxy_pass http://nodejs; 
     #proxy_set_header Connection ""; 
     proxy_http_version 1.1; 
     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 Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 

     proxy_buffers 8 24k; 
     proxy_buffer_size 2k; 
    } 

    gzip on; 
    gzip_comp_level 4; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
} 

回答

1

走进了elasticbeanstack仪表板和点击为您的应用环境。

左边是一个垂直列表,其中一个是你应该点击的配置。向下滚动并找到“负载平衡”框,单击该框右上角的编辑工具以配置负载平衡器。

在这种形式下,第二个字段应该标记为Protocol,并有两个选项:HTTP(应该选择)和TCP。选择TCP并向下滚动并保存。

还确保在您的ec2 AWS Admin> EC2>安全组中打开您正在使用的端口(8081)。

可能会帮助的最后一件事是在您的应用的根目录中创建一个名称为.ebextensions的目录。然后在其中创建 file.config一个文件,这个内容添加到文件:

files: 
    "/etc/nginx/conf.d/websocketupgrade.conf" : 
     mode: "000755" 
     owner: root 
     group: root 
     content: | 
      proxy_set_header  Upgrade   $http_upgrade; 
      proxy_set_header  Connection  "upgrade"; 

如果所有的不工作,你不想打扰自己,只是禁止nginx的,大多数时候这将解决(400)问题。

希望它有帮助

+0

我做了,但它不起作用。 – user305015

+0

此外tcp监听器给出“粘滞性选项不适用于TCP协议”警告。我不确定,但它意味着负载均衡器后套接字连接会丢失。编辑过的 – user305015

+0

,看上面。 – Sam