【问题标题】:How to reference web in nginx config when run with docker-compose?使用 docker-compose 运行时如何在 nginx 配置中引用 web?
【发布时间】:2020-03-17 11:01:33
【问题描述】:

我尝试使用 Nginx、Certbot 和我的应用配置服务:

docker-compose.yml:

version: '3'

services:
 nginx:
  image: nginx:1.15-alpine
  restart: unless-stopped
  volumes:
   - ./data/nginx:/etc/nginx/conf.d
   - ./data/certbot/conf:/etc/letsencrypt
   - ./data/certbot/www:/var/www/certbot
  ports:
   - "80:80"
   - "443:443"
  command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
 certbot:
  image: certbot/certbot
  restart: unless-stopped
  volumes:
   - ./data/certbot/conf:/etc/letsencrypt
   - ./data/certbot/www:/var/www/certbot
  entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
 web:
  image: example_app:latest
  restart: unless-stopped
  ports:
   - "5005:5005"

nginx/app.conf:

server {
  listen 80;
  server_name my.app;
  server_tokens off;
  location /.well-known/acme-challenge/ {
    root /var/www/certbot;
  }
  location / {
    return 301 https://$host$request_uri;
  }
}
server {
  listen 443 ssl;
  server_name my.app;
  server_tokens off;
  ssl_certificate /etc/letsencrypt/live/my.app/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/my.app/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  location / {
    proxy_pass http://web;
  }
}

每当我通过https://my.app 请求服务时,我总是使用 502 网关。

我翻阅了很多材料,但我无法理解我做错了什么?

【问题讨论】:

    标签: nginx docker-compose docker-networking certbot


    【解决方案1】:

    问题出在upstream 服务上,我将docker-compose.yml 中的web 的restart: unless-stopped 更改为restart:always。

    nginx/app.conf:

    upstream flask {
      server web:5005;
    }
    
    server {
        listen 80;
        server_name my.app;
        server_tokens off;
    
        location /.well-known/acme-challenge/ {
            root /var/www/certbot;
        }
    
        location / {
            return 301 https://$host$request_uri;
        }
    }
    
    server {
        listen 443 ssl;
        server_name my.app;
        server_tokens off;
    
        ssl_certificate /etc/letsencrypt/live/patricia.app/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/patricia.app/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
        location / {
            proxy_pass  http://flask;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2020-02-18
      • 2020-04-30
      • 2022-10-09
      • 2022-01-09
      • 2017-11-19
      • 1970-01-01
      相关资源
      最近更新 更多