2

我正在尝试让 Letsencrypt 在 Ubuntu 15.10 服务器上与 Phusion Passenger (Nginx) 一起使用。

我采取的步骤:

  1. sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
  2. sudo service nginx stop
  3. cd /opt/letsencrypt
  4. ./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

我在这里做错了什么吗?我现在基本上使我的服务器无法访问。非常感谢任何帮助。如果有帮助,我正在使用乘客版本 5.0.23。

提前致谢

4

3 回答 3

1

我刚刚完成了这个并且让它工作了。

我注意到的第一件事是你没有

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;

...

看看这是否适合你。

于 2016-01-22T18:58:11.893 回答
1

本指南解决了我所有的问题:)

https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04

于 2016-04-28T16:18:05.143 回答
0

我写了一个设置 Nginx 和 Letsencrypt 的完整指南: 使用 Nginx 和 Letsencrypt 自动化 SSL 证书 - 没有 Catch-22。它解决了您在@Ghoti 的回复中提到的确切问题

这是对您很重要的片段。请记住,我使用letsencrypt.sh 客户端而不是官方客户端,原因有很多,我在帖子中谈到了这些原因。


我们将把 Nginx 配置分解为 2 个单独的配置文件,一个用于带有 Letencrypt 监听的 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

在我们做任何其他事情之前,我们首先需要停止正在运行的 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 应用程序。剩下要做的就是自动更新证书。

于 2016-02-01T19:26:26.807 回答