2015-08-26 71 views
2

當我的nginx(充當我的快速應用程序服務器的逆向代理和服務靜態資產)獲取回來時,我試圖將我的index.html發送回客戶端404代表它正在代理的API。配置nginx發回index.html 404

這是我的nginx的配置相關的服務器塊:

server { 
    listen 80; 
    root /var/www/dist; 
    index index.html index.htm; 

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 
    expires 1d; 
    } 

    location @proxy { 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-NginX-Proxy true; 

    proxy_http_version 1.1; 
    proxy_redirect  off; 
    proxy_pass   http://node-app; 
    proxy_cache_bypass $http_upgrade; 
    } 

    location/{ 
    try_files $uri $uri/ @proxy; 
    } 

    error_page 404 = /; 

} 

只是爲了說明,用例這裏是我使用的陣營路由器啓用HistoryLocation,所以現在如果我嘗試刷新我的路線之一(如example.com/signup),我得到一個404

回答

0

當使用Express服務器(包括通過nginx的),發回index.html作爲一個包羅萬象的,處理其他類型的文件後:

app.get(/\.(js|css|png|jpg|svg)$/, function(req, res) { 
    var uri = url.parse(req.url, true, false); 

    sendFile(res, uri.pathname); 
    }); 

    //------------- return index.html for everything else so routing works 

    app.get('*', function(req, res) { 
    sendFile(res, `${htmlPath}index.html`); 
    }); 

如果直接使用nginx(無快速),則返回index.html中的404錯誤:

error_page 404 /index.html; 
     location = /40x.html { 
    }