我正在尝试通过将此docker-compose与nginx结合使用,为应用创建反向代理:
version: '3'
services:
nginx_cloud:
build: './nginx-cloud'
ports:
- 443:443
- 80:80
networks:
- mynet
depends_on:
- app
app:
build: './app'
expose:
- 8000
networks:
- mynet
networks:
mynet:
这是我的Nginx conf(简称):
server {
listen 80;
server_name reverse.internal;
location / {
# checks for static file, if not found proxy to app
try_files $uri @to_app;
}
location @pto_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app:8000;
}
}
当我运行它时,nginx返回:
[emerg] 1#1: host not found in upstream "app" in /etc/nginx/conf.d/app.conf:39
I tried several other proposed solutions without any success。奇怪的是,如果我通过可访问的容器内部的shell访问手动运行nginx,则可以ping app 等。但是可以从 docker-compose 或直接通过 docker运行本身不起作用。
我尝试设置一个单独的上游,添加docker内部解析器,等待几秒钟以确保该应用程序已在运行,等等。我知道这个问题已经被问过几次了,但是到目前为止似乎没有任何效果。
答案 0 :(得分:1)
您可以尝试以下服务器定义吗?
server {
listen 80;
server_name reverse.*;
location / {
resolver 127.0.0.11 ipv6=off;
set $target http://app:8080;
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_pass $target;
}
}
答案 1 :(得分:1)
app
服务可能无法及时启动。
要诊断问题,请尝试两步方法:
docker-compose up -d app
等待15到20秒(或启动应用程序所需的时间)
docker-compose up -d nginx_cloud
如果有效,则必须更新entrypoint
服务中的nginx_cloud
以等待app
服务。