7

Tôi biết câu hỏi này đã được hỏi trước đây, nhưng dường như không có gì có hiệu quả đối với tôi. Tôi đã thử nhiều thứ khác nhau, chẳng hạn như câu trả lời mô tả trong các câu hỏi sau:Cây đậu đàn hồi Http Chuyển hướng đến Https

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

Không ai trong số họ có vẻ làm việc. Tôi là một noob aws, vì vậy tôi không hoàn toàn chắc chắn như thế nào chỉnh sửa các tập tin cấu hình hoạt động - hoặc nếu tôi đã làm điều gì đó sai trái.

thiết lập của tôi là như sau:

Tệp nginx.config hiện tại của tôi trong thư mục .ebextensions của tôi (có này từ 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; 
     } 

Nhưng điều này dường như không làm gì cả. Tôi đã hết ý tưởng. Tôi không chắc là mình đang bỏ lỡ một bước hay gì đó nhưng tôi không biết phải làm gì. Như một giải pháp khác, tôi đã có kết thúc trước của angularjs chuyển hướng các yêu cầu không phải https, nhưng điều này quá khó và một số DOM hiển thị trước khi chuyển hướng, tôi muốn chuyển hướng ở trình cân bằng tải - nơi nó sẽ chuyển hướng.

+0

Trong nháy mắt, cấu hình Nginx của bạn có vẻ đúng. Nó đang kiểm tra tiêu đề x-forwarded-proto và chuyển hướng nếu không phải là 'https'. Có vẻ như bạn cũng đang chuyển hướng từ tên miền trần sang tên miền phụ www, có hoạt động không? Bạn có chắc chắn cấu hình nginx thực sự đang được áp dụng cho các máy chủ beanstalk của bạn? –

+0

Tôi đã thực sự chỉ trỏ tên miền rỗng vào www ở tuyến 53, và sau đó là các điểm www cho EB. Vì vậy, kiểm tra đó là dư thừa vào lúc này. Làm cách nào để kiểm tra xem tệp này có ghi đè tệp mặc định không? – KDogg

+1

[Bạn đã làm gì KDogg] (https://xkcd.com/979/) ?? Tôi có cùng một vấn đề! –

Trả lời

2

Dường như bạn đang cố gắng thực hiện cả chuyển hướng cho không phải WWW và cho kết nối không phải HTTPS. Bạn đã thử trường hợp đơn giản chỉ http: // -> https: // chưa?

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

Đôi khi việc xử lý nó dễ dàng hơn thông qua hai chuyển hướng, từ HTTP đến HTTPS và một từ không phải WWW đến WWW. Trong thực tế, nếu bạn đang đi để đăng ký trang web của bạn thông qua HSTS (https-ở khắp mọi nơi), họ yêu cầu cách tiếp cận này.

Edit: Ngoài ra, chỉ cần để ý dòng đầu tiên của cấu hình của bạn, bạn có thể muốn thử tiêm file nginx trực tiếp:

files: 
    "/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf" : 
Các vấn đề liên quan