我想创建一个简单的反向代理,使用nginx合并两个dev应用程序。为此,我做了这个nginx配置:
upstream angulardev{
server ${DEV_HOST}:${ANGULAR_PORT};
}
upstream nestjsdev{
server ${DEV_HOST}:${NESTJS_PORT};
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_set_header Host $http_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-Proto $scheme;
proxy_pass http://angulardev;
}
location /api {
proxy_set_header Host $http_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-Proto $scheme;
proxy_pass http://nestjsdev;
}
}因此,您可以看到,我使用了一些env来创建这个配置文件。但是,当我试图使用这个docker撰写文件来构建我的坞容器时:
version: '3.7'
services:
nginx:
image: nginx:1.19-alpine
volumes:
- "./conf/default.conf:/etc/nginx/conf.d/default.conf"
environment:
DEV_HOST: 192.168.1.10
ANGULAR_PORT: 4200
NESTJS_PORT: 8080
ports:
- 8000:80我有个错误:
nginx_1 | nginx: [emerg] invalid port in upstream "${DEV_HOST}:${ANGULAR_PORT}" in /etc/nginx/conf.d/default.conf:2对我来说,这意味着在启动之前,在坞内不要设置env var。所以,我不知道我做错了什么以及如何解决这个问题。
发布于 2022-08-31 10:49:36
您正在误读错误消息。这与环境变量是否设置无关。Nginx在其配置文件中根本不支持环境变量。您看到了错误,因为nginx需要一个端口,而它却找到了${ANGULAR_PORT},这在语法上是无效的。
如果您阅读码头形象的文档,有一个题为“在nginx配置中使用环境变量”的部分。部分内容如下:
nginx不支持大多数配置块中的环境变量.但是这个映像有一个函数,它将在nginx启动之前提取环境变量。 默认情况下,此函数读取
/etc/nginx/templates/*.template中的模板文件,并将执行envsubst的结果输出到/etc/nginx/conf.d。
因此,如果要在nginx配置中使用环境变量,则需要如下所示:
version: '3.7'
services:
nginx:
image: nginx:1.19-alpine
volumes:
- "./conf/default.conf:/etc/nginx/templates/default.conf.template"
environment:
DEV_HOST: 192.168.1.10
ANGULAR_PORT: 4200
NESTJS_PORT: 8080
ports:
- 8000:80https://stackoverflow.com/questions/73554653
复制相似问题