运维项目实战:Nginx+Docker 部署HTTPS站点+身份认证

环境:CentOS 7/8、Docker、OpenSSL、htpasswd

一、前置环境安装

bash 复制代码
# 1.安装依赖与工具
yum install -y openssl httpd-tools firewalld

# 2.安装Docker(CentOS 7/8通用)
yum install -y docker-ce
systemctl start docker
systemctl enable docker

二、防火墙配置

bash 复制代码
# 启动防火墙并设置开机自启
systemctl start firewalld
systemctl enable firewalld

# 放行80(HTTP)、443(HTTPS)端口,立即生效并永久保存
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

(简单粗暴:systemctl mask firewalld,直接永久关闭防火墙)

三、OpenSSL生成自签名SSL证书

bash 复制代码
# 创建证书存放目录,避免路径不存在报错
mkdir -p /data/nginx/ssl
cd /data/nginx/ssl

# 生成私钥(无密码,生产环境可添加密码增强安全性)
openssl genrsa -out server.key 2048

# 生成自签名证书(有效期10年,3650天),执行后按提示输入信息即可(可直接回车默认)
openssl req -new -x509 -key server.key -out server.crt -days 3650

四、创建Nginx认证账号密码

bash 复制代码
# 创建认证文件存放目录
mkdir -p /data/nginx/auth

# 创建用户admin,密码123456(可修改admin为自定义用户名,123456为自定义密码)
htpasswd -bc /data/nginx/auth/.htpasswd admin 123456

五、Nginx配置文件准备

bash 复制代码
# 创建Nginx配置目录
mkdir -p /data/nginx/conf

新建配置文件 /data/nginx/conf/nginx.conf,内容如下:

bash 复制代码
server {
    listen 80;
    server_name localhost;
    # 强制HTTP跳转HTTPS,避免未加密访问
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name localhost;

    # 绑定SSL证书(路径对应容器内挂载路径)
    ssl_certificate     /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    # HTTPS安全配置,禁用低版本TLS,启用强加密算法
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    # 开启身份认证,弹出登录框
    auth_basic "Please Login";
    auth_basic_user_file /etc/nginx/auth/.htpasswd;

    # 站点根目录(容器内默认目录,可自定义挂载本地目录)
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

六、Docker 启动Nginx容器(核心命令)

bash 复制代码
# 后台运行Nginx容器,挂载配置、证书、认证文件,端口映射,设置开机自启
docker run -d \
--name nginx-https \
-p 80:80 \
-p 443:443 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/conf.d/default.conf \
-v /data/nginx/ssl:/etc/nginx/ssl \
-v /data/nginx/auth:/etc/nginx/auth \
--restart always \
nginx:stable

七、配置校验 & 服务管理

bash 复制代码
# 进入容器校验Nginx配置(无报错即正常)
docker exec nginx-https nginx -t

# 重载Nginx配置(修改配置后执行,无需重启容器)
docker exec nginx-https nginx -s reload

# 常用容器管理命令
# 停止容器
docker stop nginx-https
# 启动容器
docker start nginx-https
# 重启容器
docker restart nginx-https
# 查看容器运行状态
docker ps -a | grep nginx-https

八、访问测试

  1. 浏览器访问:https://服务器IP(注意是https,不是http)

  2. 弹出登录框,输入账号密码:

    1. 账号:admin

    2. 密码:123456

  3. 成功进入Nginx默认页面,说明HTTPS加密+身份认证已生效,如下图:

输入密码后可跳转nginx默认页面

相关推荐
一直在努力学习的菜鸟11 小时前
Docker Info 详细解析(Rocky Linux 8.10 / Docker 29.8.1)
docker
小马同学-11 小时前
crictl实战:K8s容器运行时排障工具
容器·k8s·crictl
Lsetea11 小时前
部署证书后提示“证书名称与输入不匹配”:Safari 报错的三层排查
nginx·https·safari·ssl证书·openssl
蓝速科技11 小时前
会议室门牌签到功能选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
逐流人11 小时前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd
AlfredZhao11 小时前
Docker 删除 none 镜像:一次真实的清理记录
docker
酣大智14 小时前
网络协议计时器 & 发包间隔汇总
运维·网络·tcp/ip
云运维笔记21 小时前
IP地址从入门到精通:网络通信的核心基石
运维·网络·计算机网络
bosins21 小时前
WSL2 启动即崩溃?调整超时参数解决 Docker 阻塞问题
linux·docker·wsl
码农学院1 天前
企业官网改版后 AI 引用归零的复盘:301 重定向断层让爬虫索引掉线,修复方案与恢复数据
运维·geo优化·ai优化aio