配置 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