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

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

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

🏠 :小破站

cnginx-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搭建的,比较方便,如果以后迁移服务器的时候也比较简单

搭建

yaml 复制代码
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以下的端口在某些情况下会被保护的,比如我使用穿透,就会报错

成功示意图

实现证书创建加续签

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

端口转发(两种实现)

基于本机ip

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

基于docker网络

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

报错解决

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

sh 复制代码
搭建的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)

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

相关推荐
先天打工圣体的男人1 小时前
Linux中安装InfluxDB
linux·运维·服务器
菜鸟小贤贤2 小时前
python+pytest+allure利用fix实现接口关联
python·macos·自动化·pytest
陌小呆^O^2 小时前
CmakeList.txt之Linux-pthread
linux·运维·服务器
山川生色2 小时前
本机上装好的ubuntu 全部的开发软件 如何备份以后移到另一台电脑上 还不会出现引导错误?
运维·服务器·postgresql
Sagice3 小时前
CVE-2019-13272(Linux本地内核提权)
linux·运维·服务器·网络·安全
xnuscd5 小时前
els学习
运维·学习·jenkins
疯狂吧小飞牛5 小时前
elasticsearch单节点模式部署
运维·elasticsearch
0110编程之路6 小时前
ubuntu 安装proxychains
linux·运维·ubuntu