Ich benutze nginx
mit docker-compose
und wollen docker-compose
SERVER_NAME
-nginx
als Umgebungsvariable zu übergeben. Ich habe die folgende nginx Konfigurationsdatei:nginx „env“ Richtlinie ist hier nicht erlaubt
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
}
}
Aus irgendeinem Grund nginx ist über diese env
Richtlinie Fluchen:
2016/08/26 13:02:39 [emerg] 1#0: "env" directive is not allowed here in /etc/nginx/sites-enabled/default:7
Hier ist meine Dockerfile, wo Sie, dass diese Konfiguration sehen wird als nginx Standardseite verwendet:
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;"]
Warum?
ANTWORT: Lassen Sie mich exlain, was das Problem im Detail war. myconf.conf
Datei wurde als /etc/nginx/sites-available/default
verwendet, die nicht die root nginx Config ist. Die Wurzel nginx Config ist nginx.conf
und umfasst /etc/nginx/sites-available/default
in http
Kontext:
http {
...
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
so meine env
Aussage ist in der Tat in http
Kontext, was falsch ist - es sollte nur in Stammkontext geschrieben werden.
möglich Duplikat http://serverfault.com/questions/577370/how-can-i-use-Umgebungsvariablen-in-nginx-conf –
@ivan_pozdeev Ich habe diesen Beitrag 10 mal gelesen - es gibt keine direkte Antwort. Es scheint, als wäre nichts mit 'env' in meiner Konfiguration falsch, es ist nur nginx durcheinander, so dass es seine eigenen Anweisungen aus dem Kernmodul nicht erkennt: http://stackoverflow.com/questions/15416957/using-variables-in -nginx-Standortregeln –
Wenn Sie speziell daran interessiert sind, was mit Ihrer Konfiguration nicht stimmt, was Sie tun sollen, hier ist eine Antwort ... –