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

相关推荐
xywww1682 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain
梦想的颜色5 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
donoot8 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
ITKEY_8 小时前
macOS brew 安装的nginx 文件在哪里?
运维·nginx·macos
Felix-lxd9 小时前
Ubuntu 22.04 配置 Nginx
linux·nginx·ubuntu
Elastic 中国社区官方博客9 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
万里侯9 小时前
GitOps 漂移检测:集群里改了配置,Git 还以为一切正常
微服务·容器·k8s
Tim_Van10 小时前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
孫治AllenSun10 小时前
【Nginx】配置参数和使用案例
运维·nginx
啵啵鱼爱吃小猫咪11 小时前
Ubuntu 20.04 + ROS Noetic 源码安装 libfranka 0.8.0 和 franka_ros 0.8.0 完整教程
linux·运维·ubuntu