部署Nginx容器
使用docker-compose来部署Nginx容器。首先,创建一个文件夹nginx, 新建nginx/docker-compose.yml文件,内容如下:
---
services:
nginx:
image: nginx:latest
container_name: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./certs:/etc/ssl/certs:ro # 替换为你的 SSL 证书路径
environment:
- TZ=Asia/Shanghai
restart: always
network_mode: host
在这个配置中,文件目录结构如下:
nginx/
├── docker-compose.yml
├── nginx.conf
└── certs/
其中,nginx.conf是Nginx的配置文件,certs目录存放SSL证书。
配置文件格式
接下来,编辑nginx.conf文件,配置Nginx进行反向代理和SSL设置。以下是一个示例配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 1048576m; #1TB
# # HTTP 配置
# server {
# listen 80;
# server_name sub1.example.com sub2.example.com; # 替换为你的四级域名
# # 重定向 HTTP 请求到 HTTPS
# return 301 https://$host$request_uri;
# }
ssl_certificate /etc/ssl/certs/your_cert_name.pem; # 替换为你的 SSL 证书文件
ssl_certificate_key /etc/ssl/certs/your_cert_name.key; # 替换为你的 SSL 私钥文件
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
# 使用 map 指令进行域名到代理地址的映射
map $host $local_proxy_destination {
xxx.yyy.zzz.ddd https://127.0.0.1:114514; # 其中 yyy.zzz.ddd 为你的前三级域名,域名服务器上需要添加对应的 A 记录解析到服务器 IP 地址,xxx 为你的四级域名,114514是本地服务的端口号,替换为实际的服务地址和端口号,可以设置多条,用分号分隔;
}
# 使用 map 指令进行域名到代理地址的映射
map $host $public_proxy_destination {
aaa.bbb.ccc.eee https://127.0.0.1:114514; #用法同上,为第二个IP地址可以与第一个IP共享二级域名。
}
# 合并 HTTPS 配置
server {
listen 443 ssl;
server_name *.yyy.zzz.ddd; #替换为你的三级域名,保留*号
location / {
proxy_pass $local_proxy_destination;
}
}
# 合并 HTTPS 配置
server {
listen 443 ssl;
server_name *.bbb.ccc.eee; #替换为你的三级域名,保留*号
location / {
proxy_pass $public_proxy_destination;
}
}
# 合并 HTTPS 配置
server {
listen 80;
server_name *.yyy.zzz.ddd; #替换为你的三级域名,保留*号
location / {
proxy_pass $local_proxy_destination;
}
}
# 合并 HTTPS 配置
server {
listen 80;
server_name *.bbb.ccc.eee; #替换为你的三级域名,保留*号
location / {
proxy_pass $public_proxy_destination;
}
}
}
在这个配置中,Nginx监听80和443端口,分别处理HTTP和HTTPS请求。通过map指令,将不同的域名映射到不同的本地服务地址,实现反向代理。这里用两个ip地址分别代理服务,实际上按类似写法可以设置多个ip地址对应多种服务。这里出现二个域名yyy.zzz.ddd和bbb.ccc.eee,它们可以共享二级域名即ccc.eee和zzz.ddd可以相同。对于三级域名yyy.zzz.ddd和bbb.ccc.eee,它们需要在域名服务器上添加对应的A记录解析到服务器IP地址。四级域名则对应不同的服务地址和端口号。必须保证服务在地址和端口号在部署nginx的机器上是可以访问的。
获取SSL证书
这里介绍一种免费证书获取方法:
使用(在线工具)[https://xiangyuecn.github.io/ACME-HTML-Web-Browser-Client/ACME-HTML-Web-Browser-Client.html]
获取证书,按照提示输入你的域名,例如输入上述配置中的yyy.zzz.ddd和bbb.ccc.eee,输入格式用泛四级域名:
*.yyy.zzz.ddd,*.bbb.ccc.eee
然后按照提示完成域名验证,包括需要在域名服务器上添加TXT记录进行验证。验证成功后,工具会提供下载链接,下载证书文件并将其放置在nginx/certs目录下。
最后在nginx.conf中配置SSL证书路径,替换为实际的证书文件名。
启动Nginx容器
在nginx目录下运行以下命令启动Nginx容器:
docker-compose up -d
这样,Nginx容器就会启动,并根据配置文件进行反向代理和SSL设置。你可以通过访问https://xxx.yyy.zzz.ddd和https://aaa.bbb.ccc.eee来测试是否能够成功访问内部服务。

说些什么吧!