一、背景

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

最新文章

  1. 在mongoose中使用$match对id失效的解决方法
  2. 浅谈网站web框架的本质
  3. Spark基本工作流程及YARN cluster模式原理(读书笔记)
  4. OSSFS将OSS bucket 挂载到本地文件系统及注意事项
  5. TrustedInstaller管理权限
  6. 学习笔记008之Task
  7. [noip2010]关押罪犯 并查集
  8. 《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
  9. MYSQL 索引页 结构图
  10. 浅谈一下SSI+Oracle框架的整合搭建
  11. Spring事务注意点
  12. HDFS追本溯源:体系架构详解
  13. Node.js实战项目学习系列(1) 初识Node.js
  14. sublime text 3 左侧目录树中文文件夹显示方框问题解决
  15. Axis2的简单配置(完整版)
  16. 静态文件link 数据库迁移命令 新建app命令
  17. Linux的安装包命令/yum 与 Rpm
  18. Docker数据管理(五)
  19. Google常用脚本
  20. NDK编译常用命令及不同版本so编译方法

热门文章

  1. vue-cli项目中使用全局过滤器及传参(日期格式化)
  2. keras损失函数
  3. TweenJS----前端常用的js动画库,缓动画和复制动画的制作,效果非常好。
  4. PAT 甲级 1052 Linked List Sorting (25 分)(数组模拟链表,没注意到不一定所有节点都在链表里)
  5. css 命名规范参考[转]
  6. Zabbix设置触发器调用远程主机脚本实现触发告警后自动启动自愈功能
  7. .Net Core 请求上下文IHttpContextAccessor
  8. 【MM系列】SAP S/4 HANA的物料编码40位设置
  9. 各种 Java Thread State 分析
  10. Nachos java版学习(一)