Nginx,AWS,EB,Docker,TCP Socketconfiguration400个不好的请求

我试图让端口80上的纯TCP套接字连接到端口80上的AWS上的Docker容器。到目前为止,我有:

  • 设置正确的安全组,让端口80通过负载平衡器,它被设置为tcp连接,而不是http。

  • 能够看到由EB创build的e2c实例上的nginx日志。 报告如下:

172.31.22.8 – – [12 / Jan / 2017:20:44:43 +0000]“…数据…”400 173“ – ”“ –

  • 然后程序创build套接字报告:
HTTP/1.1 400 Bad Request Server: nginx/1.10.1 Date: Thu, 12 Jan 2017 21:05:54 GMT Content-Type: text/html Content-Length: 173 Connection: close <html> <head><title>400 Bad Request</title></head> <body bgcolor="white"> <center><h1>400 Bad Request</h1></center> <hr><center>nginx/1.10.1</center> </body> </html> 

我已经尝试了许多不同的nginxconfiguration。但是在默认情况下 ,在我开始之前configuration如下:

/etc/nginx/nginx.conf

 # Elastic Beanstalk Nginx Configuration File user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; log_format healthd '$msec"$uri"$status"$request_time"$upstream_response_time"$http_x_forwarded_for'; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } 

/etc/nginx/conf.d/elasticbeanstalk-nginx-docker-upstream.conf

 upstream docker { server 172.17.0.3:80; keepalive 256; } 

/etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker-proxy.conf

 server { listen 80; gzip on; gzip_comp_level 4; gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; access_log /var/log/nginx/access.log; location / { proxy_pass http://docker; proxy_http_version 1.1; proxy_set_header Connection $connection_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 

我知道Loadbalancer正在工作,因为数据到达运行docker的nginx e2c实例。 但是nginx不会将请求转发到docker容器。 是的,有一个应用程序运行在容器的端口80,它是一个C端口绑定到0.0.0.0端口80.所以没有HTTTP正确? 这是TCP?

所以我的问题,configuration文件必须为nginx转发到docker容器的TCP套接字连接?

自从我发布这个版本已经有大约10个月了。 AWS没有称为networking负载平衡器的东西。 我没有尝试过,但认为它应该允许使用粘性会话的纯TCP套接字。 所以我现在正在closures这个,直到我尝试。