[系统运维] Ubuntu 下配置 Nginx 服务器的 SSL 证书

[复制链接]
查看: 2552|回复: 0
发表于 2020-2-10 17:08:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在Web服务器上配置TLS / SSL
现在您已拥有 SSL 证书,您需要配置 Nginx Web 服务器以使用它。
我们将对配置进行一些调整:
  • 我们将创建一个包含 SSL 密钥和证书文件位置的配置代码段。
  • 我们将创建一个包含强 SSL 设置的配置代码段,可以在将来与任何证书一起使用。
  • 我们将调整 Nginx 配置文件以处理 SSL 请求并使用上面的两个片段。
创建指向SSL密钥和证书的配置代码段
首先,让我们在/etc/nginx/snippets目录中创建一个新的Nginx配置代码段。
为了正确区分此文件的目的,我们将其命名ssl-为我们的域名:
  1. sudo nano /etc/nginx/snippets/ssl-example.com.conf
复制代码

在这个文件中,我们只需要将ssl_certificate设置为我们的证书文件和ssl_certificate_key相关的密钥。在我们的例子中,这将是这样的:
  1. ssl_certificate /home/root/domain.com/1_www.domain.com_bundle.crt;
  2. ssl_certificate_key /home/root/domain.com/2_www.domain.com.key;
复制代码

添加这些行后,保存并关闭该文件。
使用强加密设置创建配置代码段
接下来,我们将创建另一个片段,用于定义一些SSL设置。这将使Nginx具有强大的SSL密码套件,并启用一些有助于保证我们的服务器安全的高级功能。
我们将为该文件指定一个通用名称:
  1. sudo nano /etc/nginx/snippets/ssl-params.conf
复制代码

预加载HSTS可提高安全性,但如果意外启用或启用错误,可能会产生深远的影响。在本教程中,我们不会预加载该设置,但如果您确定了解其含义,则可以对其进行修改:
  1. # from https://cipherli.st/
  2. # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
  3. ​
复制代码
  1. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  2. ssl_prefer_server_ciphers on;
  3. ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  4. ssl_ecdh_curve secp384r1;
  5. ssl_session_cache shared:SSL:10m;
  6. ssl_session_tickets off;
  7. ssl_stapling on;
  8. ssl_stapling_verify on;
  9. resolver 8.8.8.8 8.8.4.4 valid=300s;
  10. resolver_timeout 5s;
  11. # Disable preloading HSTS for now.  You can use the commented out header line that includes
  12. # the "preload" directive if you understand the implications.
  13. #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
  14. add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
  15. add_header X-Frame-Options DENY;
  16. add_header X-Content-Type-Options nosniff;
复制代码

完成后保存并关闭文件。
调整Nginx配置以使用SSL
现在我们已经有了我们的代码片段,我们可以调整我们的Nginx配置来启用SSL。
我们将在本指南中假设您正在使用/etc/nginx/sites-available目录中的defaultnginx配置文件。如果您使用的是其他nginx配置文件,请在以下命令中替换其名称。
在我们继续之前,让我们备份当前的nginx配置文件:
  1. sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
复制代码

现在,打开nginx配置文件进行调整:
  1. sudo nano /etc/nginx/sites-available/default
复制代码

您的nginx配置文件可能像这样:
  1. server {
  2.     listen 80 default_server;
  3.     listen [::]:80 default_server;
  4. ​
  5.     # SSL configuration
  6. ​
  7.     # listen 443 ssl default_server;
  8.     # listen [::]:443 ssl default_server;
复制代码

我们将修改此配置,以便将未加密的HTTP请求自动重定向到加密的HTTPS。这为我们的网站提供了最佳安全性。如果要同时允许HTTP和HTTPS流量,请使用后面的备用配置。
我们将把配置分成两个独立的块。在第一个listen指令之后,我们将添加一个server_name指令,设置为服务器的域名。然后,我们将设置重定向到我们将要创建的第二个nginx配置文件。之后,我们将关闭这个配置:
  1. server {
  2.     listen 80 default_server;
  3.     listen [::]:80 default_server;
  4.     server_name example.com www.example.com;
  5.     return 301 https://$server_name$request_uri;
  6. }
复制代码

接下来,我们需要在下面启动一个新的nginx配置文件以。我们可以取消注释listen使用端口443的两个指令。之后,我们只需要在里面包含我们设置的两个片段文件:
注意:您可能只有一个listen指令,其中包含default_server每个IP版本和端口组合的修饰符。如果为已设置default_server的这些端口启用了其他nginx配置文件,则必须从其中一个块中删除修改器。
  1. server {
  2.     listen 80 default_server;
  3.     listen [::]:80 default_server;
  4.     server_name example.com www.example.com;
  5.     return 301 https://$server_name$request_uri;
  6. }
  7. ​
  8. server {
  9. ​
  10.     # SSL configuration
  11. ​
  12.     listen 443 ssl default_server;
  13.     listen [::]:443 ssl default_server;
  14.     include snippets/ssl-example.com.conf;
  15.     include snippets/ssl-params.conf;
  16.     root /path/to/your/website/root
复制代码

完成后保存并关闭文件。
测试
我们应该检查以确保我们的文件中没有语法错误。我们可以通过输入以下内容来执行
  1. sudo nginx -t
复制代码

如果一切顺利,您将得到如下结果:
  1. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  2. nginx: configuration file /etc/nginx/nginx.conf test is successful
复制代码

最后,重启服务器:
  1. sudo systemctl restart nginx
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接
 
 
工作时间:
8:00-18:00
客服热线:
15368564009
客服微信