使用Nginx和Frp實作二級域名訪問內網的不同環境
本教程的目標:
- 瀏覽器訪問 dev.zxd.cn 能訪問到內網部署在9081埠的程式
- 瀏覽器訪問 uat.zxd.cn 能訪問到內網部署在9082埠的程式
- 離開內網仍然能夠 ssh到內網的機器 進行管理,
最終結果示意圖如下:

1.軟硬體準備
(1) 機器準備
- 注冊一個域名且備案,本教程使用的是:zxd.cn這個域名
- 準備一臺有公網IP的服務器,本教程使用的是騰訊云的低配服務器,一個月10塊錢,
- 準備一臺內網電腦/服務器,本片教程內網機器是Linux,后面要訪問的程式就部署在這臺機器上,
(2) 軟體準備
- Frp: 本教程內網穿透使用Frp,官方地址:https://github.com/fatedier/frp
- Nginx: 雖然Frp本身就能實作二級域名穿透轉發,還是在公網服務器上裝一個Nginx來實作不同二級域名的轉發吧,以方便后面進行拓展,
- 兩個程式: 內網服務器部署兩個程式,分別部署在9081埠和9082埠上,
2.域名配置
申請的域名進行備案后,對域名添加記錄,這樣就建好了兩個二級域名:
- dev.zxd.cn
- uat.zxd.cn
訪問這兩個地址,因為記錄指向了公網服務器IP,不嚴謹的說,可以看作是訪問公網服務器IP:80

3.公網服務器安裝Frp服務端
(1) 下載Frp
查看自己公網服務器的內核架構,下載對應版本的壓縮包,上傳到公網服務器的 /data/frp/ 目錄下,解壓,
https://github.com/fatedier/frp/releases

(2) 啟動Frp服務端
cd /data/frp
# 創建開機啟動檔案
vim frps.service
# 拷貝組態檔
cp frps.service /etc/systemd/system
# 重繪服務串列、設定開機自啟、啟動Frp服務端
systemctl daemon-reload
systemctl enable frps
systemctl start frps
frps.service檔案內容如下:
[Unit]
Description=frps
After=network.target
[Service]
ExecStart=/data/frp/frp_0.35.0_linux_386/frps -c /data/frp/frp_0.35.0_linux_386/frps.ini
[Install]
WantedBy=multi-user.target
(3) 配置Frp服務端
編輯 frps.ini 檔案
- 配置bind_port為17000,用于Frp服務端與客戶端的通信
- 配置vhost_http_port為18000,用于Http請求的轉發
- 配置dashboard相關,用于Frp儀表盤的訪問
[common]
bind_port = 17000
vhost_http_port = 18000
dashboard_port = 17080
dashboard_user = root
dashboard_pwd = 123654@#*!
重啟Frp服務端,使配置生效
systemctl restart frps
4.內網機器安裝Frp客戶端
(1) 下載Frp
下載對應版本的壓縮包,上傳到內網機器的 /data/frp/ 目錄下,解壓,

(2) 啟動Frp客戶端
cd /data/frp
# 創建開機啟動檔案
vim frpc.service
# 拷貝組態檔
cp frpc.service /etc/systemd/system
# 重繪服務串列、設定開機自啟、啟動Frp客戶端
systemctl daemon-reload
systemctl enable frpc
systemctl start frpc
frpc.service檔案內容如下:
[Unit]
Description=frpc
After=network.target
[Service]
ExecStart=/data/frp/frp_0.35.0_linux_386/frpc -c /data/frp/frp_0.35.0_linux_386/frpc.ini
[Install]
WantedBy=multi-user.target
(3) 配置Frp客戶端
編輯 frpc.ini 檔案
- 配置server_addr,指向Frp服務端的公網IP
- 配置server_port,指向Frp服務端配置的通信埠
- 配置ssh相關,以使服務器管理員可以通過公網服務器IP:17022訪問內網機器的22埠進行管理內網服務器,
- 配置dev.zxd.cn相關
- 配置uat.zxd.cn相關
server_addr = 182.254.179.78
server_port = 17000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 17022
[dev]
type = http
local_port = 9081
custom_domains = dev.zxd.cn
[uat]
type = http
local_port = 9082
custom_domains = uat.zxd.cn
重啟Frp客戶端,使配置生效
systemctl restart frpc
5.公網服務器安裝nginx
主要是用于對不同的二級域名進行轉發,雖然Frp本身就支持不同的二級域名轉發,但是考慮到后續拓展的和其他環境轉發等因素,還是在Frp前置一個Nginx,目前兩個環境都是轉發到Frp服務端的轉發Http埠上,
經過配置后,訪問兩個不同的域名應該會是這個流程:
- dev.zxd.cn -> 182.165.78.12:80 -> frp服務端Http轉發埠 -> 內網機器的Frp客戶端 -> 內網dev程式
- uat.zxd.cn -> 182.165.78.12:80 -> frp服務端Http轉發埠 -> 內網機器的Frp客戶端 -> 內網uat程式
server {
listen 80;
server_name dev.zxd.cn;
location / {
proxy_pass http://182.165.78.12:18000;
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_set_header REMOTE-HOST $remote_addr;
}
}
server {
listen 80;
server_name uat.zxd.cn;
location / {
proxy_pass http://182.165.78.12:18000;
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_set_header REMOTE-HOST $remote_addr;
}
}
6.測驗
(1) Http訪問測驗
瀏覽器訪問兩個二級域名,應該能訪問到內網機器上部署的兩個不同的程式,
(2) ssh測驗
使用Xshell等工具,連接公網服務器IP:17022,就能ssh到內網機器了,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258152.html
標籤:其他
