我想让Letsencrypt在Ubuntu 15.10服务器上使用Phusion Passenger(Nginx) .
我采取的步骤:
-
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
-
sudo service nginx stop
-
cd /opt/letsencrypt
-
./letsencrypt-auto certonly --standalone -d example.com -d www.example.com
这创建了cert,chain,fullchain和privkey pem文件 . 然后,我使用以下内容编辑了我的/etc/nginx/sites-available/example.conf:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
root /home/myuser/example/public;
passenger_enabled on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
# File upload size:
client_max_body_size 7M;
location ~ ^/(assets)/ {
expires max;
add_header Cache-Control public;
gzip_static on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
然后我重新启动了nginx . 当我现在运行 curl -iv https://example.com
时,我得到以下响应:
* Rebuilt URL to: https://example.com/
* Trying xxx.xx.xx.xx...
* Connected to example.com (xxx.xx.xx.xx) port 443 (#0)
* Server aborted the SSL handshake
* Closing connection 0
curl: (35) Server aborted the SSL handshake
端口80和443是开放的:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN`
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
我在这里做错了吗?我现在基本上让我的服务器无法访问了 . 任何帮助非常感谢 . 如果它有帮助我使用Passenger版本5.0.23 .
提前致谢
3 回答
我刚刚完成了这项工作并使其正常运行 .
我注意到的第一件事是你还没有
我做的另一件事是遵循https://adambard.com/blog/using-letsencrypt-with-nginx/的说明
他的配置远不如你,例如
...
看看这是否适合你 .
本指南解决了我所有的困境:)
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04
我写了一个关于设置Nginx和Letsencrypt的完整指南:Automating SSL Certificates using Nginx & Letsencrypt - Without the Catch-22 . 它解决了你在@ Ghoti的回复中提到的确切问题
这是对你很重要的片段 . 请记住,我使用了letsencrypt.sh客户端而不是官方客户端,原因有很多,我在帖子中谈到了这个原因 .
我们将把Nginx配置拆分为2个单独的配置文件,一个用于监听letsencrypt的HTTP服务器,另一个用于运行实际Web应用程序的HTTPS服务器 .
然后我们将它们放在
sites-available
文件夹而不是标准的sites-enabled
文件夹中 . 默认情况下,sites-enabled
文件夹中的任何配置文件在重新启动时都会被Nginx自动解析,但是我们要控制它,我们将通过创建符号链接来实现 .HTTP Nginx配置文件位于:
/etc/nginx/sites-available/http.example.conf
,如下所示:HTTPS Nginx配置文件位于
/etc/nginx/sites-available/https.example.conf
,如下所示:控制Nginx
在我们做任何其他事情之前,我们需要先停止正在运行的Nginx服务 .
然后我们需要通过创建一个从
sites-available
文件到sites-enabled
文件夹的符号链接来启用http endpoints ,并启动Nginx服务此时,我们有一个有效的HTTP服务器,可以正确地提供
acme-challenge
文件夹中的任何文件 . 让我们生成一些证书 .在Letsencrypt.sh成功生成证书之后,我们必须启用我们的HTTPS endpoints ,这是所有标准流量被重定向到的地方 .
最后,我们需要告诉Nginx加载HTTPS服务器配置,但我们希望在没有任何停机时间的情况下执行此操作 . 值得庆幸的是,Nginx开发人员为我们提供了一种方法 .
现在我们有一个支持HTTPS的Web应用程序 . 剩下要做的唯一事情是自动化证书续订 .