如何配置nginx以便它适用于Express?

Modified on: Sun, 25 Aug 2019 11:00:02 +0800

我正在尝试配置nginx,以便proxy_pass向我的节点应用程序发出请求。有关StackOverflow的问题得到了许多赞成:https://stackoverflow.com/questions/5009324/node-js -nginx-and-now我正在使用配置。

(但问题是关于服务器配置,它应该是在ServerFault上)

这是nginx配置:

server {
  listen 80;
  listen [::]:80;

  root /var/www/services.stefanow.net/public_html;
  index index.html index.htm;
  server_name services.stefanow.net;

  location / {
    try_files $uri $uri/ =404;
  }

  location /test-express {
    proxy_pass    http://127.0.0.1:3002;
  }    

  location /test-http {
    proxy_pass    http://127.0.0.1:3003;
  }
}

使用普通节点:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3003, '127.0.0.1');

console.log('Server running at http://127.0.0.1:3003/');

有效!
检查:http://services.stefanow.net/test-http

使用express:

var express = require('express');
var app = express(); //

app.get('/', function(req, res) {
  res.redirect('/index.html');
});

app.get('/index.html', function(req, res) {
  res.send("blah blah index.html");
});

app.listen(3002, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3002/');

不起作用:(
请参阅:http://services.stefanow.net/test-express


我知道事情正在发生。

a)test-express没有运行

b)text-express正在运行

(我可以确认它是在服务器上的ssh时通过命令行运行)

root@stefanow:~# service nginx restart
 * Restarting nginx nginx                                                                                  [ OK ]

root@stefanow:~# curl localhost:3002
Moved Temporarily. Redirecting to /index.html

root@stefanow:~# curl localhost:3002/index.html
blah blah index.html


我尝试按照此处所述设置标题:http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/(仍然无效)

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;


我也尝试用'localhost'替换'127.0.0.1',反之亦然


请指教。我很确定我会错过一些明显的细节,我想了解更多。谢谢。

最佳答案

您表示已配置为提供路径/index.html,但您需要/test-express/index.html。配置express以提供/test-express/index.html或使nginx从代理请求中剥离/test-exress。后者就像在locationproxy_pass中添加尾部斜杠一样简单。

location /test-express/ {
  proxy_pass    http://127.0.0.1:3002/;
}

有关详细信息,请参见http://nginx.org/r/proxy_pass

作者:Alexey Ten

相关问答

添加新评论