Nginx的HTTPS配置

Nginx的HTTPS配置

1.使用openssl工具(生成自签名证书)

bash 复制代码
#安装
sudo yum install openssl -y
bash 复制代码
#创建证书存放目录
sudo mkdir -p /etc/nginx/ssl

2.生成私钥和证书

bash 复制代码
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的配置文件

bash 复制代码
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访问

bash 复制代码
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 证书验证,允许连接到不受信任的或自签名证书的服务器。

相关推荐
AlfredZhao19 小时前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--5 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜6 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB7 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode8 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220709 天前
如何搭建本地yum源(上)
运维
ping某10 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8812 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai