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


一、背景

最近在部署項目到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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM