2017-03-10 15 views
12

Tôi ở đó, trước khi tôi có tệp của mình trên máy chủ cục bộ và tôi đã có thể phục vụ chúng tốt. Bây giờ, tôi đã chuyển các tệp tĩnh của mình sang S3, nhưng tôi muốn phục vụ tệp index.html starter với một miền tùy chỉnh. Từ index.html phải có khả năng điều hướng đến các trang khác .html.Nginx Proxy Vượt qua S3 tệp html cụ thể

Cho đến nay tôi đã nhận:

server { 
    listen 443 ssl http2; 
    listen [::]:443 ssl http2; 
    include snippets/letsencrypt.conf; 
    include snippets/ssl-params.conf; 

    charset utf-8; 

    server_name mydomain; 

    location/{ 


proxy_set_header  Host 's3-eu-west-1.amazonaws.com'; 
     proxy_set_header  Authorization ''; 
     proxy_hide_header  x-amz-id-2; 
     proxy_hide_header  x-amz-request-id; 
     proxy_hide_header  Set-Cookie; 
     proxy_ignore_headers "Set-Cookie"; 
     proxy_intercept_errors on; 
     set $indexfile   "s3-eu-west-1.amazonaws.com/myprod-bucket/static/js/frontend/build_v0.5/"; 
     proxy_pass    https://$indexfile; 

     # expires 1y; 
     log_not_found off; 

     auth_basic "Restricted Content"; 
     auth_basic_user_file /etc/nginx/.htpasswd_finder; 
    } 

} 

tôi dường như không thể tìm thấy bất kỳ ví dụ mà làm việc cho trường hợp của tôi, những gì tôi đang làm vậy ??

UPDATE: i thay đổi này một chút dựa trên https://stackoverflow.com/a/22843758/977622 và tôi bắt đầu nhận được:

Refused to execute script from '../vendor.5ad3d736.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

Resource interpreted as Stylesheet but transferred with MIME type text/html: "../styles/main.b812e04a.css".

+1

whats trong cấu hình /etc/nginx/mime.types của bạn? Ngoài ra, bạn có thể đặt loại mime mặc định trong khối vị trí của mình. – Ellery

Trả lời

0

Trong một proxy kiểu nội dung kịch bản được xác định bởi các máy chủ gốc (S3 trong trường hợp này), trừ khi bị ghi đè. Bạn có thể chỉ định các loại mime trên các đối tượng S3 khi bạn tải chúng lên. Nếu bạn làm điều đó thông qua giao diện web S3, hãy đảm bảo bạn không bỏ chọn 'Tìm ra các loại nội dung tự động'. AWS công cụ cli cũng đoán loại mime tự động, trừ khi có quy định khác. Nếu bạn sử dụng một cái gì đó khác để tải lên các tập tin, bạn cần phải consul tài liệu tham khảo hướng dẫn sử dụng/API của công cụ tương ứng.

Ngoài ra bạn có thể phục vụ bạn trang web trực tiếp từ S3, xem Hosting a Static Website on Amazon S3

+0

tôi đã kiểm tra và METADATA của các tệp trên S3 là đúng .js (application/javascript) và .css (văn bản/css). Cấu hình nginx của tôi có bị sai không? bạn có thấy điều gì sai không? Lưu trữ trực tiếp từ S3 không phải là một tùy chọn vì tôi không có quyền kiểm soát DNS để trỏ nó vào đó. – psychok7

+0

Loại nội dung (và các tiêu đề khác) bạn nhận được nếu bạn truy cập tệp js đó trực tiếp trên S3? – weirdan

+0

Trên Chrome tôi đang nhận 'Tài nguyên được hiểu là Tài liệu nhưng được chuyển với văn bản/css loại MIME ..' – psychok7

0

Không chắc chắn nếu nó vẫn còn thích hợp với bạn, nhưng tôi muốn đề nghị bạn phục vụ CSS và các file tĩnh của bạn trực tiếp từ S3 và không qua Nginx của bạn . Tức là, hãy phục vụ index.html của bạn với proxy_pass như bạn hiện đang làm, nhưng các liên kết tới tệp CSS và JS bên trong index.html của bạn phải tuyệt đối, với nhóm S3 của bạn làm miền.

này sẽ vừa giải quyết vấn đề của bạn ở đây, và sẽ tốt hơn vì các lý do khác như:

  • Bạn sẽ làm giảm CPU và mạng chi phí từ máy chủ chạy Nginx.
  • Bạn sẽ phục vụ trang web của mình nhanh hơn bằng cách không đi qua máy chủ của riêng bạn cho mọi yêu cầu tệp tĩnh.
  • S3 cung cấp mã hóa, nén, khả năng thêm CDN và nhiều tính năng hữu ích khác. Trừ khi có một lý do thuyết phục để đi qua máy chủ của riêng bạn, tôi sẽ tránh nó.

Lưu ý rằng người dùng của bạn sẽ vẫn xem trang web của bạn thông qua tên miền của riêng bạn, đó chỉ là tệp CSS và JS sẽ được phân phát từ miền S3.

+0

Cung cấp các tập tin trực tiếp từ S3 không nhất thiết phải nhanh hơn, nó phụ thuộc vào RTT và Cửa sổ Congestion TCP. Trong thực tế, việc phục vụ số lượng lớn các tệp tĩnh không yêu cầu nhiều hơn 5% CPU trên loại phương tiện EC2 trung bình, nội dung tĩnh cũng có thể lưu vào bộ nhớ cache. Việc đặt thùng EC2 và S3 ở cùng một vị trí được khuyến nghị vì lưu lượng truy cập liên vùng không có chi phí nào đối diện với việc phân phát dữ liệu từ S3 trực tiếp, nơi mọi yêu cầu duy nhất đều được thanh toán. – Anatoly

Các vấn đề liên quan