当前位置: 首页 > news >正文

配置 Nginx 以支持 HTTPS

1. 安装 Nginx

如果你尚未安装 Nginx,请先安装:

Ubuntu/Debian

sudo apt update
sudo apt install nginx -y

CentOS/RHEL

sudo yum install nginx -y

启动 Nginx:

sudo systemctl enable nginx --now

2. 配置 Nginx 以支持 HTTPS

(1)创建 Nginx 站点配置

Nginx 默认的站点配置通常在 /etc/nginx/sites-available/default(Ubuntu/Debian)或 /etc/nginx/nginx.conf(CentOS)中。

编辑配置文件:

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

或者:

sudo nano /etc/nginx/nginx.conf

添加或修改如下配置:

server {
    listen 80;
    server_name your_domain_or_ip;

    # 进行 HTTP 自动重定向到 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain_or_ip;

    # SSL 证书文件路径(需要根据你的情况修改)
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    root /var/www/html/dist;  # dist 目录的路径
    index index.html;

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

3. 生成 SSL 证书

(1)使用 Let's Encrypt(推荐)

如果你有域名,可以使用 Let's Encrypt 免费证书:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain

成功后,Let's Encrypt 会自动配置 Nginx,并启用 HTTPS。

(2)使用自签名 SSL 证书(测试用)

如果你没有域名或仅用于本地测试,可以使用自签名证书:

sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
    -keyout /etc/nginx/ssl/nginx.key \
    -out /etc/nginx/ssl/nginx.crt \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=localhost"

解释:

  • -days 365:证书有效期 365 天(可以修改)。
  • -newkey rsa:2048:生成 2048 位 RSA 密钥。
  • -subj:证书的主题信息,CN=localhost 指定主机名(你可以改成服务器 IP)。

sudo vim /etc/nginx/nginx.conf

server {
    listen 80;
    server_name _;

    # 所有 HTTP 请求跳转到 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name _;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    # 强制使用 TLS 1.2 或更高版本
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 启用 HSTS(HTTP Strict Transport Security)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # 目录路径
    root /var/www/html/dist;
    index index.html;

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

然后,重新加载 Nginx 配置:

sudo systemctl restart nginx

4. 测试 HTTPS

如果使用了 Let's Encrypt,在浏览器访问:

https://your_domain

如果使用了自签名证书,访问时可能会有安全警告,手动信任即可。

5.(可选)强制 HTTPS 及安全优化

为了强制所有流量使用 HTTPS,可以修改 server 配置:

server {
    listen 80;
    server_name your_domain_or_ip;
    return 301 https://$host$request_uri;
}

然后,重启 Nginx:

sudo systemctl restart nginx

相关文章:

  • 动手学Agent——Day2
  • 2025.2.14——1400
  • DataX使用时常见问题(持续更新)
  • 从零开始人工智能Matlab案例-粒子群优化
  • 【LeetCode】20. 有效的括号
  • dify.ai 配置链接到阿里云百练等云厂商的 DeepSeek 模型
  • 基于SpringBoot的“高考志愿智能推荐系统”的设计与实现(源码+数据库+文档+PPT)
  • 【ESP32】ESP-IDF开发 | WiFi开发 | HTTP服务器
  • 比较34个结构的分类准确率
  • 制作一个项目用于研究elementUI的源码
  • DeepSeek教unity------MessagePack-05
  • Nginx实战_高性能Web服务器与反向代理的配置全解
  • 张弛语言课退费动漫配音与人物的深度剖析退费
  • 天童美语:观察你的生活
  • ROS学习
  • 2. 图片性能优化
  • Postman入门:环境变量和全局变量
  • Labview课程2:通过S7.net读取西门子PLC中变量并绘图
  • 【鸿蒙开发】第三十六章 状态管理 - (V2)
  • 单细胞学习(12)——RunUMAP() 详解学习笔记
  • 北京警方:海淀发生小客车刮碰行人事故4人受伤,肇事司机已被查获
  • 有人倒卖试运营门票?上海乐高乐园:这些票存在无法入园风险
  • 问责!美国海军对“杜鲁门”号航母一系列事故展开调查
  • 中科飞测将投资超10亿元,在上海张江成立第二总部
  • 汕头违建豪宅“英之园”将强拆,当地:将根据公告期内具体情况采取下一步措施
  • 国台办:台湾自古属于中国,历史经纬清晰,法理事实清楚