frp和nginx內(nèi)網(wǎng)服務(wù)器轉(zhuǎn)發(fā)和建站
時間:2023-07-11 22:06:02 | 來源:網(wǎng)站運(yùn)營
時間:2023-07-11 22:06:02 來源:網(wǎng)站運(yùn)營
frp和nginx內(nèi)網(wǎng)服務(wù)器轉(zhuǎn)發(fā)和建站:之前寫過一次內(nèi)網(wǎng)web轉(zhuǎn)發(fā)建站的文章([nginx和ngrok配合進(jìn)行內(nèi)網(wǎng)web轉(zhuǎn)發(fā)](nginx和ngrok配合進(jìn)行內(nèi)網(wǎng)web轉(zhuǎn)發(fā) - 黑白的自留地 "nginx和ngrok配合進(jìn)行內(nèi)網(wǎng)web轉(zhuǎn)發(fā)"))同步發(fā)過本站后來看到網(wǎng)上有挺多小伙伴們看,后來因為ngrok的不方便和不穩(wěn)定我們公司內(nèi)網(wǎng)已經(jīng)不在使用ngrok而換成frp了,綜合使用了nginx、IIS、Apache、ntbind、gogs等綜合應(yīng)用搭建了內(nèi)部的業(yè)務(wù)系統(tǒng),在經(jīng)過半年多使用后感覺挺穩(wěn)定和方便。因此寫下這個筆記記錄相關(guān)的技術(shù)要點(diǎn)給小伙伴們和自己以后配置參考。
## 環(huán)境和需求
1. 公網(wǎng)服務(wù)器(至少要有公網(wǎng)IP最好是linux,我們用的阿里云)
2. 內(nèi)網(wǎng)服務(wù)器或電腦(得益于frp是go語言寫的跨平臺,可以是windows、linux、樹莓派等幾乎任何可聯(lián)網(wǎng)設(shè)備。我用的windows)
3. 內(nèi)網(wǎng)路由器控制權(quán)(需要搭建內(nèi)網(wǎng)開發(fā)測試環(huán)境需要,不需要協(xié)作的可以直接在自己電腦里改host文件解析實現(xiàn))
## 設(shè)計思路
數(shù)據(jù)流程是這樣的:
> 域名
http://a.com解析到公網(wǎng)IP(12.12.12.12為示例IP),公網(wǎng)搭建nginx添加
http://a.com反向代理到公網(wǎng)服務(wù)器的8080端口,用戶訪問
http://a.com到達(dá)公網(wǎng)的nginx,nginx轉(zhuǎn)發(fā)請求到8080端口,frp服務(wù)端配置http監(jiān)聽端口為8080,內(nèi)網(wǎng)的frp客戶端負(fù)責(zé)轉(zhuǎn)發(fā)內(nèi)網(wǎng)服務(wù)器的80端口到frp服務(wù)器的8080端口同時制定只監(jiān)聽
http://a.com這個域名。至此內(nèi)網(wǎng)web已經(jīng)能完全轉(zhuǎn)發(fā)到外網(wǎng)了。如果需要內(nèi)網(wǎng)開發(fā)調(diào)試環(huán)境同時不要求公司每個人都改host文件綁定
http://a.com可以在內(nèi)網(wǎng)服務(wù)器上使用ntbind搭建dns服務(wù)器,把內(nèi)網(wǎng)服務(wù)器IP地址設(shè)置到路由器的dhcp部分的dns服務(wù)器那里,這樣公司用戶訪問
http://a.com是直接走了內(nèi)網(wǎng),從外網(wǎng)訪問
http://a.com是走了frp穿透。
## 第一步:公網(wǎng)搭建配置nginx
nginx的安裝應(yīng)該不用贅述了,網(wǎng)上有l(wèi)npm一鍵包、wdcp一鍵包等,主要寫寫我的配置:
```
server {
listen 80;
server_name a.com;
location / {
proxy_pass http://127.0.0.1:8080;
#Proxy Settings
proxy_redirect off;
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
```
這里就指明訪問
http://a.com的時候nginx直接代理到本服務(wù)器的8080端口。
## 第二步:在公網(wǎng)服務(wù)器安裝配置frps服務(wù)端
在公網(wǎng)服務(wù)器上安裝frp可以直接通過[github](fatedier/frp "github")下載安裝配置,但是這里推薦使用[一鍵包](【填坑完畢】內(nèi)網(wǎng)穿透利器Frp一鍵安裝腳本及設(shè)置教程 - 插件 - KoolShare - 源于玩家 服務(wù)玩家 "一鍵包")安裝,注意一鍵包只適用于debian、ubuntu、CentOS,測試過的系統(tǒng)如下:
> CentOS 6 32/64bit
CentOS 7 32/64bit
Debian 6 32/64bit
Debian 7 32/64bit
Debian 8 32/64bit
Ubuntu 14 32/64bit
安裝命令:
```bash
wget --no-check-certificate
https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install
```
流程:
需要注意Please input frps vhost_http_port這里為了不和公網(wǎng)的nginx沖突我使用了8080端口,還有ssl端口默認(rèn)是443我使用了4433,這樣公網(wǎng)服務(wù)器可以繼續(xù)作為web服務(wù)器正常使用。
```bash
Loading network version for frps, please wait...
frps Latest release file frp_0.8.1_linux_amd64.tar.gz #此步驟會自動獲取frp最新版本,自動操作,無需理會
Loading You Server IP, please wait...
You Server IP:12.12.12.12 #自動獲取你服務(wù)器的IP地址
Please input your server setting:
Please input frps bind_port [1-65535](Default Server Port: 5443): #輸入frp提供服務(wù)的端口,用于服務(wù)器端和客戶端通信
Please input frps dashboard_port [1-65535](Default dashboard_port: 6443): #輸入frp的控制臺服務(wù)端口,用于查看frp工作狀態(tài)
Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80): #輸入frp進(jìn)行http穿透的http服務(wù)端口 這里我使用了8080
Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443): #輸入frp進(jìn)行https穿透的https服務(wù)端口 這里為使用了4433
Please input privilege_token (Default: WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq): #輸入frp服務(wù)器和客戶端通信的密碼,默認(rèn)是隨機(jī)生成的
Please input frps max_pool_count [1-200](Default max_pool_count: 50): #設(shè)置每個代理可以創(chuàng)建的連接池上限,默認(rèn)50
##### Please select log_level #####
1: info
2: warn
3: error
4: debug
#####################################################
Enter your choice (1, 2, 3, 4 or exit. default [1]): #設(shè)置日志等級,4個選項,默認(rèn)是info
Please input frps log_max_days [1-30]
(Default log_max_days: 3 day): #設(shè)置日志保留天數(shù),范圍是1到30天,默認(rèn)保留3天。
##### Please select log_file #####
1: enable
2: disable
#####################################################
Enter your choice (1, 2 or exit. default [1]): #設(shè)置是否開啟日志記錄,默認(rèn)開啟,開啟后日志等級及保留天數(shù)生效,否則等級和保留天數(shù)無效
```
確定無誤后回車會自動安裝,稍等片刻安裝結(jié)束會顯示如下的配置信息:
```bash
Congratulations, frps install completed!
==============================================
You Server IP : 12.12.12.12
Bind port : 5443
Dashboard port : 6443
vhost http port : 8080
vhost https port: 4433
Privilege token : WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq
Max Pool count : 50
Log level : info
Log max days : 3
Log file : enable # 將上面信息添加到你的路由器frp穿透插件中吧
==============================================
frps Dashboard:
http://12.12.12.12:6443/ # 這個是frp控制臺訪問地址
==============================================
```
**更新:安裝時配置的Dashboard user和Dashboard pwd為打開
http://12.12.12.12:6443/ 這個狀態(tài)控制臺的賬號和密碼**
可以把以上信息保存下來備用。一鍵包可以直接安裝frp為系統(tǒng)服務(wù)非常方便,默認(rèn)安裝的目錄是:`/usr/local/frps/`后期需要更改配置的可以進(jìn)入這個目錄修改frps.ini文件。另附常用命令:
```bash
更新frps:./install-frps.sh update
卸載frps:./install-frps.sh uninstall
管理:
/etc/init.d/frps start
/etc/init.d/frps stop
/etc/init.d/frps restart
/etc/init.d/frps status
/etc/init.d/frps config
/etc/init.d/frps version
```
## 第三步:內(nèi)網(wǎng)安裝frpc客戶端
這里我們已gogs為例,我在內(nèi)網(wǎng)的windows服務(wù)器上安裝了git服務(wù)器監(jiān)聽在3000端口,現(xiàn)在想通過訪問
http://a.com直接能訪問到內(nèi)網(wǎng)的git服務(wù)器。同時想把內(nèi)網(wǎng)服務(wù)器的一個網(wǎng)盤的8049端口穿透出去。
這里請點(diǎn)擊第二步里的frp的[github發(fā)布頁](fatedier/frp "github")下載frp編譯好的二進(jìn)制包,這里我感覺內(nèi)網(wǎng)服務(wù)器選擇里 frp_0.14.0_windows_amd64.zip。下載后解壓到D盤,配置目錄下的frpc.ini沒有這個文件可以新建,我的配置如下:
```
[common]
server_addr = 12.12.12.12
server_port = 5443 #上一步的服務(wù)器Bind port
log_file = ./frpc.log #日志和日志等級
# debug, info, warn, error
log_level = debug
log_max_days = 3
privilege_token = WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq #上一步的連接密碼Privilege token
pool_count = 20 #連接數(shù)調(diào)優(yōu)可以參考frp的中文文檔 下同
tcp_mux = true
protocol = tcp
#git服務(wù)器配置
[git]
type = http #協(xié)議類型
local_ip = 127.0.0.1 #本地IP
local_port = 3000 #本地端口
use_gzip = false #是否gzip壓縮輸出
pool_count = 20 #連接數(shù)調(diào)優(yōu)請參考frp文檔
custom_domains = a.com #綁定的域名
#網(wǎng)盤8049端口
[panupload]
type = tcp #tcp類型
local_port = 8049 #本地端口
remote_port = 8059 #要穿透到服務(wù)器的端口,這里就可以通過12.12.12.12:8059或
http://a.com:8059來訪問內(nèi)網(wǎng)的8049上的網(wǎng)盤了
```
配置完成后通過命令行進(jìn)入D:/frp運(yùn)行:`D:/frp/frpc.exe -c D:/frp/frpc.ini`(這里我把frp解壓到了D盤,根據(jù)你自己的情況修改)。注意,frpc客戶端運(yùn)行成功后并沒有任何反應(yīng),需要登錄到上一步的控制臺查看:
http://12.12.12.12:6443/## 結(jié)語
如上就已經(jīng)搭建完成了,這樣我們可以把內(nèi)網(wǎng)的web和tcp端口或者udp端口穿透到外網(wǎng)了。包括很多小伙伴頭疼的微信公眾號開發(fā)的調(diào)試也可以挪到內(nèi)網(wǎng)了。非常感謝frp和一鍵包的小伙伴。下一篇主要寫ntbind、IIS、Apache怎么和frp配合。
## 參考資料
[frp](fatedier/frp "frp")
[內(nèi)網(wǎng)穿透利器Frp一鍵安裝腳本及設(shè)置教程](【填坑完畢】內(nèi)網(wǎng)穿透利器Frp一鍵安裝腳本及設(shè)置教程 - 插件 - KoolShare - 源于玩家 服務(wù)玩家 "內(nèi)網(wǎng)穿透利器Frp一鍵安裝腳本及設(shè)置教程")
[frp中文文檔](fatedier/frp "frp中文文檔")
感謝以上作者和貢獻(xiàn)者。
同步博客:frp和nginx內(nèi)網(wǎng)服務(wù)器建站(上) - 黑白的自留地