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

server/2025/2/9 0:10:53/

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

https://i-blog.csdnimg.cn/direct/27c9aa0c55524e8bbfbc4fc20bfe53e0.png" alt="" />

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

一、VPS的配置

nginxfrp_13">1. vps需要安装nginx和frp

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

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

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

2. 命令行操作

nginx_23">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的配置

nginx_68">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/ 目录中。

nginx_124">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;
}
}

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

192.168.10.250 wiki.frpshost.com

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

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

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

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

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

https://i-blog.csdnimg.cn/direct/c1b1b387ad9e460fa595f7c2acd2b360.png" alt="" />


http://www.ppmy.cn/server/166065.html

相关文章

【实用技能】如何将 Web 视图添加到 Compose Multiplatform 应用程序

Compose Multiplatform 是一个用于在桌面、网络和移动设备上创建用户界面的框架。它扩展了 Android 的 Jetpack Compose,并允许您使用熟悉的 API 为 iOS 和桌面开发应用。 JxBrowser 是一个商业 Web 视图组件。它基于 Chromium,也可用于 Swing、JavaFX …

MySQL系列之身份鉴别(安全)

导览 前言Q:如何保障MySQL数据库身份鉴别的有效性一、有效性检查 1. 用户唯一2. 启用密码验证3. 是否存在空口令用户4. 是否启用口令复杂度校验5. 是否设置口令的有效期6. 是否限制登录失败尝试次数7. 是否设置(超过尝试次数)锁定的最小时长…

snort的学习记录

一、what is snort?什么是snort? Snort 是一款开源的 网络入侵检测系统(NIDS) 和 网络入侵防御系统(NIPS),能够实时监控网络流量,检测恶意行为(如端口扫描、SQL注入、DDoS攻击等&a…

pytorch ReSet18模型

import torch import torch.nn as nn from torchsummary import summary class Residual(nn.Module): def init(self,in_channel,out_channel,use_1conv False,strides1): super(Residual,self).init() self.Relu nn.ReLU() #################conv1和CONV2的 stride必须是相…

深度学习-第五章机器学习基础

前言 5.1 学习算法 5.1.1 任务 5.1.2 性能度量 5.1.3 经验 5.1.4 示例: 线性回归 5.2 容量、过拟合和欠拟合 5.2.1 没有免费午餐定理5.2.2 正则化 5.3 超参数和验证集 5.3.1 验证集的作用5.3.2 交叉验证 5.4 估计、偏差和方差 5.4.1 点估计5.4.2 偏差5.4.4 权衡偏差和方差以…

Docker在安装时遇到的问题(第一部分)

一、在用docker-config-manager安装yum源时出现错误 [rootlocalhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 已加载插件:fastestmirror, langpacks adding repo from: https://download.docker.com/linux/ce…

【React】路由处理的常见坑与解决方法,React Router 的动态路由与懒加载问题

在使用 React Router 时,动态路由和懒加载是非常常见的需求,但也可能会遇到一些坑。以下是常见问题以及对应的解决方法。 一、React Router 动态路由常见问题 1. 动态路由匹配问题 动态路由通常通过 :param 定义路径参数,但如果路径参数与静态路由有重叠,可能会导致匹配问…

SpringCloudGateWay和Sentinel结合做黑白名单来源控制

假设我们的分布式项目,admin是8087,gateway是8088,consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目,那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以&#xff1…