frp+nginx实现内网穿透
寫在前面:上一篇文章寫了關于ngrok+nginx實現內網穿透的流程,并提出了一些存在的問題,昨天試過frp之后,將之前ngrok存在的無法映射本地域名的問題解決了
frp 是一個可用于內網穿透的高性能的反向代理應用,支持 tcp, udp, http, https 協議。
先決條件
有一個域名,并解析到自己服務器上,如:*.frp.lestat.me
有一個具備固定ip的公網服務器
系統環境
假設環境為:
服務器OS:ubuntu17.10
客戶端OS:macOS High Sierra
以下內容將按照上述環境進行搭建
部署
相對于ngrok還需要編譯源碼,frp方便很多,真正的開箱即用
服務器
下載對應操作系統的frp服務端&客戶端至服務器和內網電腦
wget https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_linux_amd64.tar.gz
解壓
tar zxf ./frp_0.16.1_linux_amd64.tar.gz cd ./frp_0.16.1_linux_amd64 ll
目錄結構如下(不同版本可能有差異,但大致相似):
-rw-rw-r-- 1 kcptun kcptun 11358 Mar 21 10:11 LICENSE -rwxrwxr-x 1 kcptun kcptun 6154432 Mar 21 10:10 frpc* -rw-rw-r-- 1 kcptun kcptun 126 Mar 21 10:11 frpc.ini -rw-rw-r-- 1 kcptun kcptun 5306 Mar 21 10:11 frpc_full.ini -rwxrwxr-x 1 kcptun kcptun 7586848 Mar 21 10:10 frps* -r--r----- 1 root root 11207 Mar 25 15:38 frps.2018-03-25.log -rw-rw-r-- 1 kcptun kcptun 2127 Mar 25 13:42 frps.ini -rw-rw---- 1 root root 723 Mar 26 05:06 frps.log -rw-rw-r-- 1 kcptun kcptun 2300 Mar 21 10:11 frps_full.ini -rw------- 1 root root 0 Mar 25 11:12 nohup.out
編輯配置文件
vim ./frps.ini
可參考如下配置:
# 服務器端監聽客戶端連接請求的端口 bind_port = 7000 # 服務器端監聽http請求的端口(由于80端口被nginx占用,因此指定其他端口) vhost_http_port = 8080 # 服務器用以顯示連接狀態的站點端口,以下配置中可以通過訪問IP:7500登錄查看frp服務端狀態等信息 dashboard_addr = 0.0.0.0 dashboard_port = 7500 # dashboard對應的用戶名/密碼 dashboard_user = use dashboard_pwd = pwd # 日志文件路徑 log_file = ./frps.log # 日志記錄錯誤級別,分為:trace, debug, info, warn, erro log_level = warn # 日志保存最大天數 log_max_days = 3 # 客戶端連接校驗碼(客戶端需與之相同) privilege_token = privilege_token # heartbeat configure, it's not recommended to modify the default value # the default value of heartbeat_timeout is 90 # heartbeat_timeout = 90 # only allow frpc to bind ports you list, if you set nothing, there won't be any limit # privilege_allow_ports = 2000-3000,3001,3003,4000-50000 # pool_count in each proxy will change to max_pool_count if they exceed the maximum value max_pool_count = 5 # max ports can be used for each client, default value is 0 means no limit max_ports_per_client = 0 # authentication_timeout means the timeout interval (seconds) when the frpc connects frps # if authentication_timeout is zero, the time is not verified, default is 900s authentication_timeout = 900 # 支持外部訪問的域名(需要將域名解析到IP) subdomain_host = frps.lestat.me
配置nginx反向代理,將來自80端口并指向*.frp.lestat.me的請求分發至frp服務器http請求的監聽端口
server {
listen 80;
server_name *.frps.lestat.me;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_redirect off;
proxy_read_timeout 240s;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
啟動frp服務器并后臺運行,啟動完成后可通過lsof -i :7000查看端口占用情況
nohup ./frps -c ./frps.ini &
客戶端
創建目錄并解壓
編輯配置文件
[common] server_addr = 服務器IP server_port = 7000 privilege_token = privilege_token auth_token = auth_token [hccrm] type = http local_port = 80 subdomain = hccrm
啟動frp客戶端程序
./frpc -c ./frpc.ini
本地apache/nginx虛擬主機配置域名別名(alias),根據自己環境而定
mamp集成apache配置
流程圖解
假設甲使用的瀏覽器希望訪問乙所在內網環境服務器的web項目:
最后
嘗試使用*.frps.lestat.me訪問站點看是否正常,相比ngrok的流程,frp省去了編譯,少踩不少坑,的確省事多了
總結
以上是生活随笔為你收集整理的frp+nginx实现内网穿透的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中dump函数_python
- 下一篇: 查询去重_【Freya的MySQL课堂】