阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu 下配置 Nginx 服务器的 SSL 证书

197次阅读
没有评论

共计 3032 个字符,预计需要花费 8 分钟才能阅读完成。

在 Web 服务器上配置 TLS / SSL

现在您已拥有 SSL 证书,您需要配置 Nginx Web 服务器以使用它。

我们将对配置进行一些调整:

  • 我们将创建一个包含 SSL 密钥和证书文件位置的配置代码段。
  • 我们将创建一个包含强 SSL 设置的配置代码段,可以在将来与任何证书一起使用。
  • 我们将调整 Nginx 配置文件以处理 SSL 请求并使用上面的两个片段。

创建指向 SSL 密钥和证书的配置代码段

首先,让我们在 /etc/nginx/snippets 目录中创建一个新的 Nginx 配置代码段。

为了正确区分此文件的目的,我们将其命名 ssl- 为我们的域名:

sudo nano /etc/nginx/snippets/ssl-example.com.conf

在这个文件中,我们只需要将 ssl_certificate 设置为我们的证书文件和 ssl_certificate_key 相关的密钥。在我们的例子中,这将是这样的:

ssl_certificate /home/root/domain.com/1_www.domain.com_bundle.crt;
ssl_certificate_key /home/root/domain.com/2_www.domain.com.key;

添加这些行后,保存并关闭该文件。

使用强加密设置创建配置代码段

接下来,我们将创建另一个片段,用于定义一些 SSL 设置。这将使 Nginx 具有强大的 SSL 密码套件,并启用一些有助于保证我们的服务器安全的高级功能。

我们将为该文件指定一个通用名称:

sudo nano /etc/nginx/snippets/ssl-params.conf

预加载 HSTS 可提高安全性,但如果意外启用或启用错误,可能会产生深远的影响。在本教程中,我们不会预加载该设置,但如果您确定了解其含义,则可以对其进行修改:

# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
​
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

完成后保存并关闭文件。

调整 Nginx 配置以使用 SSL

现在我们已经有了我们的代码片段,我们可以调整我们的 Nginx 配置来启用 SSL。

我们将在本指南中假设您正在使用 /etc/nginx/sites-available 目录中的 defaultnginx 配置文件。如果您使用的是其他 nginx 配置文件,请在以下命令中替换其名称。

在我们继续之前,让我们备份当前的 nginx 配置文件:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

现在,打开 nginx 配置文件进行调整:

sudo nano /etc/nginx/sites-available/default

您的 nginx 配置文件可能像这样:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
​
    # SSL configuration
​
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;

我们将修改此配置,以便将未加密的 HTTP 请求自动重定向到加密的 HTTPS。这为我们的网站提供了最佳安全性。如果要同时允许 HTTP 和 HTTPS 流量,请使用后面的备用配置。

我们将把配置分成两个独立的块。在第一个 listen 指令之后,我们将添加一个 server_name 指令,设置为服务器的域名。然后,我们将设置重定向到我们将要创建的第二个 nginx 配置文件。之后,我们将关闭这个配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

接下来,我们需要在下面启动一个新的 nginx 配置文件以。我们可以取消注释 listen 使用端口 443 的两个指令。之后,我们只需要在里面包含我们设置的两个片段文件:

注意:您可能只有一个 listen 指令,其中包含 default_server 每个 IP 版本和端口组合的修饰符。如果为已设置 default_server 的这些端口启用了其他 nginx 配置文件,则必须从其中一个块中删除修改器。

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}
​
server {
​
    # SSL configuration
​
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;
    root /path/to/your/website/root

完成后保存并关闭文件。

测试

我们应该检查以确保我们的文件中没有语法错误。我们可以通过输入以下内容来执行

sudo nginx -t

如果一切顺利,您将得到如下结果:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

最后,重启服务器:

sudo systemctl restart nginx

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3032字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中