首页 程序笔记 如何在 Docker 容器中运行 Nginx 代理管理器

如何在 Docker 容器中运行 Nginx 代理管理器

我们都知道 Nginx 代理主机、重定向和 SSL 的手动管理可能很乏味。 Nginx 代理管理器项目最初是 Jamie Curnow 的个人项目,旨在提供一种更简单的方法来创建反向代理主机并使用 Nginx 终止 SSL。该项目具有用于高级代理使用的可选高级选项。以下是 Nginx 代理管理器的一些优秀功能。

  • 支持用户管理、权限授予和审核日志记录
  • 它在新窗口中附带了基于 Tableropen 的美观且安全的管理界面
  • 支持使用 Let’s Encrypt 的免费 SSL 或提供您自己的自定义 SSL 证书的选项
  • 无需掌握 Nginx 概念即可创建转发域、重定向、流和 404 主机
  • 对于超级用户,可以使用高级 Nginx 配置
  • 支持特定主机的访问列表和基本 HTTP 身份验证
  • 易于部署:它构建为 Docker 映像,以便快速安装

在接下来的部分中,我们将执行安装、配置并演示 Docker 容器中 Nginx 代理管理器的基本用法。您不需要深厚的 Linux 技能来阅读本文。

安装 Docker 引擎

Nginx Proxy Manager 被打包为容器镜像,可以在 Docker、Podman 或任何类似的容器引擎上运行。为简单起见,我们在本文中使用 Docker 引擎。请按照以下文章执行Docker容器引擎的安装。

  • 如何在 Linux 系统上安装 Docker 引擎

安装完成后,您可以验证Docker的版本。

$ docker version
Client: Docker Engine - Community
 Version:           25.0.3
 API version:       1.44
 Go version:        go1.21.6
 Git commit:        4debf41
 Built:             Tue Feb  6 21:13:09 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          25.0.3
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.6
  Git commit:       f417435
  Built:            Tue Feb  6 21:13:09 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

在 Docker 容器中运行 Nginx 代理管理器

Nginx 代理管理器将使用端口 80 表示 http,使用端口 443 表示 https 流量,使用端口 81 表示其管理仪表板。如果同一主机上有另一个 Web 服务器,例如 Nginx 或 Apache,请考虑禁用它。

要在基于 Debian 和 RHEL 的系统上停止当前的 Nginx 和 Apache Web 服务,请使用以下命令。

### Debian / Ubuntu ###
sudo systemctl disable --now nginx apache2

### RHEL based systems ###
sudo systemctl disable --now nginx httpd

创建包含 Nginx 代理管理器数据的目录。

mkdir ~/nginx-proxy-manager && cd ~/nginx-proxy-manager

Docker compose 是一种命令行工具,用于根据名为 docker-compose.yml 的单个 YAML 文件中的定义来定义和运行一个或多个容器应用程序。让我们创建这个文件

vim docker-compose.yml

这里我们有使用 Compose 运行应用程序所需的默认配置。默认数据库是SQLite

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

如果您希望使用 MariaDB 数据库,以下是 docker-compose.yml 的示例:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      # Mysql/Maria connection parameters:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
      MARIADB_AUTO_UPGRADE: '1'
    volumes:
      - ./mysql:/var/lib/mysql

通过执行以下命令激活容器运行。

docker compose up -d

预期的命令执行输出。

[+] Running 2/2
  Network nginx-proxy-manager_default  Created                                                                                                                                                  0.1s
   Container nginx-proxy-manager-app-1  Started                                                                                                                                                  0.2s

如果一切顺利,您将看到如下所示的输出。

当应用程序启动时,将发生以下操作。

  1. GPG 密钥生成并保存在数据文件夹中
  2. 数据库将使用表结构进行初始化
  3. 将创建一个默认管理员用户 - 具有信用[电子邮件受保护]/changeme

前面提到的服务端口是80、44381。

$ ss -tunelp | egrep '80|443|81'
tcp   LISTEN 0      4096             0.0.0.0:80        0.0.0.0:*    users:(("docker-proxy",pid=608762,fd=4)) ino:8689062 sk:100d cgroup:/system.slice/docker.service <->
tcp   LISTEN 0      4096             0.0.0.0:81        0.0.0.0:*    users:(("docker-proxy",pid=608740,fd=4)) ino:8689043 sk:100e cgroup:/system.slice/docker.service <->
tcp   LISTEN 0      4096             0.0.0.0:443       0.0.0.0:*    users:(("docker-proxy",pid=608718,fd=4)) ino:8688177 sk:100f cgroup:/system.slice/docker.service <->
tcp   LISTEN 0      4096                [::]:80           [::]:*    users:(("docker-proxy",pid=608768,fd=4)) ino:8689067 sk:1010 cgroup:/system.slice/docker.service v6only:1 <->
tcp   LISTEN 0      4096                [::]:81           [::]:*    users:(("docker-proxy",pid=608746,fd=4)) ino:8688198 sk:1011 cgroup:/system.slice/docker.service v6only:1 <->
tcp   LISTEN 0      4096                [::]:443          [::]:*    users:(("docker-proxy",pid=608724,fd=4)) ino:8688181 sk:1012 cgroup:/system.slice/docker.service v6only:1 <->

