社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

尝试使用let's encrypt保护nginx,但无法使用非根用户访问/etc/letsencrypt/live中的.pem文件

u23d7 • 4 年前 • 306 次点击  

我有一个flask应用程序,前面有nginx反向代理服务器。我已经将我的应用程序部署在一个数字海洋液滴上。我创建了一个具有根权限的用户,并使用此用户通过HTTPS运行我的应用程序。我对以下路径中的.pem文件的权限遇到问题:/etc/letsencrypt/live/my-domain-name.com。现在我要做的是使用终端中的sudo命令将这些文件复制到我的项目文件夹中,然后在nginx dockerfile中再次将它们复制到/etc/nginx,并在配置文件中给出此路径。但是,这并不理想,因为我希望自动续订我的SSL证书。我尝试使用诸如 chown-r用户:user/etc/letsencrypt 但没什么效果。我得到这个错误:

nginx: [emerg] BIO_new_file("/etc/letsencrypt/live/my-domain-name.com/fullchain.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/letsencrypt/live/my-domain-name.com/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)

我知道怎么解决这个问题吗?我希望能够使用/live/my域名路径访问.pem文件,并且能够在证书过期时更新证书,而不使用根用户。任何帮助都将不胜感激。谢谢。

项目配置文件:

server {

        listen 80;
        server_name my-domain-name.com www.my-domain-name.com;
        return 301 https://$host$request_uri;
    }



    server {
        listen       443 ssl;
        server_name  my-domain-name.com www.my-domain-name.com;
        ssl_certificate     /etc/nginx/fullchain.pem;
        ssl_certificate_key /etc/nginx/privkey.pem;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        location / {
            proxy_pass http://app:8000;
            proxy_ssl_server_name on;

            # Do not change this
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /static {
            rewrite ^/static(.*) /$1 break;
            root /static;
        }
    }

nginx文件:

 FROM nginx:1.13.3

    EXPOSE 80
    EXPOSE 443

    RUN rm /etc/nginx/nginx.conf
    COPY nginx.conf /etc/nginx/

    RUN rm /etc/nginx/conf.d/default.conf
    COPY project.conf /etc/nginx/conf.d/

    COPY fullchain.pem /etc/nginx/
    COPY privkey.pem /etc/nginx/
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38087
 
306 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Daniele Dellafiore
Reply   •   1 楼
Daniele Dellafiore    5 年前

我认为这不是最佳做法。您也不应该使用根用户访问Droplet。

您应该使用具有sudo授权的新用户设置Droplet,并完全删除根访问,如本指南中所述: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04

然后,您应该验证Droplet并使用certbot nginx插件存储SSL证书,如下所述:
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04

最后一个指南的步骤5解释了续订证书部分。