Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于网站服务器,其稳定性高效性备受赞誉。在现代互联网环境中,为了保护用户数据的安全,使用SSL/TLS加密是必不可少的。本教程将深入探讨如何配置Nginx以实现一个安全、可用的Web服务器,特别关注SSL/TLS配置。

我们需要获取SSL证书。SSL证书通常由受信任的证书颁发机构(CA)签发,如Let's Encrypt、Comodo、Symantec等。Let's Encrypt提供免费且自动化的证书,适合大多数个人和小型企业。可以使用Certbot工具自动化申请和安装过程。

一旦获得SSL证书,我们需要将其添加到Nginx的配置文件中。Nginx的配置文件通常位于/etc/nginx.conf/etc/nginx/sites-available/目录下。创建一个新的虚拟主机配置文件,例如example.com.conf,然后在该文件中定义SSL相关设置:


server {

 listen 443 ssl;

 server_name example.com www.example.com;

 #指定SSL证书和私钥路径

 ssl_certificate /path/to/cert.pem;

 ssl_certificate_key /path/to/key.pem;

 #使用最新安全套接字参数

 ssl_protocols TLSv1.2 TLSv1.3;

 ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';

 ssl_prefer_server_ciphers on;

 #增强安全性

 ssl_session_cache shared:SSL:10m;

 ssl_session_timeout 1d;

 ssl_stapling on;

 ssl_stapling_verify on;

 resolver 1.1.1.1 8.8.8.8 valid=300s;

 resolver_timeout 5s;

 #防止中间人攻击

 add_header Strict-Transport-Security \"max-age=31536000; includeSubdomains; preload\";

 add_header X-Frame-Options DENY;

 add_header X-Content-Type-Options nosniff;

 #配置其他服务器设置

 root /var/www/example.com;

 index.html index.htm index.nginx-debian.html;

 location / {

 try_files $uri/ =404;

 }

}

在上面的配置中,我们指定了监听的端口(443,为SSL/TLS端口)、服务器名、证书和私钥路径,并使用了推荐的SSL参数。同时,我们还启用了HSTS(HTTP Strict Transport Security)以确保浏览器始终使用HTTPS连接,并设置了其他安全相关的头信息。

完成配置后,别忘了更新Nginx配置并重启服务,以使更改生效:


sudo nginx -t

sudo systemctl restart nginx

除了基础的SSL配置,还可以进一步优化Nginx的性能,例如启用HTTP/2协议,通过使用http2listen命令后面添加;开启GZIP压缩以减少数据传输量;配置缓存以减少服务器负载;以及使用负载均衡策略来分散流量。

在维护和监控方面,定期更新SSL证书,确保它们不过期,并使用SSL/TLS工具(如Qualys SSL Labs或Mozilla SSL Server Test)进行测试,以评估服务器的安全性。配置一个安全、可用的Nginx Web服务器SSL设置涉及多个环节,包括获取SSL证书、编写Nginx配置文件、启用安全协议和头信息,以及后续的优化与监控。遵循最佳实践,你可以为用户提供一个既快速又安全的访问体验。