Nginx与frp结合实现局域网和公网的双重https服务

背景: 因为局域网内架设了 tiddlywiki、 Nextcloud 等服务,同时也把公司的网站架设在了本地,为了实现局域网直接在局域网内访问,而外部访问通过frps服务器作为反向代理的目的,才有此内容。 实现的效果如下图琐事

不喜欢废话,这里直接贴代码,有需要的更改关键信息的内容即可。

一、VPS的配置

1. vps需要安装nginx和frp

nginx的安装教程比较多,这里不详细介绍, frps 服务的安装通过gofrp.org 自行学习即可,也可参考我之前的几篇文章:

frp透传软件最新toml格式的配置文件的使用_frp toml-CSDN博客

使用frp0.61.0透传局域网的https服务到自有域名_frp 0.61-CSDN博客

2. 命令行操作

2.1 安装nginx

apt update
apt install nginx

2.2 安装frps,编写配置内容

wget https://download.frp.org/frp0.61.1.tar.gz
tar -zxvf frp0.61.1.tar.gz
cd frp0.61.1/
cp frps /usr/bin/
mkdir -p /etc/frp
cp frps.toml /etc/frp/
vim /etc/frp/frps.toml
## 内容如上图,如下面的文字
bindPort = 6776
vhostHTTPSPort = 35443
vhostHTTPPort = 8080

2.3 启用systemd服务管理frps

vim /etc/systemd/system/frps.service 
## 内容如下面的文字

[Unit]
Description=Frp Server Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/bin/frps -c /etc/frp/frps.toml

[Install]
WantedBy=multi-user.target

让frps 服务开机自启动

systemctl start frps
systemctl status frps
systemctl enable frps

二、 局域网Server的配置

1.局域网服务器也要安装nginx

2. 假设我们搭建了tiddlywiki服务,并使用34580端口提供服务

相关的安装可参考我的文章:

Debian12中搭建TiddlyWiki服务并进行配置-CSDN博客

相较链接中的内容,我们这次不直接为tiddlywiki 开启ssl,而是通过nginx来通过自有签名来进行加密,提供https服务。

关于自签名证书,可以参考我的文章:

创建包含可导入浏览器信任的SSL自签名证书_浏览器信任证书-CSDN博客

3. tiddlywiki 的 systemd配置文件 

/etc/systemd/system/wiki.service 
## 内容如下


[Unit]
Description=Start the TiddlyWiki Server
After=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=10s
ExecStart=/usr/local/bin/tiddlywiki /home/wiki --listen host=0.0.0.0 port=34580  credentials="/etc/wiki/users.csv" "readers=(anon)" "writers=(authenticated)"

LimitNOFILE=1048779
 
[Install]
WantedBy=multi-user.target

4. frpc服务的配置

vim /etc/frp/frpc.toml 

##内容如下

serverAddr = "www.frpshost.com"
serverPort = 6776

[[proxies]]
name = "web-wiki"
type = "http"
localPort = 34580
customDomains = ["wiki.frpshost.com"]

三、 Nginx的配置-VPS和局域网Server都需要配置

1. 自签名证书

为了更清晰的体现效果,我们构建来两套自签名证书,webA在VPS中使用,webB在局域网中使用; 位置都在各自的 /home/SSL/ 目录中。

2.VPS中nginx的配置

vim /etc/nginx/conf.d/wiki.conf 
## 内容如下面的文字


## 第一个 server 用于将http://wikifrpshost.com重定向到 https://wikifrpshost.com
server {
        listen      80 ;  
        listen      [::]:80 ;
        server_name wiki.frpshost.com;
		        location / {
	        return 301 https://$host$request_uri;

		       	}
    }

## 第二个 server 用于为来自局域网Server的http服务,添加SSL证书进行加密
server {
    listen 443 ssl;
    listen [::]:443 ssl;
 
    server_name wiki.frpshost.com;

    index index.html;
    
    ssl_certificate /home/SSL/webA.crt;
    ssl_certificate_key /home/SSL/webA.key;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        ## 局域网tiddlywiki用34580端口提供http服务,被frpc转发到了VPS上的vhosthttp端口,frps居中协调这一过程,因此下面的端口号是frps提供vhosthttp服务的端口号8080 !!
        proxy_pass http://127.0.0.1:8080/;   
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
        client_max_body_size 0;

        access_log /var/log/nginx/wiki.access.log;
        error_log /var/log/nginx/wiki.error.log;
}
}

3.局域网Server中nginx的配置

