frp + Nginx實現內網穿透 配置多個子域名訪問內部服務

frp + Nginx實現內網穿透 配置多個子域名訪問內部服務

緣起

公司搬家,新家不能裝專線,靜態ip消失,改爲動態IP了,這樣內部服務器在外網就沒法訪問了,所幸我們有一臺雲服務器,有公網ip。這裏只提示寫這篇博客的原因,下面的操作是在我個人騰訊雲服務器(帶公網ip)和個人PC上測試使用,親測通過。公司阿里雲服務器是生產環境,拿來測試會影響線上。

環境準備

  1. 已備案的域名一個
  2. 帶公網ip的雲服務器
  3. pc一個
  4. frp0.30.0 frp github下載地址
  5. nginx1.10.3

雲服務器安裝nginx和frp

  1. 安裝 frp
    這裏簡單說一下frp,frp是用go語言開發的內網穿透工具,分爲frpc,frps。frpc是客戶端,安裝在內網,frps是服務端,安裝在具有公網ip的服務器上,frpc和frps協商一個通訊端口,frpc啓動的時候會通過這個通訊端口去連接frps,實現內網穿透(並沒有去看源碼,只是大致猜測是這樣)。frps可以配置vhost_http_port來實現虛擬主機服務,瀏覽器請求 [公網ip]:[vhost_http_port],frps會把這個請求轉發給frpc,frpc接收到後再轉發給服務提供者,可以實現內網服務訪問,具體請看:frp中文文檔
    從github上下載frp,放在/home下,打開frps.ini添加如下配置:
[common]

# frp連接的端口
bind_port = 7000

# http監聽端口
vhost_http_port = 8080
# https監聽端口
vhost_https_port = 8443

# frp客戶端連接服務端時的token 爲了安全 建議添加
token = tPaALZKtCBfN6IAp

# 二級域名 後面訪問的格式是a.frp.xxx.net或b.frp.xxx.net
subdomain_host = frp.xxx.net

使用命令啓動:

./frps -c ./frps.ini

ps:如果雲服務器有防火牆或者雲安全組策略(阿里雲有,在控制檯),需要開放你上面用到的端口。

域名解析

解析兩條A記錄:frp.xxx.net*.frp.xxx.net,都指向你的雲服務器ip,稍等一會,ping frp.xxx.net,如果能ping通說明解析成功

配置frpc

  1. 下載frp到本地,解壓
  2. 進入解壓完成的目錄,修改frpc.ini爲下:
[common]
# 公網ip 就是frps所在的服務器的ip
server_addr = xxx.xxx.xxx.xxx
# frps規定的連接端口
server_port = 7000
# 連接token 與frps中的token
token = tPaALZKtCBfN6isP
# 定義第一個轉發
[web01]
type = http
# 本地(內網)服務的端口
local_port = 8001
# 與frps中的subdomain_host連接起來就是a.frp.xxx.net
subdomain = a

# 定義第二個轉發
[web02]
type = http
# 本地(內網)服務的端口
local_port = 8002
# 與frps中的subdomain_host連接起來就是b.frp.xxx.net
subdomain = b

然後啓動:

./frpc -c ./frpc.ini

如果沒有報錯就是啓動成功。
至此,訪問地址a.frp.xxx.net:8080會被轉發到本地(內網)的8001端口,而訪問地址b.frp.xxx.net:8080會被轉發到本地(內網)的8002端口

配置nginx

我們不想要url a.frp.xxx.net:8080這類似地址中的端口怎麼辦?那隻能使用默認端口80了,這裏可以用nginx進行轉發,首先在雲服務器安裝nginx,這個不再贅述,網上有的是資料,然後配置nginx的conf文件,名字爲nginx.conf,在nginx文件夾或者/etc/nginx裏面,至於在哪,取決於你用的什麼安裝方式,此文件中添加一個server節點,配置如下:

server {
	# 監聽的80端口
	listen 80;
	# 域名配置 記得一定要加上*.frp.xxx.net這個,只加frp.xxx.net是不行的,某運維大坑張XX在這坑我2天的時間
	server_name * .frp.xxx.net frp.xxx.net;
	location / {
		proxy_pass http: //127.0.0.1:8080;
		# 這個Host的header一定要加,不然轉發後frp拿不到通過哪個域名訪問的,導致轉發失敗
		proxy_set_header Host $host;
	}
}

然後重啓nginx,大功告成。

參考鏈接

  1. https://blog.csdn.net/MENGHUANBEIKE/article/details/100792343?utm_source=app
  2. https://www.jianshu.com/p/00c79df1aaf0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章