自学内容网 自学内容网

nginx-proxy-manager实现反向代理+自动化证书(实战)

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

🎏:你只管努力,剩下的交给时间

🏠 :小破站

nginx-proxy-manager是什么

Nginx Proxy Manager 是一个开源的、基于 Web 界面的反向代理管理工具。它的核心是基于 Nginx 和 Docker 的,旨在提供一种简单易用的方式来管理 Nginx 反向代理、SSL 证书和各种代理设置。

主要功能

​ • 基于 Web 界面的管理:提供友好的 Web 用户界面,用户无需手动编辑 Nginx 配置文件。

​ • 反向代理:可以轻松地为多个服务或网站设置反向代理规则,将外部请求根据域名或路径转发到内部的不同服务。

​ • 自动获取 SSL 证书:集成了 Let’s Encrypt,可以轻松为站点获取和续订免费的 SSL 证书。

​ • 访问控制:可以通过设置用户名和密码来保护特定的路径或站点。

​ • 端口映射:支持将请求从外部端口映射到内部服务的不同端口。

使用场景

Nginx Proxy Manager 主要用于需要在多个服务之间进行反向代理的场景,比如你有多个 Web 服务(如个人博客、Nextcloud、GitLab 等)需要公开在互联网上,但你希望通过单一的入口来管理这些服务。它可以简化反向代理和 SSL 证书管理,尤其适合以下情况:

​ • 个人或小型团队使用 Docker 部署多个 Web 服务。

​ • 希望通过一个简单的 Web 管理界面来管理所有代理规则和 SSL 证书。

​ • 需要简单的域名到服务的映射,但不想深入研究 Nginx 配置文件。

特点

​ • 基于 Docker 容器的部署方式,简单方便。

​ • 集成 Let’s Encrypt,可以自动获取和管理 SSL 证书。

​ • 具有直观的 Web 界面,无需编写复杂的 Nginx 配置文件。

​ • 轻松管理子域、端口转发等功能。

搭建nginx-proxy-manager

我这里使用的是docker-compose搭建的,比较方便,如果以后迁移服务器的时候也比较简单

搭建

version: '3'
services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'       # HTTP
      - '10811:81'       # Nginx Proxy Manager 管理界面
      - '443:443'     # HTTPS
    volumes:
      - ./data:/data  # 数据卷,用于存储 Nginx 配置和证书
      - ./letsencrypt:/etc/letsencrypt  # 证书存储卷

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'ua1wlnkZzzLu7RrB'  # MySQL root 用户密码
      MYSQL_DATABASE: 'npm'                      # NPM 使用的数据库
      MYSQL_USER: 'npm'                          # 数据库用户名
      MYSQL_PASSWORD: 'ua1wlnkZzzLu7RrB'         # 数据库用户密码
    volumes:
      - ./mysql:/var/lib/mysql

db这里可以不用也行,看自己

注意:这里我没有使用81端口,因为1000以下的端口在某些情况下会被保护的,比如我使用穿透,就会报错

成功示意图

image-20241025104211847

实现证书创建加续签

image-20241025104440164

它支持一键创建多个证书,而且速度很快,也可以支持一键续订

续签

端口转发(两种实现)

基于本机ip

这里的本机ip是ifconfig中的ip,并非127.0.0.1,因为我们的npm是在容器中部署的,所以要想实现通信只能通过本机内网ip实现。

image-20241025105736249

基于docker网络

首先创建一个网络,然后让其加入这个网络,就可以直接用容器名称访问了,如下图

image-20241025112745130

报错解决

如果你的证书被删除了,但是你的转发中存在了该证书,就会报如下错

搭建的nginx proxy manager创建证书的时候报错CommandError: nginx: [warn] “listen ... http2”指令已弃用,请在 /data/nginx/proxy_host/1.conf:19 中改用“http2”指令
nginx:[警告]“listen ... http2”指令已弃用,请在 /data/nginx/proxy_host/1.conf:20 中改用“http2”指令
nginx:[警告]“listen ... http2”指令已弃用,请在 /data/nginx/proxy_host/2.conf:19 中使用“http2”指令
nginx:[警告] 在 /data/nginx/proxy_host/2.conf:19 中为 0.0.0.0:443 重新定义了协议选项
nginx:[警告]“listen ... http2”指令已弃用,请在 /data/nginx/proxy_host/2.conf:20 中改用“http2”指令
nginx:[警告] 在 /data/nginx/proxy_host/2.conf:20 中为 [::]:443 重新定义了协议选项
nginx:[警告]“listen ... http2”指令已弃用,请在 /data/nginx/proxy_host/3.conf:19 中使用“http2”指令
nginx:[警告]“listen ... http2”指令已弃用,请在 /data/nginx/proxy_host/3.conf:20 中使用“http2”指令
nginx:[警告]“listen ... http2”指令已弃用,请在 /data/nginx/proxy_host/4.conf:19 中使用“http2”指令
nginx:[警告]“listen ... http2”指令已弃用,请在 /data/nginx/proxy_host/4.conf:20 中改用“http2”指令
nginx:[emerg] 无法加载证书“/etc/letsencrypt/live/npm-2/fullchain.pem”:BIO_new_file()失败(SSL:错误:80000002:系统库::没有此文件或目录:调用 fopen(/etc/letsencrypt/live/npm-2/fullchain.pem,r)错误:10000080:BIO 例程::没有此文件)
nginx:配置文件/etc/nginx/nginx.conf 测试失败
    位于 /app/lib/utils.js:16:13
    在 ChildProcess.exithandler (节点:child_process:430:5)
    在 ChildProcess.emit (节点:事件:519:28)
    在可能关闭(节点:内部/子进程:1105:16)
    在 ChildProcess._handle.onexit (节点:internal/child_process:305:5)

此时要先停掉转发,在新增创建即可


原文地址:https://blog.csdn.net/Mrxiao_bo/article/details/143429543

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!