我在我的服务器上使用 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']
certbot
在standalone
端口上使用模式22000
即使在第一次部署时,我如何使事情正常进行?