我试图让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
这创build了证书,链,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。
提前致谢
我刚刚完成了这个工作。
我注意到的第一件事是你没有得到
ssl on;
我做的另一件事是按照https://adambard.com/blog/using-letsencrypt-with-nginx/
他比你少配置,例如
server { listen 0.0.0.0:443 ssl; # was 80, added ssl server_name example.com; ssl on; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
…
看看这是否适合你。
本指南解决了我所有的困扰:)
我写了一个完整的指南来设置Nginx和Letsencrypt: 使用Nginx和Letsencrypt自动化SSL证书 – 没有Catch-22 。 它解决了你在@ Ghoti的回复中提到的确切问题
这是对你很重要的片段。 请记住,我使用letsencrypt.sh客户端,而不是正式的,由于我在我的帖子中谈到的一些原因。
我们打算把Nginx配置分解成两个独立的配置文件,一个用于letsencrypt监听的HTTP服务器,一个用于运行实际web应用的HTTPS服务器。
然后,我们将它们放在sites-available
文件夹中,而不是放置在标准sites-enabled
文件夹中。 默认情况下, sites-enabled
文件夹中的所有配置文件都会在Nginx重新启动时自动解析,但是我们想要控制这个,我们通过创建符号链接来完成。
HTTP Nginx配置文件将位于: /etc/nginx/sites-available/http.example.conf
,如下所示:
# HTTP server server { listen 80; server_name www.example.com; access_log /var/log/nginx/http.example.com.log; location '/.well-known/acme-challenge' { default_type "text/plain"; alias /var/www/letsencrypt; } location / { return 301 https://$server_name$request_uri; } }
HTTPS Nginx配置文件将位于/etc/nginx/sites-available/https.example.conf
,如下所示:
# HTTPS server { listen 443; server_name www.example.com; ssl on; ssl_certificate /srv/letsencrypt/certs/www.example.com/fullchain.pem; ssl_certificate_key /srv/letsencrypt/certs/www.example.com/privkey.pem; #Include actual web application configuration here. }
在我们做其他事情之前,我们需要先停止正在运行的Nginx服务。
service nginx stop
然后,我们需要通过创建从sites-available
文件到sites-enabled
文件夹的符号链接来启用http端点,然后启动Nginx服务
echo "Enable the http endpoint" ln -s /etc/nginx/sites-available/http.example.conf /etc/nginx/sites-enabled/http.example.conf echo "Starting nginx service..." service nginx start
在这一点上,我们有一个工作的HTTP服务器,它将正确地提供acme-challenge
文件夹中的任何文件。 让我们生成一些证书。
echo "Generate Letsencrypt SSL certificates" /srv/letsencrypt/letsencrypt.sh --cron
在Letsencrypt.sh成功生成证书后,我们必须启用我们的HTTPS端点,这是所有标准流量被重定向到的地方。
echo "Enable the https endpoint" ln -s /etc/nginx/sites-available/https.example.conf /etc/nginx/sites-enabled/https.example.conf
最后,我们需要告诉Nginx加载HTTPS服务器配置,但是我们希望在没有任何停机的情况下进行。 幸运的是Nginx的开发者为我们提供了一种方法。
echo "Reload nginx service..." service nginx reload
现在我们有一个支持HTTPS的Web应用程序。 剩下的唯一事情就是自动化证书更新。