nginx は /etc/letsencrypt/options-ssl-ngin.conf ファイルを見つけることができません

nginx は /etc/letsencrypt/options-ssl-ngin.conf ファイルを見つけることができません

私は、Linux ボックス (Ubuntu 18.04 を実行) と nginx、gunincorn、letsencrypt、docker を使用して、python-django ウェブアプリを提供しようとしています。いくつかのオンライン チュートリアルに従った後、このチュートリアルに従ってポート 80 経由で http 経由でアプリを提供することに成功しました。参考: docker-compose.github.io の django-postgres ディレクトリに nginx というディレクトリを作成します。

しかし、現在、ポート 443 経由で https 経由でデプロイするのに苦労しています。おそらく、基本的な Docker の概念を理解していないのだと思います。実行時に表示されるエラーはsudo docker-compose up次のとおりです。

NGINX エラー:

nginx_1 | nginx: [emerg] open() "/etc/letsencrypt/options-ssl-nginx.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/local_ssl.conf:28

これは、options-ssl-nginx.conf ファイルを docker-compose.yml ファイルにリンクしていないためだと思います。ボリューム経由でリンクしたのかもしれません。ただし、これが正しいかどうかはわかりません。docker-compose.yml ファイルと nginx.conf ファイルの関連部分は次のとおりです。

ドッカー:

version: '3'

services:

  # database containers
  database1:
    ...

  # web container
  djangoapp:
    ...

  # reverse proxy container (nginx)
  nginx:
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./config/nginx/conf_ssl.d/:/etc/nginx/conf.d
      - static:/opt/services/djangoapp/static
      - media:/opt/services/djangoapp/media
      - ~/nginxlogs:/var/log/nginx
      - /etc/letsencrypt
      - /var/www/certbot
/live/maps.critr.org.uk
    networks:
      - nginx_network
    depends_on:
      - djangoapp

  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - /etc/letsencrypt
      - /var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

networks:
   ...

volumes:
   ...

nginx.conf:

upstream critr_server {
    server djangoapp:8000;
}

# divert all http traffic to https
server {
    listen 80; 
    server_name maps.critr.org.uk;
    return 301 https://maps.critr.org.uk;
}

server {

    listen 443 ssl;

    server_name maps.critr.org.uk;

    ssl_certificate /etc/letsencrypt/live/maps.critr.org.uk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/maps.critr.org.uk/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers   HIGH:!aNULL:!MD5;


    include         /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam     /etc/letsencrypt/ssl-dhparams.pem;


    location /.well-known {
        root /opt/services/djangoapp/static/;
    }   

    location /static/ {
        alias /opt/services/djangoapp/static/;
    }   

    location /media/ {
        alias /opt/services/djangoapp/media/;
    }   

    location / { 
        proxy_pass https://critr_server;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }   
}

これは docker-compose のボリュームを理解していないことによる問題だと思います。しかし、私はこれを解決しようとほぼ 1 週間試みていますが、何も思いつきません。

答え1

このファイルは、certbot インストーラーを使用するすべてのサイトのデフォルト構成であるため、欠落しているようです/etc/letsencrypt/options-ssl-nginx.conf。したがって、このファイルは通常、証明書のインストール (または発行とインストール) 中に作成されますが、これは主に、システムを初めて構成するユーザーによって手動で行われます。

したがって、次のいずれかを行うことができます。

  1. このファイルの最新バージョンをGitHubから入手してください。https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.confそしてそれを本来あるべき場所に戻す
  2. または、nginx.confファイルを変更して、エラーが発生する行 (そのファイルを含む行) を Github から取得した内容に置き換えます。

答え2

/etc/letsencrypt/options-ssl-nginx.confこのようなファイルはセントオス

sudo yum install yum-utils
repoquery --list python2-certbot-nginx

または、このようにウブントゥ

dpkg -L python2-certbot-nginx

ファイルを/etc/letsencryptdir にコピーします。

sudo cp /usr/lib/python2.7/site-packages/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf /etc/letsencrypt/

Dockerでnginxとletsencryptを使いたい場合は、以下をお読みください。 このチュートリアル

関連情報