您可以在 http://ServerIP_or_FQDN:81 上访问 Nginx 代理管理器

默认登录详细信息是;

  • 电子邮件:[电子邮件受保护]
  • 密码:更改我

登录后编辑用户并设置名称和正确的电子邮件地址。

将其密码从更改更改为更强的密码。

仪表板的导航菜单中将包含以下部分。

使用 Let’s Encrypt SSL(通配符)

我发现对所有子域使用 Let's Encrypt 通配符 SSL 比为每个域生成证书更理想。要创建新的 SSL 证书,请导航至“SSL 证书”,然后“添加 SSL 证书”

对于我的用例,我将选择“使用 DNS 挑战”,因为我的域托管在 Cloudflare 中。输入*.domain作为通配符子域ssl证书。您还可以添加主域,以便证书同时具有这两个域。

保存并等待证书生成。

添加代理主机

对于需要公开的服务,您必须为指向 Nginx 代理管理器 IP 地址的域名创建 DNS A 记录。例如;

grafana.computingforgeeks.com in A 192.168.20.3

在本教程的其余部分中,我们将使用 computingforgeeks.com 作为域,并将其替换为您的实际域名。

要添加新的虚拟主机,请导航至主机>代理主机

单击“添加代理主机”配置新的虚拟主机。

填写以下详细信息来完成表格。

  • 域名:输入一个或多个将访问该服务的域名。
  • Scheme:设置Nginx访问服务所使用的scheme,因此不是代理本身使用的scheme。
  • 转发主机名/IP:配置后端服务运行的IP地址或主机名。它可以是本地或公共 IP。
  • 转发端口:后端服务使用的服务端口。
  • 阻止常见漏洞:您可以打开此选项。
  • 其他字段可以保留默认值。

SSL 部分下,您可以选择请求新的 SSL 证书或使用之前添加的现有 SSL 证书。填写获取 Let’s Encrypt SSL 证书所需的其他信息。

所有代理主机都列在“代理主机”菜单部分下。点击源 URL 来测试您的 nginx 代理服务。

结论

在本文中,我们演示了如何使用 Nginx 代理管理器来管理对受 Let's Encrypt SSL 证书保护的后端服务的外部前端或公共访问。这被认为是基本使用指南,但可以进行更高级的设置。这只是为了展示 nginx 代理管理器的功能和有效性。


2

站心网

我们都知道 Nginx 代理主机、重定向和 SSL 的手动管理可能很乏味。 Nginx 代理管理器项目最初是 Jamie Curn..

为您推荐

宝塔Nginx服务器User-Agent过滤器

这些正则表达式规则主要用于Web服务器或安全系统(如WAF)的User-Agent过滤,旨在识别并拦截自动化工具、恶意爬虫、漏洞扫描器等非人类流量,从而提升网站安全性和资源保护。以下是分点总结:‌核心作用‌‌安全防护..

宝塔Nginx配置图片404处理方法

在宝塔面板中配置Nginx,使其在访问图片不存在时显示指定内容或返回自定义404页面,可以通过以下步骤实现:方法一:显示指定内容登录宝塔面板,进入网站管理页面。选择网站,点击需要配置的网站右侧的“设置”按钮。..

VS创建.NET Core项目使用Docker方式部署到Linux服务器

在 Visual Studio(VS) 中,使用 Docker 方式部署 .NET Core 项目 到 Linux 服务器,可以简化环境管理并提高部署效率。以下是完整教程:1. 在 VS 创建 .NET Core 项目并启用 Docker新建 ASP.NET Core 项目打开 Visu..

鸿蒙系统HarmonyOS支持Docker吗?

