2015-04-01 73 views
15

我現在nginx的配置是這樣的:如何從充當nodejs服務器反向代理的nginx服務器提供靜態文件?

upstream nodejs { 
    server 127.0.0.1:3000; 
} 

server { 
    listen 8080; 
    server_name localhost; 
    root ~/workspace/test/app; 
    index index.html; 

    location/{ 
     proxy_pass http://nodejs; 
     proxy_set_header Host $host ; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

我非常非常新的nginx的,但起碼我知道nginx的比節點/快遞服務在靜態文件更好。如何配置服務器以便nginx提供靜態文件?

+0

如果你要這麼居高臨下,至少可以把它鏈接起來,然後我會刪除我的曲目estion。我已經看了,而且我很難找到它。 – m0meni 2015-04-01 05:44:49

回答

16

我解決了它使用這個新的配置:

upstream nodejs { 
    server localhost:3000; 
} 

server { 
    listen 8080; 
    server_name localhost; 
    root ~/workspace/test/app; 

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

    location @nodejs { 
     proxy_redirect off; 
     proxy_http_version 1.1; 
     proxy_pass http://nodejs; 
     proxy_set_header Host $host ; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

感謝以下堆棧溢出後:


How to serve all existing static files directly with NGINX, but proxy the rest to a backend server.

+0

'try_files $ uri/$ uri @nodejs;'應該是'try_files $ uri $ uri/@nodejs;' – 2015-04-02 13:05:12

+0

我的錯我拷貝了錯誤。謝謝。 – m0meni 2015-04-02 13:58:10

+0

這個配置意味着首先nginx嘗試提供靜態文件,如果找不到,那麼它會重定向到nodejs服務器? – Santosh 2016-05-21 07:10:47

16

您可能需要爲server中的另一個location塊設置靜態文件。

location /static { 
    alias /path/to/static/files; 
} 

這使用alias directive。 然後,您可以點擊文件在localhost:8080/static/some_file.css

P.S.您不需要您當前設置的rootindex。 (root是一種有輕微difference in usage類似alias

相關問題