【NPM】Nginx Proxy Manager 一键申请 SSL 证书,自动续期,解决阿里云SSL免费证书每3个月失效问题

news2024/12/24 10:19:09

文章目录

  • 1、NPM 简介
  • 2、实战
    • Step 1:环境搭建
      • 也可以看作者安装笔记
    • Step 2:创建容器
      • 2.1 在系统任意位置创建一个文件夹,此文档以`~/`nginx-proxy-manager为例。
      • 2.2 创建`docker-compose.yaml`
      • 2.3 启动NPM服务
    • Step 3:配置反向代理
      • 3.1 修改自己的用户名、邮箱、密码
      • 3.2 配置反向代理
    • Step 4:一键申请 SSL 证书
    • Step 5:转发到SpringBoot
      • 这个nginx配置文件做了以下几件事:
  • one more thing
    • 废话不多说上教程:(动画教程 + 图文教程)
    • 一、动画教程
      • 激活 与 升级(至最新版本)
    • 二、图文教程

1、NPM 简介

Nginx Proxy Manager 就是一个 Nginx 的代理管理器

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

NPM 项目地址:https://github.com/NginxProxyManager/nginx-proxy-manager

由于阿里云和华为云等免费证书的有效期从1年调整到3个月,不断的发邮件和短信提醒我证书到期,烦不胜烦,于是想着就用NPM来管理和自动更新SSL证书,一劳永逸的来解决这个问题

如果不使用NPM,用crontab的方式来定时更新Let’s Encrypt 免费 SSL证书也是可行的,但是需要安装一系列的软件,特别是编辑nginx的配置文件,虽然VIM用得溜,但依然不想在shell环境下去编辑nginx.conf配置文件,强迫的我需要各种对齐。

让我们开始吧

2、实战

Step 1:环境搭建

首先默认服务器已经安装好Docker和Docker-compose,如果不会,请查看下列说明:

Docker 安装文档:https://docs.docker.com/engine/install/
Docker Compose 安装文档:https://docs.docker.com/compose/install/

我推荐按照 Docker 官方文档安装 Docker 和 Docker Compose,因为部分 Linux 发行版软件仓库中的 Docker 版本可能过旧。

也可以看作者安装笔记

  • 点击进入

Step 2:创建容器

2.1 在系统任意位置创建一个文件夹,此文档以~/nginx-proxy-manager为例。

mkdir ~/nginx-proxy-manager && cd ~/nginx-proxy-manager

2.2 创建docker-compose.yaml

vi docker-compose.yml

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

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    network_mode: 'host'     # 网络采用host模式,docker和宿主机共享网络设置
    volumes:
      - ./data:/data         # .表示当前文件夹,:左边的意思是在当前文件夹下创建一个 data 目录,用于存放数据,如果不存在的话,会自动创建
      - ./letsencrypt:/etc/letsencrypt  # .表示当前文件夹,:左边的意思是在当前文件夹下创建一个letsencrypt目录,用于存放证书,如果不存在的话,会自动创建
      - /home/web/union-web:/home/web/union-web  # :左右表示宿主机和docker目当映射,同名即可
      - /home/web:/home/web    # :左右表示宿主机和docker目当映射,同名即可
    extra_hosts:
      - 'host.docker.internal:host-gateway'

2.3 启动NPM服务

docker-compose up -d
或
docker compose up -d   # 如果你用的是 docker-compose-plugin 的话,用这条命令

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

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

第一次登陆会提示更改用户名和密码,建议修改一个复杂一点的密码,并在不使用的时候从防火墙/安全组关掉81端口的访问权限。

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

Step 3:配置反向代理

3.1 修改自己的用户名、邮箱、密码

  • 登陆网页端之后,会弹出修改用户名和密码的对话框,我们根据自己的实际情况来修改自己的用户名和邮箱。

  • 修改为自己的实际邮箱和名称

  • 修改为强密码

3.2 配置反向代理

接下来我们可以给我们的SpringBoot后端服务配置一个反向代理了。

  • 点击Proxy Hosts

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

