当前位置:首页 > 技术文章 > 正文内容

nginx -> frps -> frpc -> 内网服务器

arlanguage5个月前 (12-11)技术文章36

1. Nginx简介

概述

Nginx是一个高性能的HTTP和反向代理服务器,也可以作为邮件代理服务器。它以其高并发处理能力、低内存占用和高效的事件驱动模型而闻名。

其主要功能包括处理静态文件服务、反向代理、负载均衡等。例如,在处理大量的静态网页请求时,Nginx可以快速地将请求对应的静态文件发送给客户端,减少服务器的负载。

配置文件结构

Nginx的配置文件通常是以`.conf`为扩展名,主配置文件一般是`nginx.conf`。它采用层次化的配置结构,包括`http`、`server`和`location`等块。

例如,在`http`块中可以定义全局的HTTP服务器参数,如`server_names_hash_bucket_size`等参数来优化服务器名称的哈希表大小。在`server`块中,可以定义虚拟主机相关的内容,包括监听端口、域名等信息。而`location`块则用于匹配请求的URL路径,对不同的路径可以定义不同的处理规则,如`location / { root /var/www/html; }`就表示将根路径(`/`)的请求指向`/var/www/html`目录下的文件。

反向代理功能实现原理

当Nginx作为反向代理服务器时,它接收来自互联网客户端的请求,然后将这些请求转发到后端的真实服务器。客户端只知道反向代理服务器的IP地址和端口,并不清楚后端服务器的具体信息。

例如,假设客户端请求`http://example.com/api/data`,Nginx收到这个请求后,根据配置的后端服务器地址(如`http://backend server:8080/api/data`),将请求转发到后端服务器。后端服务器处理完请求后,将结果返回给Nginx,Nginx再将结果发送给客户端。

2. Frp简介

整体架构

Frp是一个可用于内网穿透的高性能的反向代理应用。它主要由两部分组成:frps(服务端)和frpc(客户端)。frps运行在具有公网IP的服务器上,frpc运行在内网服务器或者设备上。

例如,在一个企业内部网络中,有一些内部服务(如内部Web应用、数据库服务等)无法直接从公网访问。通过在公网服务器上部署frps,在内网服务器上部署frpc,就可以将内网服务暴露到公网。

工作原理

frps在公网服务器上监听指定的端口,等待frpc的连接。frpc在内网服务器上启动后,会主动连接frps,并建立一个隧道。

例如,当有外部请求发送到frps监听的端口时,frps会将请求通过已经建立的隧道转发给frpc,frpc再将请求转发给内网服务器上的相应服务。反之,内网服务器的响应也会通过这个隧道返回给frps,最终由frps发送给外部客户端。

3. Frps(服务端)配置和部署

安装

