一、背景
最近在部署項目到web服務器上時,該項目有一個打開視頻監控的功能,視頻的服務器是一台內網的服務器,不允許設置外網端口訪問,網站服務器和視頻服務器在同一個局域網內,可以相互聯通。網絡拓撲圖如下:
為了能在外網打開網站,並且播放視頻,因此需要將視頻服務的端口映射到外網去,所以我們使用了反向代理技術。
反向代理(reverse proxy)是指以代理服務器接受請求,然后將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給請求者。
查詢相關資料后,我們可以在web服務器上搭建一個反向代理,來接受用戶的訪問視頻接口的請求,然后轉發給視頻服務器處理,處理完后通過反向代理返回給用戶。
在反向代理軟件的選擇上,我嘗試了frp和nginx,均可滿足項目需求。
二、frp配置
2.1 frp簡介
frp是github上的一個開源項目,項目地址為:https://github.com/fatedier/frp。
該項目介紹為,frp 是一個可用於內網穿透的高性能的反向代理應用,感興趣的小伙伴可以去了解一下,它的功能很強大。
下載完軟件后,我們可以看到軟件分為客戶端和服務端,以c結尾的為客戶端,以s結尾的為服務器。
2.2 配置
(1)服務端配置
服務端配置比較簡單,配置http本地監聽的端口vhost_http_port = 8033,token為客戶端和服務端通信密鑰;dashboard開頭為一個web可視化頁面,可以看到相關的連接、流量等情況
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8033
token = 123456
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = 654321
然后運行命令 ./frps -c ./frps.ini
,啟動服務端,注意:服務端要在開通了外網端口的服務器上運行,vhost_http_port端口即為外網訪問的端口。
(2)客戶端配置
server_addr、server_port為上一步驟中部署frp服務端的地址和端口,token要和服務端token保持一致;
local_port 為本地機器上 web 服務對應的端口,custome_domains為你的域名或者外網ip
# frpc.ini
[common]
server_addr = 192.168.0.227
server_port = 7000
token = 123456
[web]
type = http
local_port = 8053
custome_domains = 192.168.0.227
啟動客戶端運行,在cmd命令行里:./frpc -c ./frpc.ini
(3) 訪問
通過瀏覽器訪問 custome_domains :vhost_http_port
即可訪問到處於內網機器上的 web 服務
三、nginx配置
nginx作為一個功能強大的web服務器同樣可以完成這個功能。
3.1 nginx配置
打開conf文件夾下的nginx.conf文件,我們可以進行配置
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
#gzip on;
#設定實際的服務器列表
upstream zp_server1{
server 127.0.0.1:8099;
}
server {
listen 8018;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
location / {
proxy_pass http://zp_server1;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
}
}
設定要代理的內部服務器地址:
#設定實際的服務器列表
upstream zp_server1{
server 127.0.0.1:8099;
}
設定web服務器外網端口
server {
listen 8018;
server_name localhost;
location / {
proxy_pass http://zp_server1;
}
}
通過訪問外網ip:8018就可以訪問部署在內網的web服務了。
3.2 nginx啟動腳本和關閉腳本
(1)啟動腳本
@echo off
rem 如果啟動前已經啟動nginx並記錄下pid文件,會kill指定進程
nginx.exe -s stop
rem 測試配置文件語法正確性
nginx.exe -t -c conf/nginx.conf
rem 顯示版本信息
nginx.exe -v
rem 按照指定配置去啟動nginx
nginx.exe -c conf/nginx.conf
(2)關閉腳本
windows下會有兩個進程,直接使用資源管理器殺進程比較困難,可使用taskkill /im nginx.exe /f
四、小結
無論是frp,還是nginx都可以滿足,將內部網站映射到外網訪問的需求,frp功能更強大,nginx功能更專一。
參考文章:
(1)https://blog.csdn.net/duchunwang/article/details/82861216
(2)https://www.cnblogs.com/wcwnina/p/8728391.html
(3)https://www.cnblogs.com/jingmoxukong/p/5945200.html
(4)https://github.com/fatedier/frp