Nginx https证书配置

准备证书文件

准备.crt和.key文件,上传到服务器。可以上传zip包,然后unzip cert.zip -d /opt解压至目标目录。

进入Nginx容器内配置证书

将证书拷贝到容器内

使用docker cp命令将证书复制到容器内

ini 复制代码
docker cp [本地路径] [容器名/容器ID]:[容器内目标路径]

如:docker cp /opt/cert/ my-nginx:/etc/nginx/cert/

容器的名字和id可以通过docker container ps查看,如果容器已经停止,可以增加参数-a

配置nginx配置文件

ini 复制代码
 server {
    listen 443;
    server_name www.trustauth.cn;   #证书绑定的网站域名
    ssl on;
    ssl_certificate  cert/www.trustauth.cn_chain.crt;  #证书公钥
    ssl_certificate_key cert/www.trustauth.cn.key;    #证书私钥
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root html; #站点目录
        index index.html index.htm;
    }
}

可以使用nginx -t检查配置是否正确,如果一切顺利,可以nginx -s reload重启服务。

常见错误

ssl配置错误

ssl配置报错unknown directive "ssl":

确认 Nginx 是否缺少 SSL 模块

首先通过 Nginx 内置命令,查看已编译的模块列表,判断是否缺少 ssl_module

bash 复制代码
# 查看 Nginx 已编译模块(关键看是否有 --with-http_ssl_module)
nginx -V  # 注意是大写 V,小写 v 只显示版本号

若输出中包含 --with-http_ssl_module:说明已启用 SSL 模块,问题可能是配置文件语法错误。

修改ssl配置语法

如果nginx版本>1.15,不需要使用ssl指令:

diff 复制代码
- listen 443;
- ssl on
+ listen 443 ssl

无法访问443端口

nginx能正常启动,80端口能访问,443无法访问,可能原因有:

  1. 容器未开放443端口
  2. 主机安全组策略未开放443端口

项目内部分链接失效

浏览器限制https网页无法请求http资源,需要检查全部请求连接,是否有指向http的

docker-compose挂载卷

进入容器内配置证书,在容器重建(重启restart不影响)后会恢复原样,可以使用卷挂载这些配置

bash 复制代码
docker run -d \
  --name my-nginx \
  -p 80:80 \  # HTTP 端口映射
  -p 443:443 \  # HTTPS 端口映射(关键)
  -v /宿主机/nginx/conf:/etc/nginx/conf.d \  # 挂载配置目录
  -v /宿主机/nginx/ssl:/etc/nginx/ssl \  # 挂载 SSL 证书
  nginx

也可以在docker-compose文件中增加配置

bash 复制代码
services:
  nginx:
    image: nginx
    ports:
      - "80:80"
      - "443:443"  # 新增/确认这一行
    volumes:
      - ./conf:/etc/nginx/conf.d
      - ./ssl:/etc/nginx/ssl
相关推荐
Wang's Blog2 小时前
Elastic Stack梳理:Logstash 高级数据处理与监控运维实战指南
运维·搜索引擎·elastic search
云和数据.ChenGuang2 小时前
运维工程师免费技术教程之tomcat动态日志监控
运维·tomcat·firefox·运维工程师·运维技术
python百炼成钢2 小时前
解决——linux通过网络挂载tftp无法下载
linux·运维·网络
无奈笑天下2 小时前
银河麒麟高级服务器版本【更换bond绑定的网卡】操作方法
linux·运维·服务器·arm开发·经验分享
深海里的鱼(・ω<)★2 小时前
CentOS 7 默认 yum 源官方不维护解决方案
linux·运维·centos
猫头虎-人工智能2 小时前
openEuler远程批量部署实战 SSH VNC IPMI全流程解析
运维·git·开源·ssh·github·开放原子·开源软件
weixin_307779132 小时前
Jenkins Metrics 插件全解析:从数据采集到智能监控的实践指南
运维·开发语言·架构·jenkins
gavin_gxh2 小时前
SAP MM 采购订单号 excel上传 获取订单状态 审批 取消审批
运维·经验分享·其他
菜鸟小九2 小时前
mysql运维(读写分离)
运维·数据库·mysql