Administrator
发布于 2024-04-17 / 10 阅读
0
0

Nginx 和 Nginx Proxy Manager 的安装和使用(CentOS7)

一、介绍

Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,由俄罗斯 Rambler.ru 站点开发,源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。特点是占用内存小,并发能力强,能够支持高达 50000 个并发连接响应数。对于我个人的小站点来说,反向代理是我很需要,也是我选择它的原因。

Nginx Proxy Manager(NPM),顾名思义就是一个 Nginx 的代理管理器,它最大的特点是简单方便。即使是没有 Nginx 基础的小伙伴,也能轻松地用它来完成反向代理的操作,而且因为自带面板,操作极其简单,非常适合配合 docker 搭建的应用使用。Nginx Proxy Manager 后台还可以一键申请 SSL 证书,并且会自动续期,方便省心。

三、Nginx 安装

三、NPM 安装

说明:默认你的服务器已经安装了 Docker 和 Docker Compose,如果你没有安装,可以参考:docker 和 docker compose 搭建来进行安装。

点击下方链接进入 Nginx Proxy Manager(以下简称 NPM) 官网:https://nginxproxymanager.com/

我们可以直接选择 快速安装

首先,我们创建一个文件夹来存放 NPM 的 docker-compose.yml 文件:

mkdir -p ~/data/docker_data/nginxproxymanager   # 创建一个 npm 的文件夹

cd ~/data/docker_data/nginxproxymanager    # 进入该文件夹

vi docker-compose.yml

在英文状态的输入法下,按下 i,左下角出现 --INSERT-- 后,粘贴填入下面的内容:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'              # 不建议修改端口
      - '81:81'              # 可以把冒号左边的 81 端口修改成你服务器上没有被占用的端口
      - '443:443'            # 不建议修改端口
    volumes:
      - ./data:/data         # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 data 目录,用于存放数据,如果不存在的话,会自动创建
      - ./letsencrypt:/etc/letsencrypt  # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 letsencrypt 目录,用于存放证书,如果不存在的话,会自动创建

注意:安装了 NPM 之后,就不需要再安装 Nginx 了,否则会端口冲突(不建议修改 NPM 的 80、443 端口)。

之后,同样在英文输入法下,按一下 esc,然后 :wq 保存退出。

启动 NPM:

docker-compose up -d     # -d 表示后台运行

不出意外,此时你使用 http://127.0.0.1:81 就可以访问 NPM 的网页端了。(注意把 127.0.0.1 替换成你实际服务器的 IP)

默认登陆的用户名:admin@example.com 密码:changeme

至此,我们已经完成了 Nginx Proxy Manager 的搭建。

四、NPM 使用(反代 Halo 博客)

这里用 反代 Halo 博客来演示 NPM 的使用,Halo 博客的端口是 8090。

登陆 NPM 网页端,初次登录会让我们修改用户名、密码等。

点击 Proxy Hosts,接着点击Add Proxy Host,弹出如下对话框:

因为样例的 NPM 和 Halo 博客搭建在同一台 VPS 上,所以 IP 填写的是 Docker 网桥的 IP 地址 172.17.0.1

ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:06:ed:c8:10 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

当然,填写服务器的公网 ip 也是可以的。

五、一键申请 SSL 证书

域名绑定 SSL 证书,我们先来申请一张 SSL 证书,让我们的网站支持 https 访问。NPM 支持使用 Let's Encrypt 申请免费证书并自动续期。

至此,SSL证书申请完毕,并且网站也用上了https证书会三个月自动续期。

多域名证书申请

可以提前到 SSL Certificates 页面申请证书,创建 Proxy Host 转发的时候直接选择 SSL 证书就可以了。

如图,这个证书对应了多个域名,其中还有一个是泛域名。泛域名和基本域名(根域名)都指向同一个服务器(ip),这是很常见的一种情况,一个证书能支持多个域名,可以减少申请多个的成本和利于我们后期的维护。右上角,Add SSL Certificate,如图:

如示例,申请的域名只要包含泛域名,验证一定要 DNS 验证。而 DNS 验证需要云服务商(这里是阿里云)的 SDK 支持,各大主流的云服务的 DNS 都支持。

原理是通过 SDK 修改域名解析然后转发到 Let's Encrypt 的站点,转发成功表示域名归属的确是我的,验证通过。

需要登录阿里云后台获取 Access_key、Secret,如何获取请看本站点的另一篇文章SSL 免费证书申请和自动续期 。多域名,一个域名要验证一次 DNS,容易超时失败,我也是保存3、4次后才成功的。

六、遇到的问题

1、访问网址报错 “cert_date_error”,怎么处理?

编辑 proxy hosts | SSL | Force SSL,关开一下就恢复了。原因未知。

参考链接:https://docs.halo.run/getting-started/install/other/nginxproxymanager


评论