7

Я знаю, что этот вопрос задан раньше, но для меня ничего не работает. Я пытался несколько различных вещей, таких как ответы, описанные в этих вопросах:Эластичный переплет Beanstalk Http перенаправления на Https

How to get Elastic Beanstalk nginx-backed proxy server to auto-redirect from HTTP to HTTPS? Redirecting EC2 elb from http to https

Ни один из них не похоже на работу. Я aws noob, поэтому я не совсем уверен, как работает редактирование файлов конфигурации, или если я сделал что-то неправильно.

Моя установка следующие:

  • Route 53 указывает на Elastic Beanstalk (Nginx)
  • ELB port configuration with ACM certificate (с использованием протокола TCP/SSL, как это делает мои WebSockets работы)
  • nodejs приложение на порту 8080

Мой текущий файл nginx.config в моей папке .ebextensions (получил это от this article):

files: 
    "/tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf" : 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     upstream nodejs { 
      server 127.0.0.1:8081; 
      keepalive 256; 
     } 
     server { 
      listen 8080; 
      set $fixedWWW ''; 
      set $needRedir 0; 
      # nginx does not allow nested if statements 
      # check and decide on adding www prefix 
      if ($host !~* ^www(.*)) { 
       set $fixedWWW 'www.'; 
       set $needRedir 1; 
      } 
      # what about that https? the traffic is all http right now 
      # but elastic load balancer tells us about the original scheme 
      # using $http_x_forwarded_proto variable 
      if ($http_x_forwarded_proto != 'https') { 
       set $needRedir 1; 
      } 
      # ok, so whats the verdict, do we need to redirect? 
      if ($needRedir = 1) { 
       rewrite ^(.*) https://$fixedWWW$host$1 redirect; 
      } 
      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; 
      } 
      gzip on; 
     } 

Но это ничего не делает. У меня кончились идеи. Я не уверен, что мне не хватает шага или чего-то другого, но я не знаю, что делать. В качестве обходного решения у меня есть мой frontularjs front end, перенаправляющий запросы без https, но это слишком хакерское, а некоторые из DOM отображаются перед перенаправлением, я бы хотел перенаправить на балансировщик нагрузки - там, где он должен перенаправляться.

+0

На первый взгляд, конфигурация Nginx выглядит правильно. Он проверяет заголовок x-forwarded-proto и перенаправляет, если не «https». Похоже, вы также перенаправляетесь из голого домена в субдомен www, это работает? Вы уверены, что конфигурация nginx фактически применяется к вашим серверам beanstalk? –

+0

Я на самом деле просто указал голый домен на www в маршруте 53, а затем www указывает на EB. Таким образом, проверка на данный момент является излишней. Как я могу проверить, переопределяет ли этот файл файл по умолчанию? – KDogg

+1

[Что вы делали KDogg] (https://xkcd.com/979/)? У меня такая же проблема! –

ответ

2

Похоже, вы пытаетесь сделать как перенаправление для не-WWW, так и для соединений, отличных от HTTPS. Вы пробовали более простой случай только http: // -> https: //?

if ($http_x_forwarded_proto = "http") { 
    return 301 https://$host$request_uri; 
} 

Иногда бывает проще обрабатывать его с помощью двух переадресовывает, один из HTTP на HTTPS и один из не-WWW в WWW. Фактически, если вы собираетесь регистрировать свой сайт через HSTS (https-везде), им нужен такой подход.

Edit: Кроме того, только заметил, что первая строка вашей конфигурации, вы можете попробовать инъекционные файл Nginx непосредственно:

files: 
    "/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf" : 
Смежные вопросы