vim /etc/nginx/conf.d/default.conf 
## 内容如下面的文字

server {
    listen 443 ssl;
    listen [::]:443 ssl;
 
    server_name wiki.frpshost.com;

    index index.html;
    
    ssl_certificate /home/SSL/webB.crt;
    ssl_certificate_key /home/SSL/webB.key;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        ## 下面的行自带端口号,同时后面要有 / ,这样就可以只输入域名,不用带端口号了!!
        proxy_pass http://127.0.0.1:34580/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

    # 仅允许特定 IP 访问
	        allow 192.168.10.251;
	        allow 192.168.10.252;
	        allow 223.141.169.242; ## 不能忘记VPS服务器,否则公网无法访问!!
	        deny all;              # 拒绝其他 IP

        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; 
        preload";
        client_max_body_size 0;

        access_log /var/log/nginx/wiki.access.log;
        error_log /var/log/nginx/wiki.error.log;
    }
}

# 配置在局域网中,HTTP到HTTPS的重定向
server {
    listen 80;
    server_name wiki.frpshost.com ;

    location / {
        return 301 https://$host$request_uri;
    }
}

四、 局域网PC的配置

要想局域网内的pc直接在局域网内通过域名访问wiki服务,而不用通过公网再绕回来,就需要有局域网DNS服务器将 wiki.frpshost.com指向 192.168.10.250; 或者更直接的办法,修改windows11等操作系统上的host文件,添加一行内容即可。  

C:\Windows\System32\drivers\etc\hosts

192.168.10.250    wiki.frpshost.com

当然,要先为host文件设定用户权限,然后才可以编辑。 相关教程用搜索引擎搜索即可

五、多个服务的代理和转发 

如果局域网Server上有多种服务,则需要在frpc.toml 中,为每一个服务指定转发端口和二级域名; 同时,VPS上也最好为每一个服务单独建一个nginx配置文档,便于管理。

还可以用crtrobt申请正式的SSL证书。

经过这一系列操作,无论是公网访问wiki.frpshost.com还是在局域网内访问,都会自动转换为https,且两种环境下所采用的SSL证书是不同的,可以点击查看证书内容

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PDFelement 特别版

Wondershare PDFelement Pro 是一款非常强大的PDF编辑软件,它允许用户轻松地编辑、转换、创建和管理PDF文件。这个中文特别版的软件具有许多令人印象深刻的功能,PDFelement Pro 提供了丰富的编辑功能,可以帮助用户直接在PDF文件中添加、删除、…

SPSS实现中介效应与调节效应

