浅析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
浅析web网站反向代理的配置的更多相关文章
- Nginx反向代理的配置
Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之 ...
- nginx的反向代理和配置
最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡.所以搜罗了一些关于反向代理服务器的内容,整理综合. 一 概述 反向代理(Reverse Proxy)方式 ...
- Apache反向代理的配置
Apache反向代理的配置 一: Mac系统自带apache服务器 1. 查看apache版本命令如下: sudo apachectl -v 2. 启动apache sudo apachect ...
- JAVAEE——宜立方商城14:项目部署规划、Tomcat热部署、反向代理的配置
1. 学习计划 1.系统部署 2. 项目部署 2.1. 项目架构讲解 2.2. 网络拓扑图 2.3. 系统部署 2.3.1. 部署分析 e3-manager e3-manager-web e3-por ...
- Nginx专题(1):Nginx之反向代理及配置
摘要:本文从Nginx的概念出发,分别从反向代理的概念.优势.配置代码3个方面介绍了Nginx的特性之一反向代理. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方 ...
- Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)
Nginx 简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开 ...
- Centos7 nginx 反向代理的配置
一.正向代理与反向代理 1.正向代理 正向代理往VPN理解 正向代理,也就是传说中的代理,他的工作原理就像一个跳板(VPN),简单的说: 我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这 ...
- 【转】Nginx服务器的反向代理proxy_pass配置方法讲解
[转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲Nginx的配置还是比较简单的, ...
- nginx反向代理的配置优化
作者:守住每一天 blog:liuyu.blog.51cto.combbs:bbs.linuxtone.orgmsn:liuyubj520#hotmail.comemail:liuyu105#gmai ...
随机推荐
- android: requestLayout(), invalidate(), postInvalidate() 方法区别
一.invalidate和postInvalidate 这两个方法都是在重绘当前控件的时候调用的.invalidate在UI线程中调用,postInvalidate在非UI线程中调用.因为androi ...
- ISO/IEC 9899:2011 条款5——5.2.3 信号与中断
5.2.3 信号与中断 1.函数应该被设计为它们可以被一个信号在任一时刻打断,或是被一个信号处理所调用,或是两者都发生,对于初期不发生改变,但仍然处于活动状态,调用的控制流(在中断之后),函数返回值, ...
- 如何正确查看Linux机器内存使用情况
如何正确查看Linux机器内存使用情况 背景 只要工作上涉及到Linux机器,基本上都会有这样一个需求,查看内存使用情况,但是怎么看才正确呢?之前使用的是top命令,一直存在一个误区. 为什么top命 ...
- 通过Redis的list来实现 Server - Client 的同步通信
Redis实现类似同步方法调用的功能(一) 首先声明,这么干纯粹是为了好玩. 通常我们用Redis主要是为了存储一些数据,由于数据在内存里,所以查询更新很快.同时我们也可以利用 Pub/Sub 功能来 ...
- 解决kali无法连接网络问题
键入 ifconfig -a 查看网卡 ,是否存在 键入 leafpad /etc/network/interfaces 查看其中是否有如下语句,没有添加上即可:auto eth0iface eth0 ...
- Dubbo -- 关于 api接口调用不使用强依赖
首先,我们都知道 Dubbo 调用api 需要提供暴露 接口, 消费端才通过 ZK 可以调用 通常我们都会使用 提供 api jar包 的方式 使用 这样既方便又快捷 简单 只需要在spr ...
- python多进程实例详解
写在前面:python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包multiprocessing ...
- 网页引用jQuery在Electron运行出现"$ is not defined"
Electron因为开启了node集成才能实现和网页的通信,引入jQuery较高版本它的模块化定义(基于CommonJS)和Electron的内部机制冲突了.目前提供以下两个方案: 1.使用jQuer ...
- 判断scrollView的滑动方向(二)
在上一篇文章<判断scrollView的滑动方向>中谈到的第二种方法是根据滑动速率来判断的. 今天将通过滑动过程中的坐标差来判断 - (void)scrollViewDidScroll:( ...
- [转帖]如何保护你的 Python 代码 (一)—— 现有加密方案
如何保护你的 Python 代码 (一)—— 现有加密方案 Prodesire Python猫 1周前