看起来有点复杂,但其实很简单,只要用到其中的几个功能即可,这边稍微解释一下:

  • Domain Names :填写网站的域名,首先记得做好 DNS 解析,把域名解析到服务器的 IP 上
  • Scheme :默认 http 即可,除非你有自签名证书
  • Forward Hostname/IP :填入服务器的 IP,**注意:**我们的Docker采用了host模式,共享宿主机网络,因此这里填写内网或真实的外网IP:127.0.0.1
  • Forward Port:填入映射出的端口,这边默认是 80
  • Cache Assets :缓存,配置时不要打开,打开后不能即时更新配置,容易怀疑自己
  • Block Common Exploits: 阻止常见的漏洞,可以选择打开
  • Websockets Support :WS 支持,可以选择打开
  • Access List: 这个是 NPM 自带的一个限制访问功能,暂时不用,后续可以自行研究。

以下为示例:

配置时不要打开 Cache Assets

这个配置其实只干了一件事,就是监听server_name的80端口。

Step 4:一键申请 SSL 证书

  • 接着我们来申请一张 SSL 证书,让我们的网站支持https访问。

如图所示,记得打开强制 SSL(Force SSL),其他四个的功能请自行研究,本文不多做介绍。

不出意外,你将成功申请到 SSL 证书,证书会三个月自动续期。

Step 5:转发到SpringBoot

接下来的才是干货,上边的部分网上都有介绍,正常情况,我们使用nginx一般用于前后端分流,NPM我认为其实更适合做多网站多域名的反代中转,话不多说,继续正题。

先看一下nginx的传统配置文件:

#user  nobody;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    use epoll;
    worker_connections 65535;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" $request_time';

    access_log  logs/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    client_header_buffer_size 16k;
    large_client_header_buffers 4 16k;
    client_max_body_size 800m;
    client_body_buffer_size 1024k;


    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;


    upstream union-api {
        server 127.0.0.1:8080;
    }


    server {
       listen 80;
       server_name www.test.com;
       root /home/web/;

       location / {
            proxy_pass   http://union-api;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /union-web {
            alias /home/web/union-web;
            index index.html;
            try_files $uri /union-web/index.html;
        }

        location ~.*\.(js|css|html|png|jpg)$ {
            expires    -1;
        }
    }
}

这个nginx配置文件做了以下几件事:

  1. 监听http://www.test.com的80端口
  2. 指定了root根目录为/home/web/
  3. location /,用proxy_pass转发到SpringBoot的8080端口
  4. location /union-web,前端的WEB界面,直接访问/home/web/union-web

