0

我在我的服务器上使用 Nginx,并希望使用 Let's Encrypt 证书在 HTTPS 上为我的应用程序提供服务。在部署应用程序代码之前,我在新服务器上执行以下操作:

  • 安装 Nginx
  • 将以下nginx配置文件写入sites-available, 用于 certbot. 然后符号链接sites-enabled并重新启动nginx

    server {
      listen 80;
      server_name foo.bar.com;
      allow all;
    
      location ^~ /.well-known/acme-challenge/ {
        proxy_pass http://0.0.0.0:22000;
     }
    }
    
  • 然后运行certbot

    certbot certonly -m foo@bar.com --standalone --http-01-port 22000 --preferred-challenges http --cert-name bar.com -d foo.bar.com --agree-tos --non-interactive
    

手动运行时,上述所有操作都可以正常工作。

我使用 Chef 来自动化上述过程。Certbot 在我第一次部署时得到 404。但它适用于后续部署。

记下以下细节:

  • 这种现象仅在我全新安装 Nginx 然后通过 Chef 运行我的部署脚本并在后续部署中消失时才会发生。
  • 除了 nginx 安装之外,我使用自定义 LWRP 在 Chef 中运行上述步骤。Nginx 安装由chef_nginx. 我已经粘贴了运行上述步骤的 LWRP 的片段。

    vhost_file = "#{node['certbot']['sites_configuration_path']}/#{node['certbot']['sites_configuration_file']}"
    template vhost_file do
      cookbook 'certbot'
      source 'nginx-letsencrypt.vhost.conf.erb'
      owner 'root'
      group 'root'
      variables(
        server_names:   new_resource.sans,
        certbot_port:   node['certbot']['standalone_port'],
        mode:           node['certbot']['standalone_mode']
      )
      mode 00644
      only_if "test -d #{node['certbot']['sites_configuration_path']}"
    end
    
    nginx_site node['certbot']['sites_configuration_file']
    
  • certbotstandalone端口上使用模式22000

即使在第一次部署时,我如何使事情正常进行?

4

0 回答 0