运维项目实战: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默认页面

相关推荐
有谁看见我的剑了?2 小时前
Rocky Linux 更换 阿里云的镜像源
linux·运维·阿里云
七夜zippoe2 小时前
OpenClaw 定时任务与 Cron 调度:自动化运维的智能引擎
运维·人工智能·自动化·cron·openclaw
crossoverJie2 小时前
从企业版 Istio 迁移到社区版:一场给高速行驶汽车换轮胎的实践
云原生·汽车·istio
黑风风2 小时前
一次 Docker 磁盘占用排查与迁移的完整复盘
docker·容器·eureka
inner2222 小时前
kubeasz部署k8s集群1.37
云原生·容器·kubernetes
marsh02062 小时前
35 openclawCQRS模式应用:分离读写操作提升性能
运维·ai·jenkins·编程·技术
IMPYLH2 小时前
Linux 的 readlink 命令
linux·运维·服务器·网络·bash
zb200641202 小时前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
一个小浪吴啊2 小时前
Linux/Mac Hermes Agent部署教程
linux·运维·macos·ai·ai编程