2015-04-01 18 views
15

nginx cấu hình hiện tại của tôi là thế này:Làm thế nào để bạn phục vụ các tệp tĩnh từ một máy chủ nginx hoạt động như một proxy ngược cho một máy chủ nodejs?

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

Tôi rất rất mới để nginx, nhưng ít nhất tôi biết nginx đó là tốt hơn so với nút/hiện tại phục vụ các tập tin tĩnh. Làm thế nào tôi có thể cấu hình máy chủ để nginx phục vụ các tệp tĩnh?

+0

Nếu bạn đang đi để được như vậy condescending có thể bạn ít nhất là liên kết nó và sau đó tôi sẽ xóa qu của tôi estion. Tôi đã nhìn và tôi đã gặp khó khăn khi tìm nó. – m0meni

Trả lời

16

Tôi giải quyết nó sử dụng cấu hình này mới:

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

Nhờ vào Stack Overflow sau bài:


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

+0

'try_files $ uri/$ uri @nodejs;' nên là 'try_files $ uri $ uri/@nodejs;' –

+0

Tôi đã sao chép sai. Cảm ơn bạn. – m0meni

+0

Cấu hình này có nghĩa là đầu tiên nginx cố gắng phân phối tệp tĩnh, nếu nó không thể tìm thấy, thì nó chuyển hướng đến máy chủ nodejs? – Santosh

16

Có thể bạn sẽ muốn một khối location khác trong số server của mình cho các tệp tĩnh.

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

Điều này sử dụng số alias directive. Sau đó, bạn có thể nhấn tệp tại localhost:8080/static/some_file.css

P.S. Bạn không cần số root hoặc index mà bạn đã đặt hiện tại. (root cũng tương tự như alias với một chút difference in usage)

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