Sails.js套接字连接400错误请求

时间:2017-02-20 15:41:29

标签: nginx socket.io sails.js amazon-elb

应用程序位于aws(elasticbeanstack)上的负载均衡器后面。在负载平衡之前它已经有效了。该应用程序响应 400 Bad Request 。关于这个主题有很多问题。我尝试了很多。粘性会话,将上游代理更改为http://localhost,连接升级......但我无法弄清楚。这是nginx error.log:

  

* 1217 connect()失败(111:连接   拒绝)连接上游时,客户端:172.31.31.90,server :,   请求:“GET   /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 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 configuarions;

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 个答案:

答案 0 :(得分:1)

进入弹性堆栈仪表板,然后单击应用程序的环境。

在左侧,有一个垂直列表,其中一个是您应该单击的配置。向下滚动并找到Load Balancing框,单击该框右上角的编辑工具以配置负载均衡器。

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

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

最后可能有用的是在应用的根目录中创建名为.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)问题。

希望有所帮助