我正在运行一个VPS,其中Nginx反向代理配置转发到三个Angular网站。每个站点都在Express服务器后面的自己的Docker容器中运行。
我起床并运行的前两个站点没问题。它们是简单的Angular站点,在项目目录的基础上有server.js
和index.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
,但没有运气。
由于