次のように、Dockerfileとカスタムnginx構成ファイル(Dockerfileと同じディレクトリ内)があります。
Dockerfile:
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
nginx.confファイル:
upstream myapp1 {
least_conn;
server http://domain.com:81;
server http://domain.com:82;
server http://domain.com:83;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $Host;
proxy_cache_bypass $http_upgrade;
}
}
次の2つのコマンドを実行します。
docker --tls build -t nginx-image .
docker --tls run -d -p 80:80 --name nginx nginx-image
次に、実行中のすべてのコンテナをチェックアウトしましたが、表示されませんでした。 nginxコンテナのログを検索すると、次のエラーメッセージが見つかりました。
[emerg] 1#1:/etc/nginx/nginx.conf:1の不明なディレクティブ「上流」nginx:[emerg] /etc/nginx/nginx.confの不明なディレクティブ「上流」:
何が欠けていますか?
NGiNXドキュメント で述べたように、upstream
はhttp
コンテキストで定義されることになっています。
nginx
不明なディレクティブ「upstream
」 で述べたように:
そのファイルが
nginx.conf
によって正常に含まれている場合、http
コンテキスト内にすでに含まれています。
http {
include /etc/nginx/sites-enabled/*;
}
-c /etc/nginx/nginx.conf
を使用するか、上記のブロックのような小さなラッパーを作成してnginx -c
にする必要があります。
Dockerの場合、さまざまなオプションを abevoelker/docker-nginx
で確認できます。
docker run -v /tmp/foo:/foo abevoelker/nginx nginx -c /foo/nginx.conf
デフォルトのnginx.conf
の場合 CMD
を確認してください :
CMD ["nginx", "-c", "/data/conf/nginx.conf"]
Gzip設定を追加する例:
docker run -v [./]gzip.conf:/etc/nginx/conf.d/gzip.conf nginx
またはdocker-compose:
version: '3'
services:
nginx:
image: nginx
volumes:
- ./gzip.conf:/etc/nginx/conf.d/gzip.conf
- ./html:/usr/share/nginx/html:ro