2017-03-10 34 views
12

Dosyalarım yerel sunucumda yayınlanmadan önce ve iyice sunabildim. Şimdi, statik dosyalarımı S3'e taşıdım, ancak index.html başlangıç ​​dosyasını özel bir etki alanına sahip olarak sunmak istiyorum. Diğer .html’a gitmek için index.html’den mümkün olmalıdır.Nginx Proxy Pass S3 özel html dosyası

Şimdiye kadar ben var:

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; 
    } 

} 

ben yanlış yapıyorum benim durumumda için çalışmak herhangi örnekler bulmak gibi olamaz ??

GÜNCELLEME: i https://stackoverflow.com/a/22843758/977622 bu biraz bazlı değişti ve ben başlarken:

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

ve

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

+1

/etc/nginx/mime.types yapılandırmasında ne var? Ayrıca, konum bloğunuzda varsayılan bir mime türü ayarlayabilirsiniz. – Ellery

cevap

0

bir proxy senaryo içeriği türünde tarafından belirtilir Kökeni sunucusu (bu durumda S3), geçersiz kılmadıkça. S3 nesnelerini yüklediğinizde MIME tiplerini belirtebilirsiniz. Bunu S3 web arayüzünden yaparsanız, 'Şekil türünde içerik türlerini otomatik olarak' olarak işaretlemediğinizden emin olun. AWS cli tools, aksi belirtilmedikçe mime tiplerini otomatik olarak tahmin eder. Dosyaları yüklemek için başka bir şey kullanırsanız, ilgili kullanım kılavuzuna/API referansına başvurmanız gerekir.

Ayrıca, S3 doğrudan size web sitesi hizmet hala sizin için uygun ise Hosting a Static Website on Amazon S3

+0

kontrol ettim ve S3'teki dosyaların METADATA'sı .js (application/javascript) ve .css (text/css). Nginx yapılandırmam yanlış olabilir mi? Yanlış bir şey görüyor musun? Doğrudan S3'ten hosting yapmak bir seçenek değildir çünkü DNS'i orada göstermesi için kontrolüm yoktur. – psychok7

+0

Bu js dosyasına doğrudan S3'ten erişirseniz aldığınız içerik türü (ve diğer başlıklar) nedir? – weirdan

+0

Chrome'da Belge olarak yorumlanmış ancak MIME tipi metin/css ile aktarılmış kaynak alıyorum. – psychok7

0

emin değil görüyorum, ama ben size Nginx aracılığıyla S3 doğrudan CSS ve diğer statik dosyalara hizmet değil öneririm olabilir . Yani, index.html ürününüze şimdiki gibi proxy_pass ile hizmet verin, ancak index.html içindeki CSS ve JS dosyalarının bağlantıları mutlak olmalıdır, S3 grubunuz etki alanı olarak.

Bu sorunu burada çözecek hem ve bu gibi başka amaçlarla daha iyi olurdu:

  • Sen Nginx çalıştıran sunucudan işlemci ve ağ maliyetlerini azaltmak gerekir.
  • Her statik dosya isteği için sitenizi kendi sunucunuzdan geçmeyerek daha hızlı sunacaksınız.
  • S3 şifreleme, sıkıştırma, CDN ekleme ve diğer birçok kullanışlı özellik sunar. Kendi sunucunuzdan geçmek için zorlayıcı bir sebep olmadıkça, bundan kaçınırım. Kullanıcıların hala kendi etki aracılığıyla sitenizi görüntülemek edecek

Not, sadece CSS ve S3 alanından servis edilecektir JS dosyaları var.

+0

Dosyaları doğrudan S3'ten alma daha hızlı değildir, RTT ve TCP Tıkanıklık Penceresine bağlıdır. Pratikte, büyük miktarda statik dosya sunarken orta tip EC2 örneğinde% 5'ten fazla CPU gerektirmez, statik içerik de önbelleklenebilir. Aynı bölgede EC2 ve S3 kovasının bulunması önerilir çünkü bölgeler arası trafik, S3'ten doğrudan her bir talebin ödenmekte olduğu verilere hizmet etmenin tersidir. – Anatoly