最近在部署項目到web服務器上時,該項目有一個打開視頻監控的功能,視頻的服務器是一臺內網的服務器,不容許設置外網端口訪問,網站服務器和視頻服務器在同一個局域網內,能夠相互聯通。網絡拓撲圖以下:
爲了能在外網打開網站,而且播放視頻,所以須要將視頻服務的端口映射到外網去,因此咱們使用了反向代理技術。
反向代理(reverse proxy)是指以代理服務器接受請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給請求者。
查詢相關資料後,咱們能夠在web服務器上搭建一個反向代理,來接受用戶的訪問視頻接口的請求,而後轉發給視頻服務器處理,處理完後經過反向代理返回給用戶。
在反向代理軟件的選擇上,我嘗試了frp和nginx,都可知足項目需求。html
frp是github上的一個開源項目,項目地址爲:https://github.com/fatedier/frp。
該項目介紹爲,frp 是一個可用於內網穿透的高性能的反向代理應用,感興趣的小夥伴能夠去了解一下,它的功能很強大。
下載完軟件後,咱們能夠看到軟件分爲客戶端和服務端,以c結尾的爲客戶端,以s結尾的爲服務器。
nginx
(1)服務端配置
服務端配置比較簡單,配置http本地監聽的端口vhost_http_port = 8033,token爲客戶端和服務端通訊密鑰;dashboard開頭爲一個web可視化頁面,能夠看到相關的鏈接、流量等狀況git
# 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爲你的域名或者外網ipgithub
# 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 服務web
nginx做爲一個功能強大的web服務器一樣能夠完成這個功能。windows
打開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服務了。app
(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