1. 中介效应 SPSS 实现 本例研究的自变量(X) “工作不被认同”;中介变量(M)为“焦虑”,因变量(Y)为“工作绩效”。探讨焦虑是否在工作不被认同与工作绩效间的作用。 (2&…

Spring 复习笔记

文章目录 Spring IoC / DISpring IoC / DI 核心概念Spring 组件管理概念Spring IoC / DI 概念Spring Ioc 容器具体接口和实现类Spring Ioc 的管理方式 基于 XML 方式管理 BeanSpring IoC/ / DI 实现步骤第一步:导入依赖配置元数据第二步:实例化 IoC 容器…

免费GEMINI模型使用及API调用

一、概述 谷歌最新发布的Gemini 2.0 FLASH模型为AI应用带来了新的可能性。该模型分为两个版本:gemini-2.0-flash-exp 和 gemini-2.0-flash-thinking-exp-1219。这两个模型目前限时免费使用,用户可以通过智匠MindCraft客户端或小程序直接体验,…

探索 ES6 Set:用法与实战

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

《探秘计算机视觉与深度学习:开启智能视觉新时代》

《探秘计算机视觉与深度学习:开启智能视觉新时代》 一、追溯起源:从萌芽到崭露头角二、核心技术:解锁智能视觉的密码(一)卷积神经网络(CNN):图像识别的利器(二&#xff0…

HTML+CSS+JS制作高仿小米官网网站(内附源码,含6个页面)

一、作品介绍 HTMLCSSJS制作一个高仿小米官网网站,包含首页、商品详情页、确认订单页、订单支付页、收货地址管理页、新增收获地址页等6个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。 二、页面结构 1. 顶部导航栏 包含Logo、主导航菜…

ssl证书免费申请指南!一行命令,一分钟搞定SSL证书自动续期。

一行命令,一分钟轻松搞定SSL证书自动续期。 快速开始 ​一行命令,一分钟轻松搞定SSL证书自动续期。 适合nginx配置过SSL证书的用户,如果是第一次配置SSL证书,请参考手把手教程 一、安装httpsok 登陆PC控制台 👉 &…

cat命令详解

cat 是 Linux/Unix 中的一个非常常用的命令,主要用于 连接 文件并显示文件内容。它的名称来源于 concatenate(连接),不仅可以查看文件内容,还能将多个文件合并为一个文件,或用作其他数据流操作。 以下是对 …

【Linux】Linux命令

目录 ​编辑 系统维护命令 man man:查看 man 手册 sudo passwd 用户名:修改用户密码 su:切换用户 echo ”输出内容“:向终端输出内容,默认换行 date查看当前系统的日期 clear:清屏 df -Th /df -h&…

优化算法---遗传算法

目录 一、基本定义1.1 遗传与变异1.2 进化 二、算法简介2.1 基本原理2.2 算法步骤2.3 算法案例2.3.1 最大值求解2.3.2 旅行商问题求解 2.4 算法优缺点 优化算法—模拟退火算法 优化算法—遗传算法 一、基本定义 遗传算法(Genetic Algorithm,GA)是模仿自然界生物进化机制发展起来…

匠人天工Ai浮雕网站创新发布了ZBrush插件,提效500%,为AI+数字雕刻行业带来新的活力

2025年1月6日,杭州——杭州仓颉造梦数字科技公司旗下产品匠人天工近日宣布推出一款创新的ZBrush插件,旨在为AI数字雕刻行业带来前所未有的效率提升。该插件通过一系列智能化功能,大幅简化了数字雕刻的建模流程,使建模效率提高了50…

NV256H语音提示芯片助力自动洗车机更加智能化!

汽车保养是每位车主日常生活中不可或缺的一部分,而洗车作为保养的基本环节,其便捷性和智能化程度正逐渐成为消费者选择的重要考量。在这样的背景下,全自动洗车机应运而生,并被广泛应用于汽车美容行业。 因为是全自动洗车模式&…

NLP CH3复习

CH3 3.1 几种损失函数 3.2 激活函数性质 3.3 哪几种激活函数会发生梯度消失 3.4 为什么会梯度消失 3.5 如何解决梯度消失和过拟合 3.6 梯度下降的区别 3.6.1 梯度下降(GD) 全批量:在每次迭代中使用全部数据来计算损失函数的梯度。计算成本…

关于蔬菜商品的预测定价计算【数值计算课设】

源码+报告 下载链接在文章末尾。 文章目录 源码+报告蔬菜类商品的自动定价与补货决策1 引 言2 题目描述3 问题解决3.1 模型的建立与求解3.2 算法3.2.1 非线性算法3.2.2 ARMA算法3.2.3 粒子群算法4 结论参考文献下载链接蔬菜类商品的自动定价与补货决策 [摘 要] 蔬菜商品的补货…

adb使用及常用命令

目录 介绍 组成 启用adb调试 常用命令 连接设备 版本信息 安装应用 卸载应用 文件操作 日志查看 屏幕截图和录制 设备重启 端口转发 调试相关 设置属性 设备信息查询 获取帮助 模拟输入 介绍 adb全称为 Android Debug Bridge(Android调试桥),是 A…

y7000p2023AX211ubuntu20无线网卡驱动

网卡检测 查看无线网卡驱动,本教程适用的网卡为Intel Corporation Device[8086:51f1],即AX211 lspci -nn | grep Net这里的Ethernet controller是有线网卡,Network controller是无线网卡,Intel corporation Device指英伟达网卡对应的设备号是[8086:51f1]…

链表OJ题(一)

(一)轮转数组 . - 力扣(LeetCode) 题目描述:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例一: 方法一:暴力求解 先用一个变量存储数组中的最后…

Python如何精准定位并修改MP4文件的mvhd原子

深入了解MP4文件的结构对于安全地修改元数据非常重要。MP4文件采用基于原子(atom)的结构组织数据,每个原子代表一种特定的信息或数据块。例如,moov原子包含了视频的元数据信息,mvhd原子包含了视频的头信息,…

[SMARTFORMS] 系统变量的使用

在PAGE1页面节点下创建WINDOW5窗口 填写WINDOW5窗口描述以及位置,大小等相关信息 在WINDOW5窗口节点下新建TEMPLATE模板 为TEMPLATE模板设置行列相关信息 在TEMPLATE模板节点下面新增3个TEXT文本 每个TEXT文本的内容如下所示: %TEXT25 打印日期文本内容 …