Nginx的HTTPS配置
Nginx的HTTPS配置
1.使用openssl工具(生成自签名证书)
#安装
sudo yum install openssl -y
#创建证书存放目录
sudo mkdir -p /etc/nginx/ssl
2.生成私钥和证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/nginx.key \
-out /etc/nginx/ssl/nginx.crt
#查看生成的2个证书
ls /etc/nginx
nginx.crt nginx.key
openssl:使用 OpenSSL 工具,进行证书生成和管理。
req:表示生成证书请求(Certificate Signing Request,CSR)。
-x509:直接生成自签名证书,而不是 CSR。 是一种证书标准,常用于 SSL/TLS。
-nodes:不对私钥进行加密,不需要输入密码。如果加密私钥,每次 Nginx 启动时都需要手动输入密码,生产环境中不便管理。
-days 365:证书有效期为 365 天(1 年)。到期后需要重新生成或续签证书。
-newkey rsa:2048:生成一个新的私钥和证书请求。使用 RSA 算法,密钥长度为 2048 位。这是目前比较常见和安全的密钥长度。
-keyout /etc/nginx/ssl/nginx.key:指定生成的私钥文件保存路径。这里是 /etc/nginx/ssl/nginx.key
。
-out /etc/nginx/ssl/nginx.crt:指定生成的证书文件保存路径。这里是 /etc/nginx/ssl/nginx.crt
。
主要信息说明:
- Country Name (2 letter code): 国家代码,如
CN
代表中国。 - State or Province Name: 省份,如
Beijing
。 - Locality Name: 城市,如
Beijing
。 - Organization Name: 组织名称,可以填公司名或个人名。
- Organizational Unit Name: 部门名称,如
IT Department
。 - Common Name (CN): 证书颁发者的名称,通常是域名或IP地址,比如
localhost
或服务器IP。 - Email Address: 联系邮箱,可选填。
3.修改Nginx的配置文件
server {
listen 80;
server_name www.fjr.com;
# 301 重定向 HTTP 到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name www.fjr.com;
# SSL 证书和私钥路径
ssl_certificate /etc/nginx/ssl/nginx.crt; ###重点
ssl_certificate_key /etc/nginx/ssl/nginx.key; ####重点
# 中间证书链文件
ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt;
# SSL 会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 协议配置(仅支持 TLS 1.2 和 TLS 1.3)
ssl_protocols TLSv1.2 TLSv1.3;
# 安全加密套件
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers on;
# HTTP/2 和 HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# 访问日志
access_log /var/log/nginx/ssl_access.log;
error_log /var/log/nginx/ssl_error.log;
# 网站根目录和首页
root /usr/share/nginx/html;
index index.html index.htm;
# 基础路由
location / {
try_files $uri $uri/ =404;
}
}
4.启动Nginx访问
nginx
#查看端口
[root@localhost ~]# netstat -antp |grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 80544/nginx: master
#添加域名
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.18 www.fjr.com
#访问
curl -vk https://www.fjr.com
* Rebuilt URL to: https://www.fjr.com/
* Trying 192.168.200.18...
* TCP_NODELAY set
* Connected to www.fjr.com (192.168.200.18) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
。。。。。。。。。。。。。。
-vk:显示详细信息,忽略 SSL 证书验证,允许连接到不受信任的或自签名证书的服务器。