安全不是一种产品,而是一种过程。

引言

最近我在玩飞牛NAS系统,装了很多服务,发现直接用 NGINX 来配置反向代理有时候不够直观。在网络开发中,反向代理是一个非常重要的概念,它不仅能提高安全性,还能帮助我们更好地管理流量。NGINX 作为广泛使用的工具,几乎每个网络项目都会用到。为了简化配置和管理过程,NGINX Proxy Manager 应运而生,它提供了一个更直观的界面来管理 NGINX 反向代理。今天,我想跟大家分享一下这个工具的基本功能以及如何安装它,希望能对大家有所帮助。

什么是 NGINX Proxy Manager?

NGINX Proxy Manager 是一个基于 Docker 的反向代理管理工具,提供了一个简单易用的界面,让我们可以轻松配置和管理 NGINX 反向代理。它支持 SSL 证书管理、访问控制等多种功能,真的是个好帮手。

主要功能

  1. 简单的用户界面:通过图形界面轻松管理反向代理设置,完全不需要复杂的命令行操作。

  2. SSL 证书管理:支持 Let's Encrypt 自动获取和续期 SSL 证书,省心又省力。

  3. 访问控制:可以设置基本的身份验证和 IP 白名单,保护我们的服务。

  4. 多域名支持:可以为多个域名配置反向代理,适合各种需求。

docker-compose安装

先决条件

  • 一台运行 Debian 或 Ubuntu 的服务器。

  • 已安装 Docker 和 Docker Compose。

安装步骤

  1. 创建数据库(我喜欢mysql~)

    CREATE DATABASE npm CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
    CREATE USER 'npm'@'%' IDENTIFIED BY 'password';
    GRANT ALL ON `npm`.* TO 'npm'@'%';
    FLUSH PRIVILEGES;
    
    GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, UPDATE ON `npm`.* TO 'npm'@'%';
    FLUSH PRIVILEGES;
    
  2. 创建 docker-compose.yml​ 文件:

    services:
      app:
        image: 'jc21/nginx-proxy-manager:latest'
        restart: unless-stopped
        container_name: nginx-proxy-manager
        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: "ip"
          DB_MYSQL_PORT: 33306
          DB_MYSQL_USER: "npm"
          DB_MYSQL_PASSWORD: "password"
          DB_MYSQL_NAME: "npm"
          # Uncomment this if IPv6 is not enabled on your host
          # DISABLE_IPV6: 'true'
        volumes:
          - ./data:/data
          - ./letsencrypt:/etc/letsencrypt
    
  3. 启动 NGINX Proxy Manager:

    docker-compose up -d
    
  4. 访问管理界面:
    打开浏览器,访问 http://你的服务器IP:81​,使用默认的登录信息:

    • Email: admin@example.com​

    • Password: changeme​

添加ssl

上来先配置SSL再说,配置 SSL 就像为你的数据加上一道安全锁,让它在网络上安心流通,避免不必要的风险。饭可以不吃,SSL不能没有。

image-oj3n.png​​

可以自定义上传已经申请好的证书,或者用let's Encrypt 配置自动申请。

image-20241128202200-qp4nzp3.png

let's Encrypt

废话不说,直接配置。

image-20241128203221-z92zqv8.png

说明:

  • Domain Names,申请证书的域名,支持* 通配符

  • 我这边推荐使用dns解析,我是腾讯云的深度用户,认证信息的id和key要在这个上面获取https://console.dnspod.cn/account/token/token,请妥善保管。

image-20241128202920-zj3p5om.png

填完之后点确定,正常情况下SSL Certificates列表页面就可以看到刚才的ssl证书了。

配置反向代理

image-20241128202459-lprvd6g.png

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id_or_name>

因为是容器部署,Forward Hostname / IP这里填的是容器的网关ip,我这里是172.17.0.1。

其他的选项都可以直接勾选上。

location

image-20241128203612-7jpol14.png

ssl,enabled就行。

结论

总的来说,NGINX Proxy Manager 是一个非常强大的工具,可以让我们轻松管理反向代理。无论你是新手还是有经验的开发者,都能从中受益。使用 NGINX Proxy Manager,我们可以更方便地管理自己的 web 应用和服务。

题外话

简单试了一下,确实很方便,可视化界面点点点倒也不错。

不过还可以尝试另外一个反向代理神器,lucky。这个我们下次再说。

https://www.lllyyb.com/archives/qFJVECM6

感谢大家的阅读和支持!如果有任何疑问或建议,欢迎留言交流。希望这篇文章能帮助大家更好地理解和使用NGINX Proxy Manager,祝大家使用愉快!