• 一个反向代理神器 ——Nginx Proxy Manager


    前言

    上一期留了一个问题,我们怎么样才能把 IP + 端口变成域名来访问?

    答案是用反向代理。

    看过之前几期视频的小伙伴应该知道,之前有宝塔的时候,碰到这个情况,我们会先新建一个站点,然后修改 Nginx 配置文件:

    NGINX

    location / {
    
            proxy_pass http://178.18.249.61:8123/;
    
            rewrite ^/(.*)$ /$1 break;
    
            proxy_redirect off;
    
            proxy_set_header Host $host;
    
            proxy_set_header X-Forwarded-Proto $scheme;
    
            proxy_set_header X-Real-IP $remote_addr;
    
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
            proxy_set_header Upgrade-Insecure-Requests 1;
    
            proxy_set_header X-Forwarded-Proto https;
    
    }
    
    

    具体可以参考:【好玩的 Docker 项目】搭建一个简洁的记事本 ——minimalist-web-notepad 里面配置反向代理部分。

    就可以反向代理的操作(域名访问)了。

    很多小伙伴跟着做可以成功,但是可能对反向代理并不是很了解,我们就趁着今天来简单介绍一下。

    操作环境

    什么是代理

    首先代理大家都懂 :)

    代理就是第三方。

    正向代理

    4e46c87b-633d-4836-83e1-49585e65f127

    你要买国外小 G 家的鞋子,你没有 paypal 和信用卡,买不了,于是你找到了叫小 V 的代购帮你到海外买,小 V 找到海外的卖家小 G,帮你买了鞋子,然后寄回给了你。

    这个小 V 就是正向代理。

    正向代理的特点是,可以保护访问者的信息。因为小 V 是个职业代购,他在帮你代购鞋子的同时也帮别人代购鞋子,而且他不仅代购鞋子,还代购箱子、家具、电饭煲,卖家小 G 只知道有人买了我的鞋子,我交给了小 V,但并不知道具体是谁买了他家的鞋子。

    反向代理

    反向代理,顾名思义,正好相反,可以保护卖家的信息。

    66bfd3ce-c815-4568-97c2-3d135e33c3c8

    具体可以看视频。

    好了,回来。

    没有了宝塔,我们今天用一个更简单的 Docker 项目来完成反向代理的操作。

    Nginx Proxy Manager

    Nginx proxy manager 是一个很简单的反向代理工具。

    官网:Nginx Proxy Manager

    门槛极低,操作简单,不需要你掌握很复杂的 Nginx 配置知识,只需要几步就能很轻松完成反向代理的设置和 SSL 证书的部署。

    it had to be so easy that a monkey could do it.

    开始部署

    服务器环境:Debian 10(Ubuntu 20.04 也可以)或以上版本

    登陆服务器

    不建议用 CentOS,具体原因请见:解释使用 Debian 而不是 CentOS 的原因

    选择一款连接 SSH 的软件。

    如果不会可以看这个文档:连接 SSH 的软件和相关操作

    Mac 或者 Linux 用户可以直接用系统自带的终端(也叫 Terminal)来登陆服务器。

    输入:

    BASH

    ssh 你的用户名@你的服务器IP -P 22
    

    如果你没有更改 ssh 的端口,默认就是 22,当然为了服务器安全,建议你可以换一个别的端口,具体请见:保护好你的小鸡!保姆级服务器安全教程!

    添加 SWAP 虚拟内存

    注意:VPS 的内存如果过小,建议设置一下 SWAP,一般为内存的 1-1.5 倍即可,可以让系统运行更流畅!

    设置 SWAP 可以用脚本:

    BASH

    wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
    

    image-20220528185512488

    选择 18,然后输入你想要扩容的数值即可。

    image-20220528185604586

    升级 packages

    BASH

    sudo -i # 切换到 root 用户
    
    apt update -y  # 升级 packages
    
    apt install wget curl sudo vim git -y  # Debian 系统比较干净,安装常用的软件
    

    安装 Docker 环境

    安装 Docker(非大陆服务器)

    BASH

    wget -qO- get.docker.com | bash
    

    BASH

    docker -v  #查看 docker 版本
    

    BASH

    systemctl enable docker  # 设置开机自动启动
    
    安装 Docker-compose(非大陆服务器)

    BASH

    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    

    BASH

    sudo chmod +x /usr/local/bin/docker-compose
    

    BASH

    docker-compose --version  #查看 docker-compose 版本
    
    安装 Docker(国内服务器)

    BASH

    curl -sSL https://get.daocloud.io/docker | sh
    

    BASH

    docker -v  #查看 docker 版本
    

    BASH

    systemctl enable docker  # 设置开机自动启动
    
    安装 Docker-compose(国内服务器)

    BASH

    curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    chmod +x /usr/local/bin/docker-compose
    
    docker-compose --version  #查看 docker-compose 版本
    
    修改 Docker 配置(可选)

    内容参考:烧饼博客

    以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训):

    BASH

    cat > /etc/docker/daemon.json < 

    然后重启 Docker 服务:

    BASH

    systemctl restart docker
    

    安装 Nginx Proxy Manager

    创建安装目录

    创建一下安装的目录:

    BASH

    sudo -i
    
    mkdir -p /root/data/docker_data/npm
    
    cd /root/data/docker_data/npm
    

    这边我们直接用 docker 的方式安装。

    BASH

    vim docker-compose.yml
    

    英文输入法下,按 i

    YAML

    version: '3'
    services:
      app:
        image: 'jc21/nginx-proxy-manager:latest'
        restart: unless-stopped
        ports:
          - '80:80'  # 保持默认即可,不建议修改左侧的80
          - '81:81'  # 冒号左边可以改成自己服务器未被占用的端口
          - '443:443' # 保持默认即可,不建议修改左侧的443
        volumes:
          - ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
          - ./letsencrypt:/etc/letsencrypt  # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
    

    按一下 esc,然后 :wq 保存退出,之后,

    打开服务器防火墙并访问网页(非必需)

    打开防火墙的端口 81

    举例,腾讯云打开方法如下:

    image-20220630215240864

    image-20220630220546335

    图中示例填的是 5230,备注填的是 memos,这边我们填 81,示例填 nginxproxymanager ,确定即可(如果你在 docker-compose 文件里换了 82,这边就需要填 82,以此类推)

    image-20220819145844555

    查看端口是否被占用(以 81 为例),输入:

    BASH

    lsof -i:81  #查看 81 端口是否被占用,如果被占用,重新自定义一个端口
    

    如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~

    如果出现:

    BASH

    -bash: lsof: command not found
    

    运行:

    BASH

    apt install lsof  #安装 lsof
    

    如果端口没有被占用(被占用了就修改一下端口,比如改成 82,注意 docker 命令行里和防火墙都要改)

    运行并访问 Nginx Proxy Manager

    最后:

    BASH

    cd /root/data/docker_data/npm   # 来到 dockercompose 文件所在的文件夹下
    
    docker-compose up -d 
    

    理论上我们就可以输入 http://ip:81 访问了。

    默认登陆名和密码:

    BASH

    Email:    admin@example.com
    Password: changeme
    

    注意:

    1、不知道服务器 IP,可以直接在命令行输入:curl ip.sb,会显示当前服务器的 IP。

    2、遇到访问不了的情况,请再次检查在宝塔面板的防火墙和服务商的后台防火墙是否打开对应了端口。

    更新 Nginx Proxy Manager

    BASH

    cd /root/data/docker_data/npm
    
    docker-compose down 
    
    cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive  # 万事先备份,以防万一
    
    docker-compose pull
    
    docker-compose up -d    # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
    
    docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
    

    提示:

    BASH

    WARNING! This will remove all dangling images.
    Are you sure you want to continue? [y/N] 
    

    输入 y

    利用 Docker 搭建的应用,更新非常容易~

    卸载 Nginx Proxy Manager

    BASH

    cd /root/data/docker_data/npm
    
    docker-compose down 
    
    rm -rf /root/data/docker_data/npm  # 完全删除映射到本地的数据
    

    可以卸载得很干净。

    最后

    NPM 的功能还有很多,预计还有两期,一期讲泛域名证书的配置,一期讲安全防护,这次只是简单介绍一下,大家可以发挥钻研精神,自己先研究研究。

    有了 NPM,可以统一管理,的确方便了很多,但总觉得还缺少点什么?有没有类似 NPM 这种有 UI 界面的工具,可以让我们直观地看到 Docker 的容器呢?Docker 容器如果也可以统一管理,查看状态就很棒,别急,下期给大家带来!

  • 相关阅读:
    SCAN BASIC --- PARTI basic and fault model
    Excel 快速填充
    GPT-4o模型到底有多强
    【微信小程序】最新隐私弹窗组件
    你在终端启动的进程,最后都是什么下场?(下)
    JAVA小游戏拼图
    关于websocket做即时通信功能
    TestOps、TestDev
    【多模态融合】TransFusion学习笔记(2)
    [RoarCTF 2019]Simple Upload
  • 原文地址:https://blog.csdn.net/u012995136/article/details/134431327