gpt4 book ai didi

此处不允许使用 nginx "env"指令

转载 作者:行者123 更新时间:2023-12-01 18:12:40 25 4
gpt4 key购买 nike

我将 nginxdocker-compose 结合使用,并希望 docker-composeSERVER_NAME 传递给 nginx 作为环境变量。我创建了以下 nginx 配置文件:

myconf.conf:

# Environment variables are used to dynamically set SERVER_NAME
# from docker-defined environment variable. This logic is stolen from:
#
# https://docs.apitools.com/blog/2014/07/02/using-environment-variables-in-nginx-conf.html
# https://github.com/wantedly/nginx-image-server/blob/master/files/nginx.conf

env SERVER_NAME;

upstream django {
server workflows-django:8000;
}

server {
listen 80;
perl_set $server_name_from_env 'sub { return $ENV{"SERVER_NAME"}; }';
server_name $server_name_from_env;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl;
perl_set $server_name_from_env 'sub { return $ENV{"SERVER_NAME"}; }';

server_name $server_name_from_env;
ssl_certificate /etc/ssl/private/bostongene.crt;
ssl_certificate_key /etc/ssl/private/bostongene.key;
charset utf-8;

client_max_body_size 75M;

location /media {
alias /srv/workflows/media;
}

location /static {
alias /srv/workflows/static;
}

location / {
# We can talk to upstream django either via uwsgi or just http proxy

# uwsgi:
uwsgi_pass django;
include /etc/nginx/uwsgi_params;


# http proxy:
#proxy_set_header Host $host;
#proxy_pass http://django
}
}

出于某种原因,nginx 正在咒骂该 env 指令:

2016/08/26 13:02:39 [emerg] 1#0: "env" directive is not allowed here in /etc/nginx/sites-enabled/default:7

这是我的 Dockerfile,您可以在其中看到此配置用作 nginx 默认站点:

Dockerfile:

FROM debian:latest

RUN apt-get update && apt-get install -y nginx \
ca-certificates \
gettext-base

COPY myconf.conf /etc/nginx/sites-available/default
COPY myconf.crt /etc/ssl/private/
COPY myconf.key /etc/ssl/private/

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log

EXPOSE 80 443

CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

为什么?

<小时/>

解答:让我详细解释一下,问题出在哪里。 myconf.conf 文件被用作 /etc/nginx/sites-available/default,它不是根 nginx 配置。根 nginx 配置是 nginx.conf,它在 http 上下文中包含 /etc/nginx/sites-available/default:

http {

...
##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

所以我的 env 语句实际上是在 http 上下文中,这是不正确的 - 它应该只写在根上下文中。

最佳答案

https://bot.ngx.cc/logs/%23nginx/2015/01-January/%23nginx.01-31.log (用谷歌搜索“nginx bug“此处不允许使用env指令”)已经给了我答案。

正如 server directive 的存在所证明的那样1,这不是您的主配置文件,而是要包含的 block ,很可能在 httpcontext 。而 env 仅在 main 中有效上下文。

<小时/> 1 如链接所示,server 有几种类型指令,这些指令在 main 中均无效。上下文

关于此处不允许使用 nginx "env"指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com