当前位置: 首页 > article >正文

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

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


在这里插入图片描述

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

🏠 :小破站

cnginx-proxy-manager实现反向代理+自动化证书

    • nginx-proxy-manager是什么
    • 搭建nginx-proxy-manager
      • 搭建
      • 成功示意图
    • 实现证书创建加续签
    • 端口转发(两种实现)
      • 基于本机ip
      • 基于docker网络
    • 报错解决

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)

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


http://www.kler.cn/a/376276.html

相关文章:

  • 力扣每日一题 超级饮料的最大强化能量 动态规划(dp)
  • Ubuntu 22.04安装部署
  • 消息中间件mq*(Kafka)
  • 【Hello World 】
  • Leetcode 3336. Find the Number of Subsequences With Equal GCD
  • 【视频】OpenCV:识别颜色、绘制轮廓
  • 前端项目【本科期间】
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-27
  • uniapp 小程序 H5 app 价格计算 避免精度丢失
  • 深入探讨 Tantivy 及其在 Milvus 中的应用:倒排索引库对比与选择
  • Android Studio开发学习(五)———LinearLayout(线性布局)
  • 微信小程序 uniapp 腾讯地图的调用
  • 设计模式之责任链的通用实践思考
  • C语言静态库
  • 数据结构之链式结构二叉树的实现(初级版)
  • FRIDA-JSAPI:Process使用
  • HTTP 405 Method Not Allowed:解析与解决
  • 【spark】——spark面试题(1)
  • 基于YOLO11/v10/v8/v5深度学习的农作物类别检测与识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
  • Spring Cloud Config快速入门Demo
  • 河北冠益荣信科技公司洞庭变电站工程低压备自投装置的应用
  • Android -- (静态广播) APP 监听U盘挂载
  • Android Jetpack Compose 现有Java老项目集成使用compose开发
  • 深入解析最小二乘法:原理、应用与局限
  • Hbuilder html5+沉浸式状态栏
  • RHCE的学习(7)