插件窝 干货文章 Nginx搭建https服务器实例分析

Nginx搭建https服务器实例分析

SSL 证书 配置 Nginx 424    来源:    2025-04-27

Nginx搭建HTTPS服务器实例分析

一、HTTPS基础概念

HTTPS = HTTP + SSL/TLS,通过加密通信确保数据传输安全。主要优势包括: - 数据加密传输 - 身份验证 - 数据完整性保护

二、准备工作

1. 获取SSL证书

  • 从CA机构购买(如DigiCert、GeoTrust)
  • 使用Let's Encrypt免费证书
  • 自签名证书(仅测试环境使用)

2. 证书文件准备

通常包括: - 证书文件(.crt或.pem) - 私钥文件(.key) - 可能的CA证书链文件

三、Nginx配置HTTPS实例

基本配置示例

server {
    listen 443 ssl;
    server_name example.com;

    # 证书路径配置
    ssl_certificate /path/to/your_domain.crt;
    ssl_certificate_key /path/to/your_domain.key;

    # SSL协议配置
    ssl_protocols TLSv1.2 TLSv1.3;

    # 加密套件配置
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...';
    ssl_prefer_server_ciphers on;

    # 其他配置
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # 网站根目录配置
    root /var/www/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

优化配置

# HTTP重定向到HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

# HTTPS服务器配置
server {
    listen 443 ssl http2;  # 启用HTTP/2
    server_name example.com;

    # 证书配置
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # 启用OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/ssl/ca.crt;

    # DH参数增强安全性
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

    # HSTS头
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

    # 其他安全头
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # 网站内容配置
    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

四、证书管理

1. 生成自签名证书(测试用)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/nginx/ssl/nginx.key \
    -out /etc/nginx/ssl/nginx.crt

2. 使用Let's Encrypt免费证书

# 安装certbot
sudo apt install certbot python3-certbot-nginx

# 获取证书
sudo certbot --nginx -d example.com -d www.example.com

# 设置自动续期
sudo certbot renew --dry-run

五、常见问题及解决方案

1. 证书链不完整

症状:浏览器显示"证书不受信任" 解决:确保ssl_certificate包含完整的证书链

2. 协议或加密套件不安全

症状:SSL测试得分低 解决: - 禁用旧协议:ssl_protocols TLSv1.2 TLSv1.3; - 使用安全加密套件

3. 混合内容警告

症状:HTTPS页面加载HTTP资源 解决:确保所有资源使用HTTPS加载

4. 性能问题

优化方案: - 启用HTTP/2 - 启用OCSP Stapling - 调整SSL会话缓存

六、测试与验证

1. 配置测试

sudo nginx -t

2. 在线测试工具

3. 命令行测试

openssl s_client -connect example.com:443 -servername example.com

七、高级配置

1. 多域名SNI配置

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;
    # ...
}

server {
    listen 443 ssl;
    server_name another.com;
    ssl_certificate /path/to/another.com.crt;
    ssl_certificate_key /path/to/another.com.key;
    # ...
}

2. 双向SSL认证

ssl_client_certificate /path/to/ca.crt;
ssl_verify_client on;

3. 性能优化

ssl_buffer_size 4k;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

八、安全最佳实践

  1. 定期更新SSL证书
  2. 禁用不安全的协议和加密套件
  3. 启用HSTS头
  4. 使用强DH参数
  5. 监控证书到期时间
  6. 保持Nginx和OpenSSL版本更新

通过以上配置和最佳实践,您可以构建一个安全、高效的HTTPS服务器。根据实际需求调整配置参数,并定期进行安全测试和优化。