当前位置: 首页 > news >正文

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:WindowsSystem32driversetchosts

192.168.10.250 wiki.frpshost.com

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

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

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

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

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

http://www.jsqmd.com/news/495215/

相关文章:

  • 山东一卡通线上回收靠谱吗?回收心得分享与平台推荐 - 团团收购物卡回收
  • 2026年辽宁石棉垫片好用品牌排名,专业石棉垫片加工厂推荐 - 工业推荐榜
  • 【ROS2】ROS 2 中 Content Filtering (内容过滤)的简介与使用
  • 告别网络依赖:完全离线的 AI 开发环境搭建指南
  • 【语音去噪】基于matlab融合小波变换和维纳滤波语音信号去噪(含SNR)【含Matlab源码 15192期】
  • 一部中短波发射机的一生——从出厂到退役的全生命周期成本
  • 性能测试时,通过查询数据库获取大量数据会影响整体的性能吗?
  • 搞定2026年生鲜促销图,我的经验是别直接套模板
  • AI 编程4:LangGraph 实战:动态并行 Worker 编排器模式,让 AI 多任务并行生成报告-test7
  • 〘 9-1 〙软考高项 | 第16章:项目采购管理(上)
  • 基于分解的多目标优化算法(MOEA/D) —— Matlab实现 测试函数包括:ZDT、DTL...
  • 电动压铆螺柱:高效安装,稳固可靠新选择
  • 大模型联网难题破解!数眼智能(DataEyes)全解析,5分钟解锁实时数据能力
  • 一键生成论文的软件推荐!2026年精选6款AI论文生成神器指南,为你打造高质量论文 - 掌桥科研-AI论文写作
  • 【嵌入式】外部中断的学习小坑记录
  • Git误删急救:30秒拯救你的代码
  • 深度解析贪心算法
  • 【程序员转型】开发者转型成为 AI 工程师指南,大模型入门到精通,收藏这篇就足够了!
  • 分析鲨鱼速装性价比好不好,和同行比价格贵不贵 - 工业设备
  • 8.4通过延迟补偿来提高实时性
  • 选 PyQt6 还是 PySide6?这可能是 Python GUI 开发中最“纠结”的问题
  • 3分钟搞定!OpenClaw 龙虾 + Kimi 联网搜索,小白也能上手
  • PHP搭建开发环境(Windows系统)
  • 2026年无锡碳纤维废气焚烧炉选购指南,源头厂家宜业环保分析 - mypinpai
  • 工厂生产 PLC ip 的都是一样的怎么才能避免冲突进行组网呢?
  • 全栈vue/react+node.js,云服务器windows部署全流程
  • 2026年实力强的聚氨酯瓦壳源头厂家排名,哪家更靠谱 - 工业推荐榜
  • 赛博朋克2077弹窗vcruntime140_1.dll丢失怎么办?安全修复步骤详解
  • 校园外卖软件
  • 代差级突破|2026 女性经期新选择:专属特殊膳食饮品深度评测