华为鸿蒙系统(HarmonyOS)本身并不是直接为容器化设计的操作系统,因此在原生支持上并没有内置对 Docker 的直接支持。不过,可以通过以下方式实现某些 Docker 的功能:1. 鸿蒙系统的定位鸿蒙系统主要针对 IoT(物联..

ASP.NET如何将Views文件夹从项目分离

将 Views 文件夹从 ASP.NET 项目中分离是一个常见需求,比如为了实现模块化或分层架构。以下是实现此功能的完整步骤,从项目中分离 Views 文件夹,将其移到另一个独立的文件夹或项目中,并确保视图渲染仍然正常。1. ..

如何让AI写出Google认可的文章?

让 AI 写出 Google 认可的文章,核心在于满足 Google 的搜索排名算法要求。这些要求通常围绕以下几个关键点展开:内容质量、用户体验 和 SEO 优化。以下是详细指导:一、内容质量确保文章原创且有价值避免抄袭:Goog..

如何从.NET Framework迁移到.NET Core或.NET 6/7?

从 .NET Framework 迁移到 .NET Core 或 .NET 6/7 是一个提升性能和跨平台能力的关键过程。以下是迁移的主要步骤和注意事项:迁移步骤1. 评估当前项目依赖项检查:确保所有第三方库和NuGet包都有与 .NET Core/.NET 6..

如何优化ASP.NET Core应用的性能?

优化ASP.NET Core应用性能需要从代码、数据库、配置、服务器和部署等多个层面进行综合考虑。以下是一些优化ASP.NET Core应用性能的关键方法和技巧:1. 代码级优化使用异步编程:避免阻塞线程,通过async和await处理I..

在Docker、Kubernetes环境下部署.NET应用的最佳实践

在 Docker 和 Kubernetes 环境中部署 .NET 应用是现代云原生开发的重要实践之一。以下是一些经过验证的最佳实践,涵盖 Docker 镜像优化、Kubernetes 部署配置和整体架构建议。1. Docker 镜像构建的最佳实践1.1 使用..

chrome 开发者工具如何查看元素:hover时的样式

在 Chrome 开发者工具中查看元素的 :hover 样式,可以通过以下步骤实现:打开开发者工具:右键点击页面中的元素,然后选择“检查(Inspect)”或按下 F12 或 Ctrl + Shift + I (Windows) / Cmd + Option +..

鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?

鸿蒙(HarmonyOS)和 OpenHarmony 系统本身并不原生支持直接运行 .NET Core,但可以通过一些方法使 .NET Core 应用在其上运行。鸿蒙和 OpenHarmony 是基于 LiteOS 和 Linux 内核的多终端操作系统,因此它们的运行时..

.NET 9 即将推出的功能Task.WhenEach

.NET 爱好者!我刚刚偶然发现了一个非常酷的新 PR,它被合并到 .NET 运行时存储库中,我想分享一个例子。希望您能为新的 .NET 版本大肆宣传!在即将到来的 .NET 9 版本中,我们预计会有一个名为 .它在这里让您的异步..

针对 Go 语言开发的 SQL 驱动模拟库

数据库交互是几乎所有应用程序不可或缺的一部分,开发者们常常需要对数据库进行各种操作,包括插入、更新、删除和查询等。然而,在开发过程中直接对真实数据库进行操作不仅耗时耗力,还可能带来数据一致性和安全性的..

DockerUI 中文可视化Docker管理工具使用示例

DockerUI 是由国内开发者打造的一款优秀的 Docker 可视化管理工具。该工具拥有简洁直观的UI界面,可以轻松进行Docker主机管理、集群管理,以及Docker任务的编排等操作。DockerUI不仅展示了资源利用率、系统信息和更..

Blazor的N种渲染模式原理和常见问题说明

我们从下面这幅图开始,下图显示了三种渲染模式,分别称之为静态SSR、交互式SSR(即之前的BlazorServer)、交互式CSR(即之前的BlazorWasm)。还有一种渲染模式BlazorHybrid,稍后说。一、先浅层理解一个图例静态SSR:经..

前端CSS常见的三种设计模式

CSS设计模式主要包括OOCSS、SMACSS和BEMCSS等。以下是对这些模式的具体介绍:OOCSS:面向对象的CSS,旨在编写高可复用、低耦合和高扩展的CSS代码。它将抽象(结构)和实现(样式)分离,抽离公共代码,以提高代码的..

WinToUSB | 把Windows塞进U盘里即插即用

不论是在外出差,还是在家临时办公,现在很多设备携带起来都不是那么方便,在这种情况下,有一个轻巧而高效的操作系统环境就显得格外关键。今天,要给大家介绍一款超级实用的便携式系统启动盘,凭借其独特功能和卓越..

.NET Framework被淘汰了吗?

.NET Framework并未完全被淘汰,但它的某些版本确实已经停止支持。微软在2023年11月10日停止了对.NET Framework 4.8之前的版本的支持。这一决策意味着使用这些旧版本的应用程序将不再获得安全更新和其他维护,从而可..

强大的 .NET Mock 框架 单元测试模拟库Moq使用教程

单元测试是确保代码质量和可靠性的重要手段。当我们的代码依赖于外部系统、数据库或第三方服务时,编写有效的单元测试可能会变得复杂且耗时。为了简化这一过程,模拟(Mocking)技术应运而生。在 .NET 生态系统中,M..

CLS 问题:超过 0.1(桌面设备) 是什么意思?

在网页设计和开发中,CLS(Cumulative Layout Shift)是指页面布局的累计偏移量。当一个用户与页面互动时,如果页面的某些元素突然改变位置或大小,导致整个布局发生偏移,就会产生布局偏移。这种偏移可能会影响用户..

发表回复

返回顶部