使用frp(Fast Reverse Proxy)实现内网穿透是一个有效的方法,允许你通过具有公网IP地址的服务器A访问在没有公网IP地址的服务器B上运行的Django项目。以下是一步步指导:
第1步:下载frp
首先,在服务器A(作为frp服务端,frps)和服务器B(作为frp客户端,frpc)上下载相应的frp版本。你可以从frp的GitHub发布页面下载最新版本。选择与你服务器操作系统相匹配的版本下载。
以X86_64 Linux为例:
下载
1
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
第2步:配置frp服务端(服务器A)
-
解压下载的文件:在服务器A上,解压下载的frp压缩包。使用命令行工具,可以使用以下命令(以特定版本为例,确保命令中的版本号与你下载的版本匹配):
1 2 3
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz tar -xzf frp_*.tar.gz cd frp_*/
-
编辑frps.toml文件:在解压的文件夹中,找到
frps.toml
文件并用文本编辑器打开,设置如下:1 2 3
# frps.toml bindPort = 7070 vhostHTTPPort = 7071
这里
7070
是frps监听的端口,你可以根据需要选择其他端口;7071
是服务器A监听http的端口 -
防火墙放行端口:(以centos为例)
1 2 3
sudo firewall-cmd --permanent --add-port=7070/tcp sudo firewall-cmd --permanent --add-port=7071/tcp sudo firewall-cmd --reload
-
启动frps服务:在解压的frp文件夹中,运行以下命令启动frps:
1
./frps -c ./frps.toml
第3步:配置frp客户端(服务器B)
-
解压下载的文件:和在服务器A上的操作类似,在服务器B上解压frp压缩包,并进入解压后的目录。
1 2 3
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz tar -xzf frp_*.tar.gz cd frp_*/
-
编辑frpc.ini文件:在解压的文件夹中,找到或创建
frpc.ini
文件并用文本编辑器打开,然后配置如下:1 2 3 4 5 6 7 8 9
# frpc.toml serverAddr = "124.222.116.93" serverPort = 7070 [[proxies]] #这个不能随便改 name = "web" type = "http" localPort = 8000 #这是Django项目在本地8000端口,确定防火墙已放行8000端口 customDomains = ["124.222.116.93"] #没有域名,就填IP,可多个,","隔开
server_addr
是你的服务器A的公网IP地址。server_port
是frps服务监听的端口,与服务器A的frps.ini
配置中的bind_port
相匹配。[[proxies]
部分是对这个特定代理的配置
-
启动frpc客户端:在解压的frp文件夹中,运行以下命令启动frpc:
1
./frpc -c ./frpc.toml
-
Django
配置文件core中的setting.py
,ALLOWED_HOSTS
添加服务器A IP地址1
ALLOWED_HOSTS = ['局域网IP','云服务器A公网IP']
第4步:访问Django项目
一旦frpc成功连接到frps,你就可以通过访问服务器A的公网IP地址(在本例中为124.222.116.93
)来访问在服务器B上运行的Django项目了。如果你在frpc.ini
文件中设置了custom_domains
为服务器A的公网IP,直接使用这个IP访问即可。如果服务器A上运行了Web服务器(如Nginx)并且配置了域名,也可以通过相应的域名进行访问。
注意事项
- 确保服务器A的防火墙规则允许从外部访问其
7000
端口(或你选择的其他端口)。 - 如果你计划长期运行frp服务,可能需要将frps和frpc设置为系统服务,以便它们能够在系统启动时自动运行。
- 出于安全考虑,建议在生产环境中使用frp的更高级配置选项,如启用加密和认证功能。
这样,你就完成了通过frp内网穿透,利用服务器A的公网IP访问服务器B上Django项目的设置。