以上是一个主域名前后端分离的配置文件,那么在NPM当中如何配置?

  • 点击 Edit Proxy Host,再点击Advanced标签页,如下图所示:

  • 将以下配置copy到Custom Nginx Configuration输入框中:
       root /home/web/;

       location / {
            proxy_pass   http://127.0.0.1:8080; #不用upstream的方式,直接写
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /union-web {
            alias /home/web/union-web;
            index index.html;
            try_files $uri /union-web/index.html;
        }

        location ~.*\.(js|css|html|png|jpg)$ {
            expires    -1;
        }
  • 如目录有变化请按需修改,如有二级域名,请采用添加多个proxy host的方式进行配置。

至此,你已经成功完成了NPM的反向代理,快尝试使用域名访问一下看看吧!

所有的配置,最终都会在~/nginxproxymanager/data/nginx/proxy_host/1.conf当中,可以通过这个配置文件反向来推导Custom Nginx Configuration的配置方式,Custom Nginx Configuration的配置都会写进server{}括号当中。

one more thing

程序员的烦恼

  • 为激活编程软件到处找激活码(JetBrains 全家通)
  • 苦于JetBrains 正版授权太贵而放弃
  • 学习资料贵且不成体系而躺平

关注公众号金榜探云手

你可以获得什么?

  1. JetBrains 最新激活码,永久更新(只供娱乐,切勿商用)
    公众号回复:00cs
  2. JetBrains 正版授权,全主题、全插件免费使用,一年一杯咖啡钱, 公众号回复:vip
  3. IT 技术视频共享(国内外全系列,只对粉丝开放)

付费版Idea百科全书,和Pycharm使用百科全书全部输出整理了,这些工具都掌握了对编码效率肯定是有本质上的提升,配合Github Copilot基本能让工具完成大部分开发工作,专注完成业务实现就好。

IDEA付费版使用百科全书
https://ziby0nwxdov.feishu.cn/docx/MiCfdogB4omIa9xlW50cByiGn5n

Pycharm付费版使用百科全书 https://ziby0nwxdov.feishu.cn/docx/DArFdVFQpomfUvxV7xZcCwXYn0c

废话不多说上教程:(动画教程 + 图文教程)

一、动画教程

激活 与 升级(至最新版本)

  • 激活
    请添加图片描述
  • 升级最新版本

请添加图片描述

二、图文教程

  • 点击进入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1660876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java入门基础学习笔记10——变量

变量的学习路径: 认识变量->为什么要用变量?->变量有啥特点?->变量有啥应用场景? 什么是变量? 变量是用来记住程序要处理的数据的。 变量的定义格式: 数据类型 变量名称 数据; 数…

JavaScript使用 BigInt

在 JavaScript 中,最大的安全整数是 2 的 53 次方减 1,即 Number.MAX_SAFE_INTEGER,其值为 9007199254740991。这是因为 JavaScript 中使用双精度浮点数表示数字,双精度浮点数的符号位占 1 位,指数位占 11 位&#xff…

NB-IoT电表抄表是什么?

1.技术性简述 NB-IoT是一种低功耗广域网络技术性,尤其适用于规模性联接、深层覆盖和低数据传输速率的使用场景,如远程控制电表抄表。相较于传统有线应无线通讯方法,NB-IoT具有更好的穿透性和更广的覆盖面积,即便在地下室或边远地…

纯 CSS 实现标签自动显示超出数量

现代 CSS 强大的令人难以置信。 这次我们来用 CSS 实现这样一个功能:有多个宽度不同的标签水平排列,当外层宽度不足时,会提示超出的数量,演示效果如下 如果让我用 JavaScript来实现估计都有点折腾,毕竟宽度都是动态的…

【vulhub靶场】Apache 中间件漏洞复现

【vulhub靶场】Apache 中间件漏洞复现 一、Apache HTTPD 换行解析漏洞(CVE-2017-15715)1. 漏洞详情2. 影响版本3. 漏洞复现 二、Apache多后缀解析漏洞(apache_parsing_vulnerability)1. 漏洞详情2. 漏洞复现 三、Apache HTTP Serv…

【CCF-CSP】202403-3 化学方程式配平

输入格式: 从标准输入读入数据。 输入的第一行包含一个正整数 n,表示需要判断的化学方程式的个数。 接下来的 n 行,每行描述了一个需要被配平的化学方程式。包含空格分隔的一个正整数和全部涉及物质的化学式。其中,正整数 m 表…

驱动开发-字符设备驱动的注册与注销

1.注册字符设备驱动 #include<fs.h> int register_chrdev(unsigned int major,const char *name,const struct file_operations *fops) 函数功能&#xff1a;注册字符设备驱动 参数&#xff1a;major&#xff1a;主设备号 major>0:静态指定主设备号&#xff0c;不…

创新指南|将会话式AI聊天机器人纳入PLG增长战略

想象一个繁荣的数字城市广场&#xff0c;志同道合的人们在这里分享他们的激情、经验和知识。想象一个将房东与旅行者、顾客与司机、人们与他们喜爱的品牌无缝连接起来的平台。在这个世界里&#xff0c;用户交流促进增长&#xff0c;社区成为推动力。 如果您的应用程序天生不符…

win10无法被远程桌面连接,Win10系统无法被远程桌面连接的原因有哪些

win10无法被远程桌面连接&#xff0c;Win10系统无法被远程桌面连接的原因有哪些&#xff1f; 先&#xff0c;我们需要明确Win10系统无法被远程桌面连接的可能原因。其中&#xff0c;最常见的原因包括&#xff1a;远程桌面功能未启用、网络连接问题、防火墙或安全软件设置不当、…

kubernetes删除命名空间下所有资源

kubernetes强制删除命名空间下所有资源 在 Kubernetes 中&#xff0c;当一个命名空间处于 Terminating 状态但不会完成删除过程时&#xff0c;通常是因为内部资源没有被正确清理。要强制删除这个命名空间及其所有资源&#xff0c;你可以采取以下步骤&#xff1a; 1. 确认命名空…

Rocketmq如何保证消息不丢失和幂等性

生产者 生产者通过RocketMQ提供的事务消息&#xff08;两阶段提交&#xff09;能保证消息的一致性。 第一阶段给Broker发送一个半事务消息&#xff0c;半事务消息是不能消费的消息&#xff0c;broker已经收到生产者发送的消息&#xff0c;但是并未收到生产者的二次确认&#x…

网络编程--tcp三次握手四次挥手

1、三次握手 &#xff08;1&#xff09;三次握手的详述 首先Client端发送连接请求报文&#xff0c;Server段接受连接后回复ACK报文&#xff0c;并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文&#xff0c;并分配资源&#xff0c;这样TCP连接就建立了。…

【计算机毕业设计】springboot果蔬种植销售一体化服务平台

伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对果蔬种植销售一体化服务管理进行规范而严格是十分有必要的&#xff0c;所以许许多多的 信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套果蔬种植销售一体化服务平台&…

【LLM 论文】Chain-of-Verification:通过验证链来减少 LLM 幻觉

论文&#xff1a;Chain-of-Verification Reduces Hallucination in Large Language Models ⭐⭐⭐ arXiv:2309.11495 论文速读 LLM 由于不可避免地会产生幻觉&#xff0c;现有的研究主要鼓励 LLM 在产生 response 之前生成内部思想的推理链&#xff0c;或者通过 self-critique…

FreeRTOS任务调度器

目录 1、什么是任务调度器 2、FreeRTOS中的任务调度器 2.1 抢占式调度 2.2 时间片调度 2.3 协作式调度 3、任务调度案例分析 3.1 实验需求 3.2 CubeMX配置 3.3 代码实现 3.3.1 uart.c 重定向printf 3.3.2 打开freertos.c并添加代码 3.3.4 代码现象 1、什么是任务调度…

苹果电脑免费第三方软件CleanMyMac X2025电脑版垃圾清理软件神器

Mac电脑用户在长时间使用电脑之后&#xff0c;时常会看到“暂存盘已满”的提示&#xff0c;这无疑会给后续的电脑使用带来烦恼&#xff0c;那么苹果电脑暂存盘已满怎么清理呢&#xff0c;下面将给大家带来一些干货帮你更好地解决这个问题。 CleanMyMac X2024全新版下载如下: h…

【C++】list的使用与模拟实现

&#x1f525;个人主页&#xff1a;北辰水墨 &#x1f525;专栏&#xff1a;C学习仓 本节内容我们来讲解list的使用和模拟实现。 本节难点&#xff1a;list迭代器的模拟实现。 一、list的介绍&#xff1a; 列表 列表是一种序列容器&#xff0c;允许在序列的任何位置进行时间复…

winform植物大战僵尸

winform植物大战僵尸 植物大战僵尸源码 半成品 需要的拿去学习 登陆注册选择关卡 向日葵 豌豆射手 双枪豌豆射手 项目获取&#xff1a; 项目获取&#xff1a;typora: typora/img (gitee.com) 备用项目获取链接1&#xff1a;yifeiyixiang/kamo: 源码下载 (github.com) 备用…

Python图形复刻——绘制母亲节花束

各位小伙伴&#xff0c;好久不见&#xff0c;今天学习用Python绘制花束。 有一种爱&#xff0c;不求回报&#xff0c;有一种情&#xff0c;无私奉献&#xff0c;这就是母爱。祝天下妈妈节日快乐&#xff0c;幸福永远&#xff01; 图形展示&#xff1a; 代码展示&#xff1a; …

一定行:从零起步进入Java世界

郑重声明&#xff1a;本篇博客唯一目的就是带你从零起步&#xff0c;成功编写并运行你的第一个Java应用。 零&#xff1a;先给祖师爷来上柱香 Java之父简介 英文名&#xff1a;James Gosling中文名&#xff1a;詹姆斯高斯林祖籍&#xff1a;加拿大出生年&#xff1a;1955照片…