前言

什么是反向代理?
反向代理是一种代理服务器模型,它位于客户端和后端服务器之间。它允许将请求转发到后端服务器,并将响应返回给客户端。反向代理的主要作用如下:

负载均衡:通过将请求分发到多个后端服务器来平衡负载,从而减少单个服务器的负担,提高系统的可伸缩性。
安全性和访问控制:通过代理服务器可以实现身份验证、授权和防火墙功能,以限制对后端服务器的访问。
隐藏真实地址:通过将请求转发到另一个地址,可以隐藏后端服务器的真实地址,提高系统的安全性。
服务治理:可以通过代理服务器监控和管理后端服务器的状态,如健康检查、服务降级等。

项目地址:https://github.com/NginxProxyManager/nginx-proxy-manager

项目官网:https://nginxproxymanager.com/

安装Docker🐳

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:    admin@example.com
Password: changeme

使用此默认用户登录后,系统会立即要求您修改您的详细信息并更改您的密码。

免费泛域名证书申请

ohttps

使用

建议先到dns解析商处将你的ip和子域名进行绑定后,再进行下一步配置操作!

Forward Hostname/IP这里如果后端容器和NPM在一个docker网络里,可以直接填容器名,并且后端容器不需要映射端口到宿主机

1715575093467.webp

1715575172282.webp

1715575240957.webp

1715575203159.webp

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  # 完全删除映射到本地的数据