首先需要在具有公网IP的服务器上安装frps。可以从frp的官方网站(https://github.com/fatedier/frp/releases)下载适合服务器操作系统的版本。

例如,在Linux系统下,下载解压后,可以通过命令`./frps -c frps.ini`来启动frps,其中`frps.ini`是配置文件。

配置文件主要参数

`bind_port`:这是frps监听的端口,用于接收frpc的连接。例如,可以设置为`7000`,表示frps在公网服务器上监听`7000`端口,等待frpc连接。

`vhost_http_port`:如果要实现HTTP服务的穿透,这个参数用于设置HTTP服务监听的端口。假设设置为`8080`,当外部请求发送到公网服务器的`8080`端口时,会通过frp转发到内网的HTTP服务。

`token`:用于身份验证,保证只有授权的frpc可以连接frps。例如,设置一个复杂的字符串作为`token`,如`mysecretfrptoken`,frpc在连接时需要提供相同的`token`才能建立连接。

4. Frpc(客户端)配置和部署

安装

在内网服务器上安装frpc。同样可以从官方网站下载适合操作系统的版本。

例如,在Windows系统下,下载解压后,可以通过命令`frpc.exe -c frpc.ini`来启动frpc,其中`frpc.ini`是配置文件。

配置文件主要参数

`server_addr`:指定frps所在公网服务器的IP地址。例如,如果公网服务器的IP是`1.2.3.4`,则在`server_addr`参数中填写`1.2.3.4`。

`server_port`:填写frps监听的端口,要与frps配置文件中的`bind_port`一致。如frps的`bind_port`设置为`7000`,这里的`server_port`也应该设置为`7000`。

`token`:与frps配置文件中的`token`相同,用于身份验证。

`[proxy_name]`:这是一个自定义的代理名称。例如,`[http_proxy]`表示这是一个HTTP服务的代理配置。在这个代理配置块中,有参数如`local_ip`和`local_port`。`local_ip`是内网服务器上要穿透的服务的IP地址,`local_port`是该服务监听的端口。

假设内网有一个Web服务,IP地址是`192.168.1.100`,监听端口是`80`,则在`frpc.ini`中的`[http_proxy]`配置块可以这样写:

```ini

[http_proxy]

local_ip = 192.168.1.100

local_port = 80

remote_port = 8080

```

其中`remote_port`表示在公网服务器上通过frp转发后的端口,要与frps配置文件中的`vhost_http_port`相对应。

5. 内网服务器相关配置

服务监听地址和端口设置

内网服务器上的服务(如Web服务、数据库服务等)需要正确设置监听地址和端口。如果是只在内网使用的服务,监听地址可以是内网IP地址(如`192.168.1.100`)。

例如,对于一个基于Python的Flask Web服务,在启动代码中可以通过`app.run(host='192.168.1.100', port = 80)`来设置服务监听的地址和端口。

安全设置考虑

由于通过frp将内网服务暴露到了公网,需要加强安全措施。可以在内网服务器上设置防火墙规则,只允许frpc访问需要穿透的服务。

例如,在Linux系统下,可以使用`iptables`命令来设置规则,只允许来自frpc所在IP地址范围(如果可以确定)的请求访问内网服务的端口。同时,在frp的配置文件中,使用复杂的`token`进行身份验证,并且定期更换`token`,防止未经授权的访问。


通过以上步骤,就可以实现通过Nginx(如果需要进行HTTP相关的进一步处理,如负载均衡等可以使用Nginx)、frps、frpc来访问内网服务器上的服务。整个流程是一个完整的从公网访问内网服务的解决方案,其中frp起到了关键的内网穿透作用,Nginx可以作为辅助的反向代理或其他HTTP相关处理工具。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/86.html

分享给朋友:

“nginx -> frps -> frpc -> 内网服务器” 的相关文章

Nginx总结(八)启用Nginx Status及状态参数详解

前面讲了如何配置Nginx虚拟主机,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html今天简单介绍下如何监控Nginx的状态。其实要监控Nginx的状态非常简单,它内建了一个状态页,只需修改Ng...

一次说清-Nginx反向代理及参数配置

我们在配置服务时常常会用到Nginx来设置反向代理,虽然常用,但是我们真的了解各个参数的意思吗?不如我们一起来看下吧。1、反向代理反向代理(reverse proxy)方式是指用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给I...

【网络安全】关于PHP Study nginx解析高危漏洞的预警通报

网络安全近日,山石网科安全研究院监测发现PHPStudy Windows最新版本存在nginx解析漏洞,可以造成任意代码执行。一、漏洞情况phpStudy是一个PHP调试环境的程序集成包,该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装...

一般人绝对无法发现的nginx锅

nginx热启动:nginx -s reloadPS:要在/etc/profile环境变量PATH里配置nginx的路径。配置完执行 source /etc/profile 让变量生效。 一次部署,同样的前端代码,放到了nginx里面运行,但是有一个模块全部页面都报这个错误,其他模块正常展示。以前遇...

宝塔面板通过可视化界面来管理云服务器的运维软件

宝塔面板是专门给广大普通用户通过可视化界面来管理你的云服务器(Linux或者Window系统),节省操作服务器的时间和精力成本,可以一键安装和搭建网站,可以一键安装PHP运行环境,一键安装java运行环境,一键安装各种开发环境.普通人用的最多的就是搭建和部署网站.例如:宝塔面板是一款服务器管理软件,...

nginx-UrlRewrite 实现URL重写转发

URL重写在前后端分离的开发模式中,会遇到这样一个需求:前端通过特定路由前缀来访问后端接口,例如:http://localhost/api/getUser,这里 api 即是每一个前端 request 所多加的前缀。nginx 需要把http://localhost/api/getUser 转换成后...