一、背景

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

浅析web网站反向代理的配置的更多相关文章

  1. Nginx反向代理的配置

    Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之 ...

  2. nginx的反向代理和配置

    最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡.所以搜罗了一些关于反向代理服务器的内容,整理综合. 一  概述 反向代理(Reverse Proxy)方式 ...

  3. Apache反向代理的配置

    Apache反向代理的配置 一: Mac系统自带apache服务器 1. 查看apache版本命令如下:   sudo apachectl -v 2. 启动apache   sudo apachect ...

  4. JAVAEE——宜立方商城14:项目部署规划、Tomcat热部署、反向代理的配置

    1. 学习计划 1.系统部署 2. 项目部署 2.1. 项目架构讲解 2.2. 网络拓扑图 2.3. 系统部署 2.3.1. 部署分析 e3-manager e3-manager-web e3-por ...

  5. Nginx专题(1):Nginx之反向代理及配置

    摘要:本文从Nginx的概念出发,分别从反向代理的概念.优势.配置代码3个方面介绍了Nginx的特性之一反向代理. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方 ...

  6. Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)

    Nginx 简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开 ...

  7. Centos7 nginx 反向代理的配置

    一.正向代理与反向代理 1.正向代理 正向代理往VPN理解 正向代理,也就是传说中的代理,他的工作原理就像一个跳板(VPN),简单的说: 我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这 ...

  8. 【转】Nginx服务器的反向代理proxy_pass配置方法讲解

    [转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲Nginx的配置还是比较简单的, ...

  9. nginx反向代理的配置优化

    作者:守住每一天 blog:liuyu.blog.51cto.combbs:bbs.linuxtone.orgmsn:liuyubj520#hotmail.comemail:liuyu105#gmai ...

随机推荐

  1. 数据分析之 pandas

    pandas的拼接操作 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join 1. 使用pd.concat()级联 pandas使用p ...

  2. pom.xml中properties作用

    可以在properties下声明相应的版本信息,然后在dependency下引用的时候用${spring-version}就可以引入该版本jar包了 <properties> <sp ...

  3. python 设计模式之命令(Command)模式

    #写在前面 也了解了不少设计模式了,他们都有一个通病,那就是喜欢把简单的东西复杂化.比如在不同的类中加个第三者.哈哈哈,简单变复杂是有目的的,那就是降低耦合度,增强可维护性,提高代码复用性,使代码变得 ...

  4. java udp通信

    package net.kkxm.kms;  import java.net.DatagramPacket; import java.net.DatagramSocket; import java.n ...

  5. 常用sql2

    mysql中的NULL的判断    mysql> delete from `zhangchao` where x='NULL'; Query OK, 0 rows affected (0.00 ...

  6. utf-8的中文是一个字符占几个字节

    utf-8的中文是一个字符占几个字节 英文字母和中文汉字在不同字符集编码下的字节数英文字母:·字节数 : 1;编码:GB2312 字节数 : 1;编码:GBK 字节数 : 1;编码:GB18030 字 ...

  7. 编译安装MySQL5.6

    安装必需的工具  比如cmake.gcc.g++.git CentOS使用下面的命令: yum install cmake gcc g++ git Ubuntu使用下面的命令: apt-get ins ...

  8. LeetCode_172. Factorial Trailing Zeroes

    172. Factorial Trailing Zeroes Easy Given an integer n, return the number of trailing zeroes in n!. ...

  9. Hive之insert into与insert overwrite区别

    一.实践先行,直接上手 1. hive 表及数据准备 建表,并插入初始数据.向表中插入 hive> use test; hive> create table kwang_test (id ...

  10. Java读取Excel文件(包括xls和xlsx)的样例程序

    样例程序如下所示,其中: parseXls()函数依赖于jxl,只能读取xls格式文件: parseExcel()函数依赖于apache poi,能够读取xls和xlsx两种格式的文件. jxl的依赖 ...