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

文章目录

  • 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-stoppednetwork_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.mzph.cn/bicheng/9888.shtml

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

相关文章

搭建知识库必备:12个开源 Wiki 软件工具盘点

在任何成功的公司中,部门间的知识共享是至关重要的。如果没有一个简单的信息交流方法,团队怎样才能有效合作呢?Wiki软件提供了一种创建、组织及在全公司范围内分享知识的直接方法。但是,哪一种Wiki软件是最佳的选择呢?…

给网络镜像模式下的 WSL2 使用 127.0.0.1代理的方法

网络镜像模式下的WSL2虽然复制了宿主机windows的ip,但是仍然无法访问127.0.0.1的代理。经过调查,发现因为WSL2从应用商店下载而来,所以可能是UWP应用,所以需要用工具解除环回代理限制。

Java入门基础学习笔记13——数据类型

数据类型的分类: 基本数据类型 引用数据类型 基本数据类型:4大类8种类型: 定义整形用int,再大的数用long。 package cn.ensource.variable;public class VariableDemo2 {public static void main(String[] args) {//目标&#x…

Android11 InputDispatcher 分发事件流程分析

在 Android11 InputReader分析 一文中分析到,InputReader将数据放入iq队列后,唤醒InputDispatcher线程,执行InputDispatcher的dispatchOnce方法 //frameworks\native\services\inputflinger\dispatcher\InputDispatcher.cpp void InputDispa…

【js】将一维数组处理成树形数据并且实现模糊查询

项目中由于数据量不大,后台并未做处理,因此前端拿到返回的Table数据需要处理成树形数据再渲染到表格中 原始数据 const dataList[{"id": 44,"seedlingName": "测试2","seedlingType": "测试2",&quo…

一文读懂开源大数据OLAP

企业需要从海量数据中提取有价值的信息,以支持决策制定和提高运营效率,数据已成为企业最宝贵的资产之一。OLAP(在线分析处理)技术,作为数据仓库解决方案的核心组成部分,提供了一种强大的工具,帮…

java-springboot项目添加swagger2/Knife4j,附注解

文章目录 添加依赖config工作包中新增SwaggerConfig报错注解 环境&#xff1a; jdk1.8 java8 springboot2.6.13 swagger2.9.2 添加依赖 pom.xml <!-- 添加swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfo…

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

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

基于springboot+mybatis+vue的项目实战之页面参数传递

如图所示&#xff0c;删除操作可以用按钮实现&#xff0c;也可以用超链接来实现。 1、第一种情况&#xff0c;用按钮实现。 html页面相关&#xff1a; <button type"button" click"deleteId(peot.id)">删除</button> <script>new Vue(…

【算法与数据结构】数组

文章目录 前言数组数组的定义数组的基本操作增加元素删除元素修改元素查找元素 C STL 中的数组arrayvector Python3 中的列表访问更改元素值遍历列表检查列表中是否存在某元素增加元素删除元素拷贝列表总结 Python3 列表的常用操作 参考资料写在最后 前言 本系列专注更新基本数…

从0开始Jmeter接口测试实战

在之前的文章中给大家介绍过接口测试文档和接口测试用例示例&#xff0c;本文基于Jmeter工具给大家介绍一下如何实现接口测试用例&#xff1a;包括发起Http请求&#xff0c;绕过登陆&#xff0c;验证响应。JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架…

Leetcode—2105. 给植物浇水 II【中等】

2024每日刷题&#xff08;131&#xff09; Leetcode—2105. 给植物浇水 II 实现代码 class Solution { public:int minimumRefill(vector<int>& plants, int capacityA, int capacityB) {int size plants.size();int i 0;int j size - 1;int capA capacityA;in…

【Linux】Linux安装JDK

一、卸载Linux自带的JDK #查询已有的JDK rpm -qa | grep jdk ①将查询到的JDK全部卸载掉 #直接复制一整行的JDK名称 yum -y remove java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64 ②卸载完第一个后再次查询 ③继续卸载&#xff0c;卸载完成后再次查询 ④查询…

Flask-大体了解介绍

初识Flask Flask是使用 Python编写的Web微框架。Web框架可以让我们不用关心底层的请求响应处理&#xff0c;更方便高效地编写Web程序。 Flask主要有两个依赖&#xff0c;一个是WSGI&#xff08;Web Server Gateway Interface&#xff0c;Web服务器网关接口&#xff09;工具集…

ICode国际青少年编程竞赛- Python-4级训练场-太阳能板1

ICode国际青少年编程竞赛- Python-4级训练场-太阳能板1 1、 Dev.step(3) Dev.turnRight() Dev.step(2) while Dev.energy < 60:wait() Dev.step(-6)2、 Dev.step(7) while Dev.energy < 90:wait() Dev.step(-1) Dev.turnRight() Dev.step(7)3、 Dev.step(4) Dev.turn…

区块链 | NFT 水印:Review on Watermarking Techniques(三)

&#x1f34d;原文&#xff1a;Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 一个 NFT 的水印认证协议 可以引入第三方实体来实现对交易的认证&#xff0c;即通过使用 R S A \mathsf{RSA} RSA…

(十)JSP教程——config对象

config对象是脚本程序配置对象&#xff0c;表示当前JSP页面的配置信息。由于JSP页面通常无需配置&#xff0c;因此该对象在JSP页面中比较少见。 config对象可以读取一些初始化参数的值&#xff0c;而这些参数一般在web.xml配置文件中可以看到&#xff0c;并通过config对象的相应…

国内护眼台灯品牌哪些实用?推荐五款物美价廉的台灯品牌

近年来&#xff0c;我们注意到儿童近视的现象呈现出增多且趋于低龄化的趋势。这一变化&#xff0c;部分原因可以归咎于孩子们越来越多地使用电子产品&#xff0c;另一部分则与他们面临的学业压力增加有关。鉴于此&#xff0c;家长们在挑选儿童学习用品时变得格外谨慎&#xff0…

Sqli-labs第五~八关(布尔盲注)

目录 首先找到他们的闭合方式 操作 总结&#xff1a; 第五关根据页面结果得知是字符型但是和前面四关还是不一样是因为页面虽然有东西。但是只有对于请求对错出现不一样页面其余的就没有了。这个时候我们用联合注入就没有用&#xff0c;因为联合注入是需要页面有回显位。如果…

鸿蒙开发接口Ability框架:【@ohos.application.Want (Want)】

Want Want模块提供系统的基本通信组件的能力。 说明&#xff1a; 本模块首批接口从API version 8 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import Want from ohos.application.Want; 开发前请熟悉鸿蒙开发指导文档&#xff1…