首页 > 系统相关 >1.从零开始编写一个类nginx工具, 准备篇, 动手造轮子

1.从零开始编写一个类nginx工具, 准备篇, 动手造轮子

时间:2023-10-24 22:07:15浏览次数:40  
标签:www 代理 nginx 从零开始 https 轮子 解析 com 客户端

wmproxy

wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感兴趣的可以一起造个轮子

项目 ++wmproxy++

gite: https://gitee.com/tickbh/wmproxy

github: https://github.com/tickbh/wmproxy

Proxy功能(代理用来做什么)

保护隐私

举个现实与客户交流的例子,这时候你和客户双方都互相认识, 了解对方

1.从零开始编写一个类nginx工具, 准备篇, 动手造轮子_服务端

此时公司为了保护客户隐私, 要求你们统一在平台中沟通, 那沟通方式就变成了

1.从零开始编写一个类nginx工具, 准备篇, 动手造轮子_服务端_02

你们所有的沟通都由平台中转, 你再也没法得到客户的信息, 客户也没有办法得到你的信息, 保护了隐私的安全。在互联网上的表现就是隐藏了自己真实的IP地址,防止被攻击。

专属通道

正常有些内网资源无法通过外网直接访问

1.从零开始编写一个类nginx工具, 准备篇, 动手造轮子_客户端_03

此时内网安装了某代理统一对外保证安全,那你就可以通过取得该代理的信任(密码登录校验等),从而获取这些内网资源

1.从零开始编写一个类nginx工具, 准备篇, 动手造轮子_客户端_04

更快的速度

就比如访问github资源, 中间省略掉部分步骤,获取更少的丢包率,更高的访问速度

1.从零开始编写一个类nginx工具, 准备篇, 动手造轮子_服务端_05

代理类型

http代理

http代理是中间服务器接收到客户端的数据并原样的转发给服务端,在中间这一层他可以解析也可以不做解析,所以理论上代理服务器可以知道所有的数据,而且链路上都是明文传输,任何一层的中间节点都可以获得请求及返回的完整数据,不安全。

https代理

https代理是客户端优先给代理发送connect协议,比如访问https://www.baidu.com那么先优先发如下消息

CONNECT www.baidu.com:443 HTTP/1.1\r\n
Host: www.baidu.com:443\r\n\r\n

后面的代理方收到客户端的消息转发给服务端,收到服务端的消息转发给客户端,无法获得客户端与服务端的通讯内容,因为是通过https的加密方式,中间方无法进行解密。

socks5代理

socks5由rfc1928进行定义,包含TCP,UDP,BIND三种相对较复杂,后面实现时再展开,还可以用用户密码进行认证,从而规避掉不合法的客户端请求。

项目引用

项目主要引用了下列的库,介绍了它在其中的作用

  1. 异步事件库tokio,高效的异步库,它已经集成了(epoll,kqueue, IOCP等)高效的事件通知方式。
  2. web解析库webparse,此外需要对接收的数据做初步解析需要一个web解析库,选择了webparse,依赖少,且已经实现了http1.1协议和http2协议的解析。
  3. 命令行解析框架commander,轻松解析命令行,无需再进行命令的二次分析。

为什么选Rust

Rust是一种快速、高并发、内存安全的语言,经过10来年的发展已经相当成熟,而且拥有良好的包管理系统,可以轻松的构建依赖。 RUST官网地址 https://www.rust-lang.org/ 选用 1.72.0 版本 安装方法请参考网址 https://www.rust-lang.org/tools/install

标签:www,代理,nginx,从零开始,https,轮子,解析,com,客户端
From: https://blog.51cto.com/u_16321542/8010056

相关文章

  • Filebeat收集Nginx日志
    4.1为什么收集Nginx日志我们需要获取用户的信息,比如:来源的IP是哪个地域,网站的PV、UV、状态码、访问时间等等;所以需要收集Nginx日志;4.2Nginx日志收集架构图4.3Nginx日志收集实践4.3.1安装Nginxyuminstallnginx-ycat/etc/nginx/conf.d/elk.confserver{ listen5555;......
  • 关于Nginx缓存
    Nginx缓存一般情况下系统用到的缓存有三种服务端缓存:缓存存在后端服务器,如redis代理缓存:缓存存储在代理服务器或中间件,内容从后端服务器获取,保存在本地客户端缓存:缓存在浏览器什么时候会出现304?服务器响应中包含有ETag和last-modified,浏览器下次去请求时会发送这两个标签,......
  • nginx unit WebAssembly 试用
    nginxunit已经支持WebAssembly,刚好体验下环境准备基于docker运行unit,对于wasm的开发基于rust,实际上测试直接试用了官方的示例代码docker-composeversion:"3"services:app:image:unit:1.31.1-wasmports:-8080:8080......
  • 记录一下nginx遇到的问题
    nginx将ip配置成https,如:https://192.168.1.1/,以及nginx.conf中proxy_pass转发的配置记录。将ip配置httpsnginx:[emerg]no"ssl_certificate"isdefinedforthe"listen...ssl"directivein/usr/local/nginx/conf/conf.d/upstream.conf:14意思是ssl_certificate没有配置,可......
  • centos安装nginx
    目录1、下载安装包2、安装nginx2.1、安装依赖库2.2、安装nginx包2.2.1、解压安装包2.2.2、拷贝文件到/usr/local目录2.2.3、检测当前系统环境2.2.4、编译2.2.5、安装3、配置nginx开机启动4、测试 1、下载安装包官网下载wgethttp://nginx.org/downl......
  • CDN+Nginx反向代理来隐藏c2地址
    思路:通过借助CDN和Nginx反向代理和HTTPS来隐藏真实c2服务器Nginx反向代理:通过Nginx对外部流量转发到本地,再设置防火墙只允许localhost访问cs端口达到IP白名单的效果准备在这个实验环境中,我们需要准备服务器两台(一台服务端、一台靶机)、CDN运营商(这里用的是cloudflare)、域名一......
  • Nginx实现内外网穿透
    声明:以下内容均收集与互联网,无法保证绝对可用性,请结合自身情况调整验证。随着网络安全的要求逐步提高,部分应用服务要求部署在内网,但是应用中有需要访问到公网服务,比如发票验真、OCR识别等,可以通过部署在DMZ区的Nginx实现。假设公网API服务地址为:https://api.myserver.com/ocr......
  • Nginx的安装-Linux
    下载地址#如果没有gcc环境,需要安装gcc:[root@localhostlocal]#yuminstallgcc-c++-y#安装依赖包[root@localhostlocal]#yum-yinstallgcczlibzlib-develpcre-developensslopenssl-devel#进入文件夹[root@localhostlocal]#cd/usr/local#在线下载或者上传......
  • Nginx 1
    一、关于Nginx1.NginxNginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(UniformResourcesIdentifier)URI或者统一资源定位符(UniformResourcesLocator)URL作为沟通依据,通过HTTP协议提供各种网络服务。Nginx是一个跨平台服务器,可以运行在Linux,Windows,Free......
  • 启动Nginx报错:error while loading shared libraries: libpcre.so.0: cannot open sha
    1.现象:输入:/usr/local/nginx/sbin/nginx报错:/usr/local/nginx/sbin/nginx:errorwhileloadingsharedlibraries:libprofiler.so.0:cannotopensharedobjectfile:Nosuchfileordirectory2.错误原因:缺少libpcre.so.0,3.进一步查看:输入:ldd$(which/usr/......