侧边栏壁纸
博主头像
v林羽博主等级

行动起来,活在当下

  • 累计撰写 172 篇文章
  • 累计创建 34 个标签
  • 累计收到 21 条评论

目 录CONTENT

文章目录

【Docker项目】之--Nginx Proxy Manager可视化Nginx反向代理工具

v林羽
2022-10-23 / 0 评论 / 1 点赞 / 3008 阅读 / 8884 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-11-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

【Docker项目】之–Nginx Proxy Manager可视化Nginx反向代理工具

#教程 #代理 #工具 #Docker #Docker-compose #Nginx #域名 #Linux #Ubuntu

Nginx作为一个功能十分强大的反向代理工具,安装和配置较为复杂,尤其是对多个网站的反代、分流使用更加不友好。Nginx Proxy Manager一个可视化的Nginx服务工具。通过网页端完成反向代理的设置和SSL证书的部署,能够简化大部分的代理操作。

官网:https://nginxproxymanager.com

1. 安装准备

系统:ubuntu 20.4
工具:docker和docker-compose

2. 搭建

2.1. 创建数据存放位置

mkdir -p /data/docker_data/npm   ## 创建文件夹

cd /data/docker_data/npm   ## 进入文件夹

vim docker-compose.yml   ## 创建docker-compose

2.2. 编辑docker-compose.yml

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm_app
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '8888:81' # 管理端口,修改为自己的
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      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/docker_data/npm/data:/data
      - /data/docker_data/npm/letsencrypt:/etc/letsencrypt
    networks:
      - mynet
    depends_on:
      - db
    logging:
      driver: "json-file"          # 限制log文件
      options:
        max-size: "100M"           # 限制log文件大小
  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'   # 数据库ROOT密码
      MYSQL_DATABASE: 'npm'        # 数据库名称
      MYSQL_USER: 'npm'            # 数据库用户名
      MYSQL_PASSWORD: 'npm'        # 数据库密码
    volumes:
      - /data/docker_data/npm/data/mysql:/var/lib/mysql
    networks:
      - mynet

networks:                           # 连接外部网络,方便内部代理
  mynet:
    external: true

2.3. 新建docker网络

已经创建的略过。

# 创建一个公用的docker网络
docker network create mynet

# 查看docker网络情况
docker network ls

# 显示如下信息
NETWORK ID     NAME      DRIVER    SCOPE
0134ad30defd   bridge    bridge    local
29474e75ede0   host      host      local
33bc01a2e0d0   mynet     bridge    local    # 刚刚新建的网络

2.4. 拉去镜像开始安装

docker-compose up -d

3. 使用及展示

在浏览器中输入 http://IP:8888 ,第一次使用默认用户和密码,然后创建管理用户和密码。

Email:    admin@example.com
Password: changeme

添加代理

添加代理前需要先把域名解析到服务器,测试成功后再继续(DNS服务商变更比较慢)。防止后面DNS解析不成功,申请证书失败。

Details:

  • Domain Names:反向代理的域名,输入域名后按回车确认。
  • Forward Hostname / IP:填写代理的ip。
  • Forward Port:反向代理的端口,这里就是81。
  • Cache Assets:启用缓存。
  • Block Common Exploits:阻止一些常见漏洞。
  • Websockets Spport:支持Websockets。
  • Access List:配合多账户使用,选择权限范围。

按照下图填写内容

SSL:

  • SSL Certificate:选择证书,Request a new SSL Certificate使用当前域名申请新证书。
  • Force SSL:强制使用SSL。
  • HTTP/2 Support:支持HTTP/2协议标准。
  • HSTS Enabled:使用HSTS策略机制,有助于保护网站免受中间人攻击。
  • HSTS Subdomains:子域名适用
  • Use a DNS Challenge:使用域名解析商方案。
  • Email Address for Let’s Encrypt:申请Let's Encrypt证书使用的电子邮箱。
  • I Agree to the Let’s Encrypt Terms of Service:同意Let's Encrypt服务。

使用下面的方案为当前域名申请一个Let's Encrypt的免费证书。

点击Save保存设置,等一下就可以看到代理成功。点击域名访问试试。

已经启用了SSL加密。

注意:有时Force SSL设置可能会显示未开启,需要重新开启一下。还有如果使用百度的seo抓取网站时失败需要关闭该选项🤷‍♂️。

4. 其他

4.1. 通过容器名称代理服务

使用Nginx反向代理的目的就是为了安全考虑,尽量暴漏最少的端口。同一台服务器上的docker服务,定义container_namecontainer_name就可以视作该服务的Hostname,那么可以container_name+内部端口的方式代理服务,不用再进行端口映射。一定要注意,前提条件是,该容器与Nginx Proxy Manager,处于同一个docker网络。设置方法如下:

设置完毕后,就可以通过服务器提供商的防火墙规则关闭8888端口了。

4.2. 通用域名、泛域名证书的申请

在每次使用域名时,都会申请一次证书比较麻烦。NPM也支持通用域名/泛域名证书的申请,这样同一个顶级域名下的所有域名都可以使用同一个证书,下面以Cloudflare为例。

注意:一些域名是无法成功申请到Cloudflare令牌的。

现在Cloudflare的API已经针对.cf,.ga,.gq,.ml和.tk这几个顶级域名收取费用,更新证书的时候会提示“You cannot use this API for domains with a .cf, .ga, .gq, .ml, or .tk TLD (top-level domain). To configure the DNS settings for this domain, use the Cloudflare Dashboard.”,暂时可通过申请其他付费域名来避免该问题。

4.2.1. 获取API令牌

登录:Cloudflare | Web Performance & Security

进入域名管理,右侧找到获取你的API令牌->创建令牌->编辑区域DNS->使用模板

令牌名称->特定区域 或 所有区域->域名->继续以显示摘要->创建令牌->令牌API(只显示一次,一定要记录好)。

4.2.2. 申请证书

获取API令牌后,打开Nginx Proxy Manager依次进入,SSL Certificates->Add SSL Certificate->Let's Encrypt->填写Domain Names->填写Email Address for Let's Encrypt邮箱->Use a DNS Challenge->DNS Provider选择Cloudflare->填写api_token->I Agree to the Let's Encrypt Terms of Service ->save

# Domain Names格式
*.yourDomain.com yourDomain.com

申请成功。

以后再使用时,选择该通用证书就可了。

4.3.中文版

DockerHub:https://registry.hub.docker.com/r/chishin/nginx-proxy-manager-zh

将镜像替换为image: 'chishin/nginx-proxy-manager-zh:latest'

npm20

npm18

npm19

1

评论区