2015-09-15 16 views
12

Her bir farklı URL için uygulamanın yeni bir sürümünü önleyecek olan HTML5 Uygulama Önbelleği'ni kullanan tek bir sayfa uygulaması oluşturmaya çalışıyorum, böylece herkesi yeniden yönlendirmeliyim / ve benim uygulama rotasını daha sonra (bu devdocs.io üzerinde kullanılan çözüm).HTML5 Uygulama Önbelleği ile tek bir sayfa uygulaması için Nginx yapılandırması

İşte nginx yapılandırmam. Varsa, tüm isteklerin bir dosya göndermesini istiyorum, /auth ve /api numaralı telefondan API'ma yeniden yönlendir ve tüm diğer istekleri index.html'ye yönlendir. Aşağıdaki yapılandırma neden tarayıcımın bir yönlendirme döngüsü olduğunu söylemesine neden oluyor? Kullanıcı # 2 konum bloğuna ulaşırsa ve rotası statik bir dosyayla eşleşmezse, # 1 numaralı konum bloğuna gönderilir. Bu, # 1 numaralı konum bloğuna ve index.html'yi sunması gereken "/" adresine yönlendirir? Yönlendirme döngüsüne neden olan nedir? Bunu başarmanın daha iyi bir yolu var mı?

root /files/whatever/public; 
index index.html; 

# If the location is exactly "/", send index.html. 
location =/{ 
    try_files $uri /index.html; 
} 

location/{ 
    try_files $uri @redirectToIndex; 
} 

# Set the cookie of the initialPath and redirect to "/". 
location @redirectToIndex { 
    add_header Set-Cookie "initialPath=$request_uri; path=/"; 
    return 302 $scheme://$host/; 
} 

# Proxy requests to "/auth" and "/api" to the server. 
location ~* (^\/auth)|(^\/api) { 
    proxy_pass http://application_upstream; 
    proxy_redirect off; 
} 
+0

Kök 'yönergesi ve 'index.html' dosyanız var mı? Error.log –

+0

Evet. Soru içerecek şekilde güncellendi. –

+0

Hata günlüğümdeki hiçbir şey yok. –

cevap

16

O döngü mesajı /files/whatever/public/index.html var olmadığını göstermektedir, bu nedenle /index.html eşit olduğunda konumda try_files/$ uri bulamazsa, bu nedenle try_files hep içten Bu istekleri, harici yönlendirmeyi yapan @ konumuna yönlendirir.

Ana hatlardan daha karmaşık bir kurulumunuz olmadıkça, çok fazla bir şey yapmanıza gerek olduğunu düşünmüyorum. Tek dosya js uygulaması için harici yönlendirmelere (hatta dahili yönlendirmelere) veya sunucu tarafı çerezine gerek duymamalısınız. Uygulama ve api için normal ifadeler de doğru değildi.

root /files/whatever/public; 
index index.html; 

location/{ 
    try_files $uri /index.html =404; 
} 

# Proxy requests to "/auth" and "/api" to the server. 
location ~ ^/(auth|api) { 
    proxy_pass http://application_upstream; 
    proxy_redirect off; 
} 
+0

Teşekkürler, index.html bulunmadı. Neden sunucu tarafı çerez göndermeye veya yönlendirmeye ihtiyacım olmadığını söylediğine merak ediyorum. HTML5 Uygulama Önbelleği, her URL için istenmeyen bir şekilde yeni bir önbellek oluşturacaktır. Bu nedenle, gördüğüm tek çözüm, çerezi ayarlamam, tüm istekleri '/' olarak yönlendirmem ve daha sonra ön koddaki JavaScript içinde yeniden yönlendirmem gerektiğidir. –

+0

Sanal URL'ler yerine sümüklü böcek kullanabilir misiniz? Http: // site/yol1/yol2/foo 'yerine, http: // site/# yol1/yol2/foo'. Bu html5 app önbelleğe alma veya korkunç verimsiz harici yönlendirmelerden kaçınmak için düşünebildiğim tek yol budur. – runningdogx