腾讯云SSL是腾讯云的证书颁发服务,SSL证书(SSL Certificates)提供了安全套接层(SSL)证书的一站式服务,包括证书申请、管理及部署功能,与顶级的数字证书授权(CA)机构和代理商合作,为您的网站、移动应用提供 HTTPS 解决方案。 在本教程中,您将使用腾讯云SSL证书,在Nginx上安装免费SSL证书。
本教程使用默认的Nginx配置文件而不是单独的服务器块文件。我们建议为每个域创建新的Nginx服务器块文件,因为它有助于避免一些常见错误,并将默认文件维护为预期的回退配置。
要学习本教程,您需要:
sudo
命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。进入SSL证书管理控制台
单击【申请证书】
查看申请域名型证书型号,单击【确定】
填写申请域名,例如qcloud.com,cloud.tencent.com,demo.test.qlcoud.com。
证书默认支持收到DNS验证,验证方法可查看详情。
提交申请成功后弹窗提示如下,需要前往【证书详情页】获取CName记录添加解析:
获取CName记录如Tips中显示,需要尽快成功添加解析,方可通过CA机构审核:
现在您已拥有SSL证书,您需要配置Nginx Web服务器以使用它。
我们将对配置进行一些调整:
创建指向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。
我们将在本指南中假设您正在使用/etc/nginx/sites-available
目录中的default
nginx配置文件。如果您使用的是其他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;
}
# SSL configuration
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
. . .
接下来,我们需要在下面启动一个新的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;
. . .
完成后保存并关闭文件。
如果您想要或需要同时允许加密和未加密内容,则必须以不同方式配置Nginx。我们只是将两个单独的nginx配置文件压缩为一个块并删除重定向:
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name example.com www.example.com;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
. . .
完成后保存并关闭文件。
如果您使用的是ufw,则可以通过输入以下内容来查看当前设置:
sudo ufw status
它可能看起来像这样,这意味着只允许HTTP流量进入Web服务器:
Status: active
To Action From
-- ------ ----
SSH ALLOW Anywhere
WWW ALLOW Anywhere
SSH (v6) ALLOW Anywhere (v6)
WWW (v6) ALLOW Anywhere (v6)
为了进一步允许HTTPS流量,我们可以允许“WWW Full”配置文件,然后删除冗余的“WWW”配置文件:
sudo ufw allow 'WWW Full'
sudo ufw delete allow 'WWW'
您的状态现在应该如下所示:
sudo ufw status
Status: active
To Action From
-- ------ ----
SSH ALLOW Anywhere
WWW Full ALLOW Anywhere
SSH (v6) ALLOW Anywhere (v6)
WWW Full (v6) ALLOW Anywhere (v6)
现在,您的服务器应接受HTTPS请求。
现在我们已经进行了更改并调整了防火墙,我们可以重新启动Nginx以实现我们的新更改。
首先,我们应该检查以确保我们的文件中没有语法错误。我们可以通过输入以下内容来执行
sudo nginx -t
如果一切顺利,您将得到如下结果:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果输出与上述内容匹配,则配置文件没有语法错误。我们可以安全地重启Nginx以实现我们的更改:
sudo systemctl restart nginx
腾讯云SSL的TLS /SSL证书现已到位,防火墙现在允许流量到端口80和443。此时,您应该通过在Web浏览器中通过HTTPS访问您的域来测试TLS/ SSL证书。
现在,你已经学会如何使用腾讯云的SSL来配置您的Nginx服务器啦!赶快申请一台服务器进行尝试吧,更多Linux教程请前往腾讯云+社区学习。
参考文献:《How To Set Up Let's Encrypt with Nginx Server Blocks on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有