我在不同的端口上有三个docker容器,并希望使用nginx为每个容器实现反向代理,这样我就可以通过传递关键字而不是端口来导航到每个容器。喜欢而不是http://localhost:3000
我希望传递http://localhost/app1
我用dockerfile下面创建了nginx图像。
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY index.html usr/share/nginx/html
和我的nginx conf文件如下所示:
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
upstream app1 {
server localhost:3000;
}
upstream app2 {
server localhost:3001;
}
server {
listen 3000;
location /app1 {
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
server {
listen 3001;
location /app2 {
proxy_pass http://localhost:3001;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
但是从图像创建nginx容器之后。我看到了容器的创建。但是当我尝试使用localhost进行访问时,它超时了所以nginx没有运行或者我错过了什么。我无法使用localhost / app1或app2加载容器,甚至localhost也无法正常工作。需要帮助。提前谢谢。
答案 0 :(得分:1)
启动容器时,您正在暴露端口80和443但我没有看到您在nginx配置中侦听这些端口。
请尝试按listen 3000
替换listen 80
,然后尝试访问localhost/app1
我还可以看到您在启动docker容器时使用--link
。所以我认为您应该使用app1
和app2
代替localhost
。如果有什么我错过了,请告诉我,但事实并非如此。您还必须确保可以在这些端口(3000和3001)上访问您的应用程序。
此外,您的2个位置应位于同一服务器块中:
server {
listen 80;
location /app1 {
proxy_pass http://app1:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location /app2 {
proxy_pass http://app2:3001;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}