私はdocker-compose
とnginx
を使用してdocker-compose
は、環境変数としてnginx
にSERVER_NAME
を渡したい許可されていません。私は、次のnginxの設定ファイル作成:何らかの理由でnginxの「ENV」ディレクティブは、ここで
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;"]
なぜですか?
ANSWER:私をexlainせ、詳細に問題が何でしたか。 myconf.conf
ファイルが/etc/nginx/sites-available/default
として使用されましたが、これはrootの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
文脈で実際にあります。
可能
main
コンテキストで有効ないずれもserver
ディレクティブのいくつかの種類があります/ 577370/how-can-i-use-environment-variables-in-nginx-conf –@ivan_pozdeev私はその記事を10回以上読んだことがあります。私の設定で 'env'に何も問題がないように思えます。ちょうどnginxがコアモジュールからの独自のディレクティブを認識しないように乱れています:http://stackoverflow.com/questions/15416957/using-variables-in -nginx-location-rules –
あなたがするべきことではなく、あなたの設定に間違っていることに特に興味があるなら、ここに答えがあります... –