反向代理nginx和Express服务器返回502

时间:2015-07-29 05:28:10

标签: node.js express nginx docker dockerfile

我正在运行一个VPS,其中Nginx反向代理配置转发到三个Angular网站。每个站点都在Express服务器后面的自己的Docker容器中运行。

我起床并运行的前两个站点没问题。它们是简单的Angular站点,在项目目录的基础上有server.jsindex.html个文件。

对于第三个站点,我得到了一点点发烧友并使用Grunt将项目文件构建到名为public的新目录中。我的目标是从该公共目录中查看该站点。

这是我的nginx.conf文件。请注意,前两个服务器块正在按预期工作。但是,浏览到第三个会导致“502 Bad Request”:

server {
    listen 80;
    server_name domain1.com domain2.ca;
    location / {
            proxy_pass              http://127.0.0.1:9001;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_redirect          off;
            proxy_set_header        X-Forwarded-For   $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name sub1.domain1.com sub1.domain2.ca;
    location / {
            proxy_pass              http://127.0.0.1:9002;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_redirect          off;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
// THIS IS THE SERVER THAT IS NOT WORKING
server {
    listen 80;
    server_name sub2.domain1.com sub2.domain2.ca;
    location / {
            proxy_pass              http://127.0.0.1:9003;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_redirect          off;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这是启动我的Express服务器的文件。这三个项目都有非常相似的服务器,但是这个服务器在/public而不是/

提供静态文件
var express = require('express');
var http = require('http');

var app = express();

app.use(express.static(__dirname + '/public'));

var port = 80;
http.createServer(app).listen(port, function() {
  console.log("server listening on port " + port);
});

最后,因为这个站点位于docker容器中,所以这是我用于构建它的Dockerfile:

# Start with angular node grunt bower setup
FROM brymastr/angular:latest

# Add to working dir
WORKDIR /src
ADD . /src

# install dependencies
RUN     npm install
RUN     bower install --allow-root
RUN     sudo apt-get -y install ruby-full
RUN     sudo gem install sass
RUN     grunt build

# Run application
EXPOSE  80
CMD ["nodemon", "server.js"]

在我的两个本地开发环境中运行容器时,此图像工作正常。这让我觉得问题在于VPS上的nginx配置。

回顾一下:nginx接收请求并将其转发到为运行站点的docker容器分配的端口。容器的快速服务器接收请求并提供项目的/public文件夹中的文件。

在nginx和express之间的路由时,我是否遗漏了什么?

非常感谢任何帮助。我还是新手,我只是想在一个VPS上节省一些运行小网站的钱。可能有更好/更简单的方法来做到这一点,但这就是我现在想出来的。我已经进行了广泛的搜索并尝试了很多,包括在/使用快速服务静态文件并将nginx代理传递给127.0.0.1:9003/public,但没有运气。

由于

0 个答案:

没有答案