让我们加密失败的授权程序 - docker

时间:2017-05-21 05:52:24

标签: nginx docker docker-compose lets-encrypt

我正在尝试为我的网站设置https证书。由于我使用的是docker容器,我已经设置了以下配置

  1. Node将公共内容提供给名为static-content
  2. 的命名驱动程序
  3. 此驱动程序由nginx
  4. 访问和提供

    我的docker-compose文件

    version : '2'
    
    services:
      nginx:
        container_name: nginx
        build: ./nginx/
        ports:
          - "80:80"
          - "443:443"
        links:
          - web:web
        volumes:
          - /etc/letsencrypt/:/etc/letsencrypt/
          - /etc/ssl:/etc/ssl
          - static-content:/usr/src/app
    
      web:
        container_name: web
        image: kannaj/42exp
        env_file: .env
        volumes:
          - ./logs:/usr/src/app/logs
          - static-content:/usr/src/app/public
        expose:
          - "8000"
        environment:
          - NODE_ENV=production
    
        command: npm run package
    
    volumes:
      static-content:
    

    正在运行docker volume inspect static-content会显示以下内容

    [
        {
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/www_static-content/_data",
            "Name": "www_static-content",
            "Options": {},
            "Scope": "local"
        }
    ]
    
    然后我跑了 sudo certbot certonly --force-renewal --webroot -w /var/lib/docker/volumes/www_static-content/_data -d 42exp.com -d www.42exp.com

    但我收到以下错误

      Domain: 42exp.com
       Type:   unauthorized
       Detail: Invalid response from
       http://42exp.com/.well-known/acme-challenge/KbQko2Y6lZfiDcbZ-dF7DTchX3G__wmZVMMn4xT8tjs
       [139.162.21.71]: 404
    
       Domain: www.42exp.com
       Type:   unauthorized
       Detail: Invalid response from
       http://www.42exp.com/.well-known/acme-challenge/gHHrVOYg9OfLznO7SiH_HTo6A6SGLpUHYuJax1U65ws
       [139.162.21.71]: 404
    

    经过一些研究,我将以下内容添加到nginx中的服务器块,假设certbot无法访问域

      location ~ /.well-known {
                allow all;
        }
    

    我现在收到了不同的404响应

    IMPORTANT NOTES:
     - The following errors were reported by the server:
    
       Domain: www.42exp.com
       Type:   unauthorized
       Detail: Invalid response from
       http://www.42exp.com/.well-known/acme-challenge/dWH2F9pApDnElq8jpqiykaylqUF7NR-RZ8MmWTg1NRA:
       "<html>
       <head><title>404 Not Found</title></head>
       <body bgcolor="white">
       <center><h1>404 Not Found</h1></center>
       <hr><center>"
    
       Domain: 42exp.com
       Type:   unauthorized
       Detail: Invalid response from
       http://42exp.com/.well-known/acme-challenge/z_A7WOrYzEEu0RvmAFkgpNCz9ONNYByGc3RkdeqmJDo:
       "<html>
       <head><title>404 Not Found</title></head>
       <body bgcolor="white">
       <center><h1>404 Not Found</h1></center>
       <hr><center>"
    
       To fix these errors, please make sure that your domain name was
       entered correctly and the DNS A record(s) for that domain
       contain(s) the right IP address.
    

    我查看了我的静态内容文件夹,似乎有一个.well-known文件夹。我不知道为什么我仍然得到404。 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

正如this thread中提到的那样:

看起来测试文件不存在,并且NGiNX返回404.html页面的内容。

作为seen here,certbot路径可能不正确。请参阅this tutorial(不在泊坞窗环境中,但仍可以提供一些线索)

在任何情况下,请检查nginx日志以查看正在访问的内容。

您需要提及/.well-known应指向的位置:root / usr / src / app;
但请参阅“NGiNX Pitfalls and Common Mistakes

  

root置于位置块内将起作用,它完全有效。

     

当您开始添加位置块时出了什么问题。如果向每个位置块添加root,则不匹配的位置块将没有根。

     

因此,在位置块之前发生root指令非常重要,如果需要,可以覆盖此指令。

答案 1 :(得分:0)

原来我必须在这里包含一个root指令

 location ~ /.well-known {
            root /usr/src/app;
            allow all;
    }