前言
什么是反向代理?
反向代理是一种代理服务器模型,它位于客户端和后端服务器之间。它允许将请求转发到后端服务器,并将响应返回给客户端。反向代理的主要作用如下:
负载均衡:通过将请求分发到多个后端服务器来平衡负载,从而减少单个服务器的负担,提高系统的可伸缩性。
安全性和访问控制:通过代理服务器可以实现身份验证、授权和防火墙功能,以限制对后端服务器的访问。
隐藏真实地址:通过将请求转发到另一个地址,可以隐藏后端服务器的真实地址,提高系统的安全性。
服务治理:可以通过代理服务器监控和管理后端服务器的状态,如健康检查、服务降级等。
项目地址:https://github.com/NginxProxyManager/nginx-proxy-manager
项目官网:https://nginxproxymanager.com/
1.创建容器文件夹
sudo mkdir -p ~/nginx-proxy-manager && cd $_
2.创建一个 docker-compose.yml 文件
vim docker-compose.yml
英文输入法下按下键盘的“i”或“Insert”键
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 保持默认即可,不建议修改左侧的80
- '81:81' # 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 保持默认即可,不建议修改左侧的443
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
按下Esc键然后输入 :wq 保存退出
排查端口占用情况,这里使用lsof工具,需要详细命令的可以跳转下面链接
详细命令参数点此查看
apt -y install lsof #Ubuntu
lsof -i:你要使用的端口
例:
lsof -i:80
3.运行
docker-compose up -d
我们现在可以输入 http://ip:81/
访问了。
4.登录
安装完成后,您可以通过打开Web浏览器并且访问以下位置来登录控制台
http://localhost:81
默认管理员用户:
Email: [email]admin@example.com[/email]
Password: changeme
使用此默认用户登录后,系统会立即要求您修改您的详细信息并更改您的密码。
免费泛域名证书申请
ohttps
使用
建议先到dns解析商处将你的ip和子域名进行绑定后,再进行下一步配置操作!
Forward Hostname/IP这里如果后端容器和NPM在一个docker网络里,可以直接填容器名,并且后端容器不需要映射端口到宿主机




Host菜单
-
Proxy Hosts(反向代理主机)
正向代理: 如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
反向代理: 客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果实在服务器用,我们用户无感知,就是反向代理。
**Domain Names # 必填 需要反代的子域名,例:a.tomato.com
Scheme # 必填 需要使用的协议,例:内网程序采用HTTP访问,则选择http
Forward Hostname / IP # 必填 主机名或IP,例:10.0.2.10 or b.tomato.com
# 可使用ip a查看本服务器ip
Forward Port # 必填 端口,例:数据库端口3306
可选功能
Cache Assets # 缓存来自代理 Web 和应用程序服务器的静态和动态内容,以加快向客户端的交付速度并减少服务器上的负载。
Block Common Exploits # 开启后阻止一些常见漏洞
Websockets Support # Socket.IO 是一个 WebSocket API,随着 Node.js 应用程序的兴起而变得非常流行。该 API 众所周知,因为它使构建实时应用程序(例如在线游戏或聊天)变得简单。
Access List # SSL证书列表**
**Custiom lcaotions # location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应。例:访问根目录/, 比如http://localhost/ 将匹配规则A 。访问 http://localhost/login 将匹配规则B
URL 尾部的 / 表示目录,没有 / 表示文件**
**SSL # 使用Let's Encrypt 创建SSL证书并且自动更新(有效期3个月)
建议申请子域名,例:*.tomato.com**
-
Redirection Hosts(重定向)
“重定向主机”将重定向来自传入域的请求并将请求者推送到另一个域
Domain Names # 必填 需要重定向的子域名,例:[a.tomato.com](http://a.tomato.com/)
Scheme # 必填 需要使用的协议,例:内网程序采用HTTP访问,则选择http,建议auto
Forward Domain / IP # 必填 需要被重定向的子域名,例:a.bigtomato.com
状态码 |
状态短语 |
状态含义 |
300 |
Multiple Choices |
当请求的 URL 对应有多个资源时(如同一个 HTML 的不同语言的版本),返回这个代码时,可以返回一个可选列表,这样用户可以自行选择。通过 Location 头字段可以自定首选内容。 |
301 |
Moved Permanetly |
当前请求的资源已被移除时使用,响应的 Location 头字段会提供资源现在的 URL。直接使用 GET 方法发起新情求。 |
302 |
Found |
与 301 类似,但客户端只应该将 Location 返回的 URL 当做临时资源来使用,将来请求时,还是用老的 URL。直接使用 GET 方法发起新情求。 |
303 |
See Other |
用于在 PUT 或者 POST 请求之后进行重定向,这样在结果页就不会再次触发重定向了。 |
304 |
Not Modified |
资源未修改,表示本地缓存仍然可用。 |
305 |
Use Proxy |
用来表示必须通过一个代理来访问资源,代理的位置有 Location 头字段给出 |
306 |
Switch Proxy |
在最新版的规范中,306 状态码已经不再被使用。最初是指“后续请求应使用指定的代理”。 |
307 |
Temporary Redirect |
与 302 类似,但是使用原请求方法发起新请求。 |
308 |
Permanent Redirect |
与 301 类似,但是使用原请求方法发起新请求。 |
**可选功能
Preserve Path # 重定向请求后保留原始路径,例如/some/path/
Block Common Exploits # 开启后阻止一些常见漏洞**
**SSL # 使用Let's Encrypt 创建SSL证书并且自动更新(有效期3个月)
建议申请子域名,例:*.tomato.com**
-
Streams(数据流)
数据流传输并非使用Web协议,除非视频游戏使用 HTTP 进行通信,否则您不能使用它来代理/缓存视频游戏流量
**Incoming Port # 传出数据主机端口,例服务器3306
Forward Host # 转发数据主机,例如a.bigtomato.com
Forward Port # 转发数据主机端口,例如9700
TCP Forwarding # TCP转发
UDP Forwarding # UDP转发**
-
404 Hosts(自定义404响应)
“404 Hosts”只是自定义 HTTP 404 响应
填入的主机名会定义到404页面
SSL Certificates菜单
使用Let's Encrypt创建你的SSL证书或者导入已有SSL证书文件
阿里云为例
在aliyun控制台登录后,获取一个新的access_key
并修改下列内容
dns_aliyun_access_key = 12345678 #改为实际key
dns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef #改为实际secret
粘贴至Credentials File Content内
获取安全证书后返回Proxy Hosts配置即可
更新 Nginx Proxy Manager
执行下列语句即可
docker-compose down # 停止并删除
cp -r /root/nginx-proxy-manager /root/nginx-proxy-manager/npm.archive # 备份数据
docker-compose pull # 最新镜像
docker-compose up -d #部署镜像
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
卸载 Nginx Proxy Manager
执行下列语句即可
cd /root/nginx-proxy-manager
docker-compose down
rm -rf /root/data/docker_data/npm # 完全删除映射到本地的数据