当前位置:首页 > 技术 > 正文内容

在 Docker 环境中为 Nginx 配置 HTTPS 与 SSL 证书

访客 技术 2026年5月27日 2

前置环境准备

在开始配置之前,请确保基础运行环境已准备就绪。本文基于 CentOS 7.9 操作系统,并使用 Docker 容器化部署 Nginx。Nginx 容器需要同时暴露 80(HTTP)和 443(HTTPS)端口。此外,需提前完成域名的解析配置以及 SSL 证书(包含公钥和私钥文件)的申请与下载。

Nginx 核心配置

在 Nginx 的主配置文件 nginx.conf 中,我们需要定义多个 server 块来处理不同域名的请求,并为特定域名启用 SSL 加密。以下配置展示了静态资源服务、普通 HTTP 反向代理以及 HTTPS 反向代理的综合应用场景。

worker_processes auto;

events {
    worker_connections 2048;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    # 基础静态资源服务
    server {
        listen 80;
        server_name localhost;
        
        location / {
            root /usr/share/nginx/html/static;
            index index.html;
        }
    }

    # 业务服务 A (HTTP 访问)
    server {
        listen 80;
        server_name example.com api.example.com;
        
        location / {
            proxy_pass http://192.168.1.100:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    # 业务服务 B (HTTP 访问)
    server {
        listen 80;
        server_name web.example.com;
        
        location / {
            proxy_pass http://192.168.1.100:8081;
            proxy_set_header Host $host;
        }
    }

    # 业务服务 A (HTTPS 加密访问)
    server {
        listen 443 ssl;
        server_name api.example.com;

        # 指定 SSL 证书和私钥路径
        ssl_certificate /etc/nginx/certs/api.example.com.crt;
        ssl_certificate_key /etc/nginx/certs/api.example.com.key;
        
        # SSL 性能与安全优化参数
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_pass http://192.168.1.100:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

HTTP 到 HTTPS 的重定向策略

为了保证数据传输的安全性,通常需要将特定域名的所有 HTTP 请求强制重定向至 HTTPS。可以通过在 nginx.conf 中添加独立的 server 块并使用 return 301 指令来实现,这种方式比传统的 rewrite 正则匹配性能更高且语义更清晰。

server {
    listen 80;
    server_name secure.example.com;
    
    # 永久重定向到 HTTPS
    return 301 https://$host$request_uri; 
}

Docker 容器部署与目录挂载

为了让 Nginx 容器能够读取宿主机的配置文件和 SSL 证书,需要合理规划目录结构并进行数据卷挂载。首先在宿主机上创建用于存放证书的目录:

mkdir -p /opt/nginx/certs

将申请好的 .crt.key 文件上传至该目录后,执行以下命令启动 Nginx 容器:

docker run -d \
  --name nginx_https_gateway \
  --restart always \
  -p 80:80 \
  -p 443:443 \
  -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v /opt/nginx/html:/usr/share/nginx/html \
  -v /opt/nginx/logs:/var/log/nginx \
  -v /opt/nginx/certs:/etc/nginx/certs:ro \
  nginx:latest

上述命令中,:ro 参数表示以只读方式挂载配置文件和证书目录,以提升容器的安全性。确保宿主机的 /opt/nginx/conf/ 目录下已存在修改好的 nginx.conf 文件。

验证 SSL 证书生效

容器启动后,Nginx 会自动加载最新的配置。通过浏览器访问配置了 HTTPS 的域名(如 https://api.example.com),检查地址栏是否显示安全锁图标。点击证书详情,确认颁发的域名和有效期与申请的 SSL 证书信息一致,即表明 HTTPS 反向代理配置成功。

标签: NginxSSL

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。