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;              # 拒绝其他 IPadd_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证书是不同的,可以点击查看证书内容

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

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

相关文章

zephyr移植到STM32

Zephy如何移植到单片机 1. Window下搭建开发环境1.1 安装Choncolatey1.2 安装相关依赖1.3创建虚拟python环境1.4 安装west1.4.1 使用 pip 安装 west1.4.2 检查 west 安装路径1.4.3 将 Scripts路径添加到环境变量1.4.4 验证安装 1.5 获取zephyr源码和[安装python](https://so.cs…

【分糖果——DFS】

题目 代码1 #include <bits/stdc.h> using namespace std; set<string> s; void dfs(int num1, int num2, int u, string ans) {if (u 7){if (num1 num2 > 5)return;ans (char)((num1) * 17 num2);s.insert(ans);return;}for (int i 0; i < num1; i){f…

【HarmonyOS】鸿蒙应用实现屏幕录制详解和源码

【HarmonyOS】鸿蒙应用实现屏幕录制详解和源码 一、前言 官方文档关于屏幕录制的API和示例介绍获取简单和突兀。使用起来会让上手程度变高。所以特意开篇文章&#xff0c;讲解屏幕录制的使用。官方文档参见&#xff1a;使用AVScreenCaptureRecorder录屏写文件(ArkTS) 二、方…

解决在VS2019/2022中编译c++项目报错fatal error C1189: #error : “No Target Architecture“

解决在VS2019/2022中编译c项目报错fatal error C1189: #error : “No Target Architecture” 报错原因 在winnt.h中&#xff0c;不言而喻&#xff0c;一目了然&#xff1a; 代码节选&#xff1a; #if defined(_AMD64_) || defined(_X86_) #define PROBE_ALIGNMENT( _s ) TY…

Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!

工欲善其事&#xff0c;必先利其器。 学习Python的第一步不要再加收藏夹了&#xff01;提高执行力&#xff0c;先给自己装好Python。 1. Python 下载 1.1. 下载安装包 既然要下载Python&#xff0c;我们直接进入python官网下载即可 Python 官网&#xff1a;Welcome to Pyt…

实现AVL树

目录 AVL树概念 AVL树结构 AVL树插入 LL型 - 右单旋 RR型 - 左单旋 LR型 - 左右双旋 RL型 - 右左双旋 插入代码实现 AVL树测试 附AVL树实现完整代码 AVL树概念 前面的博客介绍了搜索二叉树&#xff0c;二叉搜索树-CSDN博客 在某些特定的情况下&#xff0c;⼆叉搜索树…

极客说|微软 Phi 系列小模型和多模态小模型

作者&#xff1a;胡平 - 微软云人工智能高级专家 「极客说」 是一档专注 AI 时代开发者分享的专栏&#xff0c;我们邀请来自微软以及技术社区专家&#xff0c;带来最前沿的技术干货与实践经验。在这里&#xff0c;您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…

React+redux项目搭建流程

1.创建项目 create-react-app my-project --template typescript // 创建项目并使用typescript2.去除掉没用的文件夹&#xff0c;只保留部分有用的文件 3.项目配置&#xff1a; 配置项目的icon 配置项目的标题 配置项目的别名等&#xff08;craco.config.ts&…

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

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

obs directx11

创建逻辑 obs 在windows 下分为Opengl 和 directx 两种渲染模式&#xff0c;默认使用的是directx &#xff0c;兼容性更好&#xff1b; 代码路径&#xff1a; E:\opensrc\obs_studio_src\obs-studio\UI\obs-app.cpp 选择渲染模式 const char* OBSApp::GetRenderModule() con…

QT实现 端口扫描暂停和继续功能 3

上篇QT给端口扫描工程增加线程2-CSDN博客 为按钮pushButton_Stop添加clicked事件&#xff0c;功能为暂停扫描&#xff0c;并在暂停后显示继续按钮&#xff0c;点击继续按钮之后继续扫描 1.更新UI 添加继续按钮 点击转到槽则会自动声明 2. 更新 MainWindow.h 需要新增的部分…

nginx-限流(请求/并发量)

一. 简述&#xff1a; 在做日常的web运维工作中&#xff0c;难免会遇到服务器流量异常&#xff0c;负载过大等情况。恶意攻击访问/爬虫等非正常性请求&#xff0c;会带来带宽的浪费&#xff0c;服务器压力增大&#xff0c;影响业务质量。 二. 限流方案&#xff1a; 对于这种情…

分布式ID生成-雪花算法实现无状态

雪花算法这里不再赘述&#xff0c;其缺点是有状态&#xff08;多副本隔离时&#xff0c;依赖手动配置workId和datacenterId&#xff09;&#xff0c;代码如下&#xff1a; /*** 雪花算法ID生成器*/ public class SnowflakeIdWorker {/*** 开始时间截 (2017-01-01)*/private st…

Edge SCDN高效防护与智能加速

当今数字化时代&#xff0c;网络安全和内容分发效率已成为企业业务发展的关键因素。酷盾安全推出了Edge SCDN解决方案&#xff0c;为企业提供全方位的安全防护和高效的内容分发服务。 一、卓越的安全防护能力 1.DDoS攻击的精准防御&#xff1a;Edge SCDN具备强大的DDoS攻击检测…

在vscode上

第一步 安装插件 &#xff08;1&#xff09;从菜单处打开vscode&#xff0c;之后点击左侧“拓展”&#xff0c;在搜索栏输入“platform”&#xff0c;安装这个插件。 注&#xff1a;安装过程可能会慢一点&#xff0c;可以尝试连接自己的热点 &#xff08;2&#xff09;安装完…

产品心、用户脑、押重注......解读vivo穿越周期之道

出品 | 何玺 排版 | 叶媛 国内科技企业中&#xff0c;vivo绝对算个“异类”。给人以平和谦逊、稳健踏实的印象&#xff0c;却极具实力&#xff01; 回望vivo发展历程&#xff0c;这家拥有近30年历史的超大型全球化产业科技生态型公司&#xff0c;从功能机到智能机一路走来&am…

jenkins入门4 --window执行execute shell

1、启动关闭jenkins 在Windows环境下&#xff0c;如果你需要关闭Jenkins服务&#xff0c;可以通过以下几种方式&#xff1a; 1、使用Windows服务管理器&#xff1a; 打开“运行”对话框&#xff08;Win R&#xff09;&#xff0c;输入services.msc&#xff0c;然后回车。 在服…

矩阵碰一碰发视频源码搭建全解析,支持OEM

在数字化营销与互动体验需求日益增长的当下&#xff0c;矩阵碰一碰发视频功能以其独特的交互性和高效的信息传播能力&#xff0c;正逐渐成为吸引用户、提升品牌影响力的有力工具。本文将深入探讨如何搭建矩阵碰一碰发视频的源码&#xff0c;帮助开发者实现这一创新功能。 一、技…

软件确认测试和验收测试有什么区别?

在当今快速发展的软件行业中&#xff0c;软件确认测试与验收测试是软件产品生产周期中的重要步骤&#xff0c;但很多人容易混淆&#xff0c;那么这两者之间究竟有什么区别呢? 软件确认测试是一个旨在确保软件产品符合用户需求规格的过程。它对软件的功能、性能和可用性进行深…

cat命令详解

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