[英]NodeJS working behind Nginx
我在同一台服務器上同時運行NodeJS和Nginx。 Nginx接受來自“ www.example.com”的請求,我希望NodeJS接受來自“ api.example.com”的請求。 我幾乎了解了這一點,我將Nginx配置為將請求從“ api.example.com”轉發到NodeJS(localhost:3000),並且肯定可以正常工作,只是請求沒有任何信息到達NodeJS。
例如,我正在使用PassportJS來開發NodeJS背后的所有邏輯。 我有這樣的事情:
app.post('/room/create', function(req, res) { console.log(req); } );
和“ req”,當我通過“ api.ismuser.com”訪問時,應該存儲請求中所有信息的變量為空。 但是,如果我使用公共IP:PORT來獲取NodeJS,它將起作用。
我只是猜測這是由於Nginx所致,他像NodeJS的反向代理一樣工作。
我不知道將Nginx放在NodeJS前面是否做得很好,但這是我發現使用相同的公共IP來運行www.ismuser.com和api.ismuser.com的唯一方法。
我能做什么?
更新
Nginx.conf:
http {
passenger_root /home/ubuntu/.rvm/gems/ruby-2.0.0-p195@ism_r3/gems/passenger-4.0.5;
passenger_ruby /home/ubuntu/.rvm/wrappers/ruby-2.0.0-p195@ism_r3/ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://backend/;
proxy_redirect off;
}
}
server {
listen 80;
server_name www.example.com;
root /home/ubuntu/ismapi/ism/public; # <--- be sure to point to 'public'!
passenger_enabled on;
}
}
您可能想要嘗試設置沒有尾隨URI部分“ /”的proxy_pass指令,如下所示:
proxy_pass http://backend;
如果您指定URI,它將在發送到后端node.js應用程序的請求中使用。 代替對/room/create
的請求,node.js將獲得對/
的請求,該請求由您的proxy_pass設置定義。
有關更多信息,請參見nginx proxy_pass文檔: http ://wiki.nginx.org/HttpProxyModule#proxy_pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.