环境: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
八、访问测试
-
浏览器访问:
https://服务器IP(注意是https,不是http) -
弹出登录框,输入账号密码:
-
账号:
admin -
密码:
123456
-
-
成功进入Nginx默认页面,说明HTTPS加密+身份认证已生效,如下图:

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