2015-05-17 10 views
2

Я пытаюсь развернуть сервер веб-сервера на Elastic Beanstalk. У меня есть контейнер Docker, который содержит как nginx, так и jar-сервер, с nginx, просто выполняющим пересылку. Nginx.conf как это:Websockets на ElasticBeanstalk, дающий 404

listen 80; 
location /ws/ {    # <-- this part only works locally 
    proxy_pass http://127.0.0.1:8090/;  # jar handles websockets on port 8090 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
} 
location/{      # <-- this part works locally and on ElasticBeanstalk 
    proxy_pass http://127.0.0.1:8080/; # jar handles http requests on port 8080 
    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 X-Forwarded-Host $server_name; 
} 

я могу запустить этот докер локально и все работает отлично - HTTP запросы обслуживаются, и я могу подключить WebSockets с помощью ws://localhost:80/ws/ Однако, когда я раскрываю к Elastic Beanstalk, запросы НТТР все еще в порядке, но попытка подключения websockets на ws://myjunk.elasticbeanstalk.com:80/ws/ дает ошибку 404. Нужно ли мне что-то еще, чтобы разрешить веб-узлы на эластичном бобовом стебле?

ответ

2

Хорошо, это работает. Мне нужен балансировщик нагрузки ElasticBeanstalk для использования TCP вместо HTTP.

Чтобы сделать это с консоли AWS (как это изложено 5/16/2015), перейдите в среду ElasticBeanstalk, выберите «Конфигурация» в меню слева, в разделе «Сетевой уровень» есть «Балансировка нагрузки», панель. Нажмите его шестерню, затем вы можете изменить протокол балансировки нагрузки с http на tcp.

+1

Это работает, но я бы рекомендовал использовать ebextensions и установить параметр, чтобы установить протокол в tcp. Таким образом, если вы восстановите среду или клонируете свою среду, настройки на вашем балансировщике нагрузки будут сохраняться. Вы можете сделать это, создав в своем приложении файл '.ebextensions/load_balancer.config' с параметром« namespace: aws: elb: loadbalancer »и« option_name: LoadBalancerProtocol »и« value: TCP ». Если вы разместите этот источник приложения в своей среде, настройки будут сохраняться при перестройках, клонах и сохраненных конфигурациях. –

+0

Список поддерживаемых параметров параметров доступен здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html Ниже приведен пример установки параметров параметров в файле конфигурации ebextensions http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options Файл находится в формате yaml –

+0

Я, конечно, согласен, что лучше работать с ним из кли. Я не знаю о вашем подходе «.ebextensions», так как мне всегда удавалось избежать этого. Вместо этого я перехожу в 'LoadBalancerPortProtocol', который вы предлагаете (хотя, может быть, у вас есть опечатка?), Используя' aws elasticbeanstalk create-environment' и передавая его с помощью '--option-settings'. – thund