Подтвердить что ты не робот

Websocket с Tomcat 7 на AWS Elastic Beanstalk

Я пытаюсь запустить простое эхо-приложение websocket на Elastic Beanstalk. Но если я запустил его, я получаю ошибку 400 на Socket Upgrade от Tomcat, но это просто происходит на порту 80, если я прохожу через порт 8080, думал, что loadbalancer я могу получить доступ к websocket без ошибки 400 при обновлении сокета (на порту 8080). Порт 8080 и порт 80 находятся на TCP, а не на HTTP.

Мой вопрос: кто выполняет перевод с 80 на 8080, поскольку конфигурация по умолчанию на loadbalancer просто передает трафик от 80 до 80. Перевод должен быть в экземпляре EC2. IPTables? В этом переводе что-то идет не так.

Было бы неплохо получить некоторую информацию от амазонки о том, как этот трафик является маршрутизируемым.

4b9b3361

Ответ 1

Решение состоит в том, чтобы настроить Loadbalacer для непосредственного подключения к Tomcat:

Resources:
  AWSEBSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "Security group to allow HTTP, SSH and 8080 for all"
      SecurityGroupIngress:
        - {CidrIp: "0.0.0.0/0", IpProtocol: "tcp", FromPort: "80", ToPort: "80"}
        - {CidrIp: "0.0.0.0/0", IpProtocol: "tcp", FromPort: "8080", ToPort: "8080"}
        - {CidrIp: "0.0.0.0/0", IpProtocol: "tcp", FromPort: "22", ToPort: "22"}
  AWSEBLoadBalancer:
    Type: "AWS::ElasticLoadBalancing::LoadBalancer"
    Properties:
      Listeners:
        - {LoadBalancerPort: 443, InstanceProtocol: "TCP", InstancePort: 8080, Protocol: "SSL", SSLCertificateId: "arn:aws:iam::9999999999999:server-certificate/sslcert"}
        - {LoadBalancerPort: 80, InstanceProtocol: "TCP", InstancePort: 8080, Protocol: "TCP"}
      AppCookieStickinessPolicy:
        - {PolicyName: "lb-session", CookieName: "lb-session"}
      HealthCheck:
        HealthyThreshold: "3"
        Interval: "30"
        Target: "HTTP:8080/ping.html"
        Timeout: "5"
        UnhealthyThreshold: "5"
  • Создайте папку с именем .ebextensions в папке WEB-INF Возможно, в более новой версии..bebements должен быть в корневой папке, может кто-нибудь подтвердить это?
  • Создайте файл с именем websocket.config в этой папке с содержимым сверху
  • Развертывание приложения
  • Восстановить среду

Для настройки без SSL удалите этот:

 - {LoadBalancerPort: 443, InstanceProtocol: "TCP", InstancePort: 8080, Protocol: "SSL", SSLCertificateId: "arn:aws:iam::9999999999999:server-certificate/sslcert"}

Или замените Apache на Nginx и настройте Niginx для поддержки WebSocket