淺析web網站反向代理的配置

1、背景

最近在部署項目到web服務器上時,該項目有一個打開視頻監控的功能,視頻的服務器是一臺內網的服務器,不容許設置外網端口訪問,網站服務器和視頻服務器在同一個局域網內,能夠相互聯通。網絡拓撲圖以下:

爲了能在外網打開網站,而且播放視頻,所以須要將視頻服務的端口映射到外網去,因此咱們使用了反向代理技術。
反向代理(reverse proxy)是指以代理服務器接受請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給請求者。
查詢相關資料後,咱們能夠在web服務器上搭建一個反向代理,來接受用戶的訪問視頻接口的請求,而後轉發給視頻服務器處理,處理完後經過反向代理返回給用戶。
在反向代理軟件的選擇上,我嘗試了frp和nginx,都可知足項目需求。html

2、frp配置

2.1 frp簡介

frp是github上的一個開源項目,項目地址爲:https://github.com/fatedier/frp。
該項目介紹爲,frp 是一個可用於內網穿透的高性能的反向代理應用,感興趣的小夥伴能夠去了解一下,它的功能很強大。
下載完軟件後,咱們能夠看到軟件分爲客戶端和服務端,以c結尾的爲客戶端,以s結尾的爲服務器。
nginx

2.2 配置

(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

3、nginx配置

nginx做爲一個功能強大的web服務器一樣能夠完成這個功能。windows

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服務了。app

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

4、小結

不管是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

相關文章
相關標籤/搜索