Tôi đã sử dụng thiết lập Node.js + NGINX trên heroku cho nhiều dự án. Bằng cách này, bạn có thể xử lý nginx phục vụ các tệp tĩnh, bộ nhớ đệm, proxy đến các máy chủ khác và ủy quyền cho một số quy trình nút.
Sử dụng gói xây dựng đa buildpack (https://github.com/ddollar/heroku-buildpack-multi).
Nó cho phép bạn chỉ định tệp .buildpacks đề cập đến một số gói. Trong tệp .buildpacks của tôi, tôi sử dụng gói dựng sẵn Heroku Node mặc định và một ngã ba của bộ dựng hình nginx mà tôi đã xây dựng lại để bao gồm hỗ trợ SSL.
https://github.com/theoephraim/nginx-buildpack.git
https://github.com/heroku/heroku-buildpack-nodejs.git
Tập tin nginx buildpack sử dụng tệp nginx.conf.erb có thể tham chiếu đến ENV vars. Bạn phải nói cho nó để lắng nghe trên cổng theo quy định của Heroku trong biến môi trường được gọi là "PORT"
listen <%= ENV["PORT"] %>;
Sau đó, bạn có máy chủ nút của bạn khởi động trên bất kỳ cổng bạn chọn, nói 5001, và trong cấu hình nginx của bạn, bạn có thể thiết lập một đường chuyền proxy để ứng dụng nút của bạn:
location/{
proxy_pass http://127.0.0.1:5001;
}
Note - procfile của bạn cần phải sử dụng một lệnh khởi nginx đặc biệt (một phần của buildpack nginx) mà sau đó gọi bất cứ điều gì khác mà bạn vượt qua nó. Trong trường hợp của tôi, tôi sử dụng mãi mãi để chạy ứng dụng nút của tôi:
web: bin/start-nginx ./node_modules/.bin/forever app.js
Và trong tập tin nút chính của bạn, bạn phải tạo một tập tin khi nó đã bắt đầu lên thành công để báo hiệu cho buildpack nginx rằng nó nên bắt đầu nghe
fs.openSync('/tmp/app-initialized', 'w');
có một giải thích đầy đủ về cách sử dụng các buildpack nginx trong readme @https://github.com/theoephraim/nginx-buildpack
Great câu hỏi. – Green
Tôi đoán vì Heroku không cho phép bạn cài đặt proxy nginx vv Heroku cung cấp máy chủ web và bộ nhớ cache mà bạn có thể cung cấp dưới dạng tiện ích bổ sung. – stiebitzhofer
Nếu bạn chỉ muốn có một proxy, thay cho nginx bạn có thể sử dụng substacks bouncy hoặc nodejitsus http proxy – jpillora