使用Nginx Proxy Manage进行Docker容器中的反向代理

技术 · 01-10 · 128 人浏览

使用Nginx Proxy Manage进行Docker容器中的反向代理

前面讲了搭建Typecho博客,但是没有监听443端口,这里来进行反向代理。

1. 需要用到的镜像

  • nginx-proxy-manager

2. 配置

先在dockerdata下创建一个npm目录

配置 docker-compose.yml

version: '3.8'
services:
  app:
    #image: 'jc21/nginx-proxy-manager:latest' # 官方原版
    image: 'chishin/nginx-proxy-manager-zh:2.9.18' # 中文版
    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: "user"
      DB_MYSQL_PASSWORD: "password"
      DB_MYSQL_NAME: "name"
      # 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: 'password'
      MYSQL_DATABASE: 'database'
      MYSQL_USER: 'user'
      MYSQL_PASSWORD: 'password'
    volumes:
      - ./mysql:/var/lib/mysql

3 启动npm

  • 先进入npm

    cd dockerdata/npm
  • 启动npm

    docker-compose up -d
  • 查看进程

    docker-compose ps
  • 查看是否成功
  • 浏览器访问ip

image-20231231143330005

  • 进入控制面板

    
    - > 主要需要去服务器运营商放行81端口
  • 默认账号密码为:

    
    - 第一次进入后会要求更改账户和密码
  • 关闭docker-compose运行服务

    • #该命令会关闭所有使用up启动的容器

## 4. 使用npm

- 先设置账号,邮箱,密码
- 点击代理服务

![image-20240102163626604](https://cdn.jsdelivr.net/gh/akitten-cn/pic@main/image/image-20240102163626604.png)

- 添加代理服务
- 在详细信息中填写相关内容

![image-20240102163749884](https://cdn.jsdelivr.net/gh/akitten-cn/pic@main/image/image-20240102163749884.png)

- 这里面的IP我使用的是docker内部网络的IP,Nginx Proxy Manager 和 typecho的docker在同一台服务器上
  - 可以使用`ip addr show docker0`查看

- 配置SSL

![image-20240102164209009](https://cdn.jsdelivr.net/gh/akitten-cn/pic@main/image/image-20240102164209009.png)

> 我这会报错 `Internal Error`

- 我打算使用dns认证来申请SSL证书
  - 使用cloudflare

## 5. 使用cloud flare的dns认证来申请SSL证书

- 申请cloudflare令牌
- 点击右上角`个人->我的个人资料->API令牌`
- 点击创建令牌
- 到最下面找到自定义令牌,点击开始使用
- 名字可以设置成`nginx proxy manage`
- 权限
  - 选`区域`
  - `DNS`
  - `编辑`
- 区域资源
  - `包括`
  - `所有区域`
- 点击`继续以显示摘要`

- 创建令牌
  - 一定要记住自己的API,以后看不到了



回到npm中

- 进入``SSL证书``
- 添加SSL证书
- 选择使用DNS认证,在箭头处填入刚才申请的API接口

![image-20240102165110317](https://cdn.jsdelivr.net/gh/akitten-cn/pic@main/image/image-20240102165110317.png)

等待几分钟,可能会有网络影响,多试几次

- 成功后回到代理服务,将刚才申请的证书应用




nginx Linux Ubuntu Docker
Theme Jasmine by Kent Liao