03_Docker 部署 Nginx 配置 HTTPS 并转发请求到后端服务
一、在 Docker 内部署 Nginx
-
拉取 Nginx 镜像
powershelldocker pull nginx:1.19.4 //如果能直接拉取使用这个命令 docker pull docker.xuanyuan.me/nginx:1.19.4 //不能直接拉取需要在前面加上镜像地址
-
拉取成功后,创建 Nginx 容器并运行
powershelldocker run -d -p 80:80 --name nginx docker.xuanyuan.me/nginx:1.19.4
参数说明:
-p 80:80
: 将宿主机的 80 端口映射到容器的 80 端口上。-d
: 以后台方式运行镜像。--name
: 指定容器的名称为nginx
。
-
创建 Nginx 挂载目录
powershell//这里将nginx的目录设置在了/home/docker下 mkdir -p /home/docker/nginx
-
复制 Nginx 配置文件至宿主机
powershell# 复制名称为 nginx 容器中 /etc/nginx/nginx.conf 文件夹到宿主机的 /home/docker/nginx 路径下 docker cp nginx:/etc/nginx/nginx.conf /home/docker/nginx # 复制名称为 nginx 容器中 /etc/nginx/conf.d 文件到宿主机的 /home/docker/nginx 路径下 docker cp nginx:/etc/nginx/conf.d /home/docker/nginx
-
删除 Nginx 容器并重新创建
powershelldocker rm -f nginx docker run -d \ -p 80:80 \ --name nginx \ -v /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /home/docker/nginx/conf.d:/etc/nginx/conf.d \ -v /home/docker/nginx/logs:/var/log/nginx \ docker.xuanyuan.me/nginx:1.19.4
二、配置反向代理
在 /nginx/conf.d 路径下修改 default.conf 配置文件
server {
listen 80;
listen [::]:80;
server_name aaa.com www.aaa.com;
}
server {
location / {
proxy_pass http://172.17.1.66:8080; # 将请求转发至后端服务端口,此处后端服务端口为8080,通过服务器内网ip转发,172.17.1.66为我的服务器对应的内网IP
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;
}
}
三、配置域名解析
-
购买域名
-
备案网站及域名(ICP 备案和公安网备案)
-
添加域名解析,按照如下格式添加。

参数解释:
-
www
:将带有www.
前缀的域名, 解析到对应服务器IP
, 如www.jenkins.shuzhixinghua.com -> 116.62.199.48
; -
@
:将不带有www.
前缀的域名,解析到对应服务器IP
, 如jenkins.shuzhixinghua.com -> 116.62.199.48
; -
记录值:该域名需要解析到的对应服务器IP。
四、配置 SSL 证书,实现支持 HTTPS 访问
-
下载申请/购买的 SSL 证书
-
将后缀为
.key
和.pem
的文件上传至/nginx/cert
文件夹下(如果没有该文件夹自行新建)。 -
修改的 /nginx/conf.d 路径下修改 default.conf 配置文件
server { listen 80; listen [::]:80; server_name aaa.com www.aaa.com; } server { listen 443 ssl; //HTTPS端口为443 server_name aaa.com www.aaa.com; ssl_certificate /etc/nginx/cert/aaa.com.pem; ssl_certificate_key /etc/nginx/cert/aaa.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://172.17.1.66:8080; # 将请求转发至后端服务端口,此处后端服务端口为8080,通过服务器内网ip转发,172.17.1.66为我的服务器对应的内网IP 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; } }