首页 >>  正文

nginx反向代理url二次跳转

来源:baiyundou.net   日期:2024-09-21

随着网站技术的发展,网站的搭建已不再局限于传统的部署方式,即将网站、数据库、文件等需要部署的资源部署在同一台服务器上。为了适应业务的发展,将网站和数据库分别部署到不同的服务器上已成为常态,可将数据库部署在独立的服务器上;也可部署在阿里云等服务商提供的云数据库上;还可将网站数据库部署在Docker容器上。针对网站、数据库分离部署的特点,传统的取证方式可能只会调取其中部署了网站的服务器,而忽略了数据库部署在其他服务器上的问题;因此,为避免取证数据遗漏。取证人员的取证技术要求也会相对较高。为了解决这一取证难点,可以通过服务器中网站的部署方式,并从源码的配置文件中分析出网站连接的数据库地址,从而快速发现远程数据库,达到网站、数据库分离时也能完整固定取证数据的目的。

作为网络空间安全与社会治理领域国家队,美亚柏科致力于信息安全与取证技术的相关技术研究。近期,我们推出由美亚柏科电子数据取证专家撰稿的《站库分离的取证方法研究》系列专题文章。

引言

早期的网站、数据库、文件等所有的资源都部署在一台服务器上,随着系统访问量的日益增加,服务器的压力在高峰期会达到峰值,此时,需要增加一台服务器,将网站和数据库分别部署在独立的服务器上。我们经常会遇到这种情况:办案人员借助取证软件获取到服务器信息后,发现该服务器只部署了网站应用,没有数据库信息,深入分析发现数据库部署在另外一台服务器上。办案人员最终再根据分析的结果调取数据库服务器,及时固定对应数据库服务器相关信息。

上述场景描述的是一种典型的站库分离部署方式,一般我们都会先发现网站服务器,通过调取以后再做分析,才能确认数据库的位置。由于没能及时发现数据库的位置,服务器很容易在调证过程就被释放了,最终无法固定数据库,所以及时分析网站部署是否为站库分离,获取相关配置信息显得尤为重要。

站库分离研究概述

2.1研究背景

所谓站库分离,就是网站程序和数据库分开部署在两台不同的服务器上,其中数据库可以是自建数据库,也可以是阿里云或者腾讯云提供的云数据库。这种站库分离模式可以解决单台服务器性能及存储空间不足的情况,提升访问速度及安全性,因此,越来越多的网站采用这种模式进行部署。

通常情况下,网站会在Windows或者Linux的云服务器上部署搭建,首先在操作系统上安装Apache或者Nginx等服务,上传网站源码到指定路径下,通过服务配置信息指定域名、端口、源码的运行路径、伪静态等部署网站程序后,网站就能通过域名和端口进行访问。而数据库是大部分网站的标配,用来保存网站的持久化信息,常用的网站数据库有Mysql、MongoDB等,数据库的部署方式可简单的将数据库部署在同一台服务器上,也可将数据库部署在其他服务器上。修改网站源码的数据库连接信息是网站部署的必备条件,网站基本结构如图1所示。


图1 网站基本结构

2.2网站源码类型

常见的网站源码类型有PHP、Java、Python,其中PHP是一种比较常见的Web站点部署方式,PHP语言易于学习且免费,可以在不同的平台上运行,提供了广泛的数据库支持,PHP有较多成熟稳定框架可以快速开发Web程序,使得编写PHP代码更为快捷简单,常见的PHP框架有ThinkPHP、Laravel、Yii等;Java是一门面向对象的编程语言,在服务端的应用非常丰富,有JSP、Spring、MyBatis等主流框架;Python是一种解释和交互编程语言,它易于学习、开发快速、可扩展性强。Python同样提供了多种Web框架便于快速开发,常见的有Flask、Diango框架。

2.3数据库类型

常见的数据库类型有Mysql、MongoDB。其中Mysql是一种关系型数据库,应用于PHP、Python、Java等多种语言,在Web开发中应用广泛。PHP是比较流行的Web开发语言,Mysql也对PHP有很好的支持,使用两者搭建的站点众多。Mysql可以直接安装在服务器上使用,也可以使用服务器提供商提供的云数据库,比如阿里云数据库、腾讯云数据库等。MongoDB是一种非关系型数据库,基于内存处理数据,将热数据存放在物理内存中,从而实现高速读写,MongoDB是在NoSQL数据库中比较完善流行的数据库,使用人数不断增长,在Web应用中,MongoDB可为其提供可扩展的高性能数据存储解决方案。除此之外还有Postgresql、sqlserver等也是常用的数据库。

2.4网站部署方式

网站的部署方式大部分是在服务器上安装Nginx、Apache、Tomcat等Web服务应用,再将网站文件传输到服务器上,通过服务应用配置网站端口和访问目录,并安装好对应数据库,实现对网站的访问。除此之外,还可以借助第三方部署平台来快速部署网站,比较常见的有宝塔面板、小皮面板,例如首先在服务器上安装宝塔面板,通过面板控制端就能够可视化安装服务器上的软件,并方便地部署网站和数据库等。网站文件如果只是一些静态文件,可以像图片/文件一样部署在云服务商提供的对象存储平台,这种方式仅限于静态页面,也就是每个页面的url要有对应的html文件。另外,也有采用将服务打包进发布包直接运行的方式,比如通过SpringBoot框架开发打包之后得到的jar包,内置了Tomcat服务器,只需要用命令如java –jar app.jar启动jar包即可。

网站还可以通过Docker容器技术来部署,通过指定命令为Web服务器和网站源码文件构建镜像,在需要运行的服务器上拉取镜像并运行,能够快速方便部署及管理。使用Docker容器技术,理论上可以封装任何环境和应用,也是常见的网站部署方式之一。

除了传统的单服务器部署网站外,还可以通过反向代理的方式进行部署,比如:有些访问量大的站点通过分布式部署到多台服务器上,通过负载均衡来控制网站的访问流量,这种反向代理方式可设置轮询、权重、哈希等控制访问的数据流向,达到用户量巨大的情况下也能快速的响应用户的请求。

了解网站的部署方式,对于我们如何针对网站进行取证非常有帮助,分析每一种部署方式的特点及取证方法,发现服务器中的网站数据库信息。

站库分离取证方法

3.1网站取证流程

网站取证首先需要分析服务器中安装的Web服务类型,常见的服务类型有Nginx、Apache、IIS和Tomcat,我们可以通过这些服务的相关配置信息获取网站的部署目录、域名端口和访问日志等重要信息。其中Nginx还支持反向代理部署,反向代理有轮询、权重、哈希等方式,可反向代理到本地服务器或其他服务器运行的网站服务;而IIS只支持在Windows平台下部署网站,通过IIS网站服务控制台可查看当前网站情况。如果服务器中安装了宝塔面板等第三方网站部署应用程序,即可将宝塔面板作为切入点对服务器中的网站进行取证。再者由于Docker容器应用的盛行,很多网站以容器方式进行搭建运行,这也提高了办案人员的取证门槛。

对于直接在服务器上安装Nginx、Apache等服务并部署网站的传统方式,首先要分析服务器中的网站服务类型、查看服务版本信息、配置文件目录、子配置文件目录、服务器日志等重要数据,通过配置文件的内容发现域名、端口信息、网站源码路径以及网站访问日志信息,通过网站访问日志信息可以查看之前网站URL访问情况,可为网站分析重建、网站页面分析提供重要数据支撑。通过分析的结果就可以对服务器中的网站数据进行固定。在获取网站源码后,最重要的一步就是分析网站目录结构,分析网站源码使用的框架,对可能存在数据库配置位置的源码进行分析,发现数据库相关配置信息。大多数情况下,网站采用框架部署搭建,常见的PHP框架有ThinkPHP、Laravel,Java框架主要有SpringBoot,C#框架有ASP.NET Core等,PHP源码数据库配置信息经常在config目录下或者config.php、database.php等关键文件中,可以采用特征值匹配算法将数据库配置信息提取出来,进而获取到数据库服务器地址等信息,如果连接数据库的地址不是本地,而是指向另外一台服务器数据库地址,接下去就需根据这个地址对数据库进行取证。值得注意的是,像Java和C#部署的站点是已经编译过的,需要借助反编译工具查看源码配置信息,这种类型的站点技术门槛较高,反编译之后分析流程也较为复杂,但最终的目的都是对网站框架配置文件的定位以及对配置文件内容的分析提取。若服务器中安装了宝塔面板,除了通过宝塔面板分析网站服务相关信息外,还应该对宝塔面板记录的网站搭建信息进行提取,同时宝塔还有备份网站功能,备份的网站数据或者回收站的网站文件等信息都可进行取证的。如果网站通过Docker容器方式部署,可对整个容器进行固定,同时关注端口映射和挂载路径映射,容器下的网站路径经常会映射到宿主机上的路径,所以需要分析是否存在容器内部路径与服务器本地路径的映射关系,找到真正的源码位置。

网站取证流程

3.2数据库取证流程

数据库取证除了对服务器本地安装的数据库进行取证,还需要对前面网站取证分析所发现的数据库配置信息进行提取,通过配置信息中的主机地址得到数据库的位置,如果是在远程服务器上我们可以及时发现并进行远程数据库的取证。远程的数据库可以部署在另外一台服务器上,也可以部署在云服务器厂商提供的云数据库上,还可部署在Docker容器上。对于数据库的取证,如果部署在其他服务器上,最完整的数据固定是直接将这个服务器制作镜像,但这种方式固定时间较长。可采用以下两种方式进行取证,一种是分析数据库数据文件所在路径,并将数据库配置文件、数据目录等跟数据库相关的文件固定;另外一种是用命令行的方式或者第三方数据库连接软件的方式,导出数据结构和对应数据sql语句,这种方式在本地还原数据较为便捷,比如Mysql数据库,使用mysqldump命令导出数据为sql脚本,输入命令“mysqldump -h 数据库服务器地址 -u root -p --all-databases > data.sql”导出所有数据库,固定后在本地还原再做进一步分析。对于部署在Docker容器内部的数据库,同样需要分析对应的配置信息,还需要关注Docker容器是否将数据库数据映射到宿主机上,才能做到数据库数据的完整取证固定。

3.3站库分离取证关键点

站库分离取证需要更关注数据的准确性和完整性,有以下几个关键点,一是对网站服务器取证时除了对站点源码进行固定外,还需对服务的配置、日志、伪静态等相关文件也一起固定提取。二是有时网站服务器也配置了数据库,会误以为数据库就在本地,最稳妥的方法是要查看网站源码的配置,确认网站所使用的数据是在本地,还是其他服务器或者阿里云rds上等。三是通过mysqldump导出数据库方式在有些情况下,取证机的IP可能会受限,所以通过数据库连接工具连接导出数据库是行之有效的方法。

站库分离取证发展趋势

4.1站库分离数据取证方式研究

目前采用的站库分离数据取证方式都是基于服务器中部署了网站为前提,根据网站服务器分析出源码所在的位置,再进行源码分析获取数据库的连接信息,如果最开始获取的是部署数据库的服务器信息,就很难反向逆推所对应的网站服务器位置。PHP网站源码基本上是将没有编译过的直接部署在服务器上,比较容易分析出对应的数据库连接信息,但是像java、C#等类型的站点源码是编译过的,这种情况下就需要借助反编译工具将其转换为可读的源码方式,然后再进行分析,而且很多情况下,数据库连接信息的位置不是固定的,还需要根据不同的框架类型在不同的目录文件中查找关键连接信息,这意味着需要研究更多的网站框架类型才能高效的整合出一套覆盖全面的分析取证方式,而且随着网站技术的不断提高,取证研究相对滞后,这对站库分离数据提取的准确性与完整性提出更高的要求。因此需要不断地丰富数据库连接信息特征值的匹配库,才能针对各式各样的站库分离服务器提出对应的取证方案。

4.2站库分离的自动化取证分析

随着网站技术服务架构的迅速发展,为解决单台服务器性能及存储空间不足的问题站库分离已越来越多的被广泛应用,由于站库分离的部署方式涉及到多台服务器,如果缺乏相关网站分析能力容易只固定网站服务器,而忽略了重要的数据库服务器的取证。所以,针对目前取证人员缺乏站库分离部署取证能力的现状,研究人员应专门开发将取证行为程序化、规范化的软件,快速的获取源码位置,结合特征值匹配技术以及大数据库分析匹配算法,自动分析网站使用的框架以及数据库连接信息等数据库服务器取证相关信息,实现对站库分离方式部署网站服务器取证的自动化。目前美亚柏科云勘大师已经在网站拓扑图功能中利用相关技术实现自动识别网站源码目录、框架与源码语言等信息,并能够自动分析关联的数据库,如果发现是站库分离的情况,云勘大师将提供连接的数据库入口,可直接对数据库进行连接并取证,给站库分离取证提供方便快捷的取证方法。

网站拓扑图站库分离识别五五⑤

结束语

本文介绍了在云服务器中部署的网站、数据库分离的情况下,如何通过网站服务和配置文件获取网站源码的位置,并通过网站源码分析技术来获取数据库配置信息的方法,其中网站源码分析需要根据网站源码类型的不同,制定不同的分析方式来获取具体的数据库配置信息,并分析数据库是部署在本地还是远程服务器上,或者以Docker部署的数据库容器中。通过站库分离的分析,可以快速发现网站与数据库的位置关系,及时发现数据库位置并固定,防止取证过程中数据库服务的缺失。为了研究服务器中网站和数据库的部署方式,当网站和数据库部署在不同服务器上时,可以快速分析出网站数据库部署的服务器地址,并针对站库分离的方式使用正确的固定技术进行取证。本方法可以通过服务器中网站的部署方式找到源码位置,从源码的配置文件中通过采用特征值匹配的方式分析出网站连接的数据库地址、登录用户名密码信息,根据这些已知信息将网站源码、部署配置方式、网站访问日志、数据库数据文件等数据固定下来。因此根据网站数据库分离的情况,通过分析发现所处的服务器地址,并进行有效的数据库服务器的取证固定。本研究有助于快速发现数据库服务器,从而快速跟进并获取关键数据库信息,可用于数据库的提取,达到网站数据库分离时也能完整固定取证数据的目的,为办案人员对站库分离服务器的取证提供思路。

参考文献

[1] 陈康贤. 大型分布式网站架构设计与实践. 电子工业出版社,2014.09.01

[2] Steve Souders. 高性能网站建设指南. 电子工业出版社,2010.4

[3] 雷景生. 数据库原理及应用. 清华大学出版社,2012.01.01

[4] 李炳龙. 数字取证技术、方法与系统. 科学出版社,2022.01

[5] 原晋鹏 刘云玉. 网站设计与开发. 清华大学出版社,2021.11

[5] 朱珍 张琳霞. PHP网站开发技术. 电子工业出版社,2014.8

[6] 胡学钢 叶明全 伍长荣. 数据库技术与应用. 安徽大学出版社,2020.1

","gnid":"9eae365ba80a040f3","img_data":[{"flag":2,"img":[{"desc":"","height":"485","title":"","url":"https://p0.ssl.img.360kuai.com/t01013c5aedcaf052ca.jpg","width":"1031"},{"desc":"","height":"765","title":"","url":"https://p0.ssl.img.360kuai.com/t0186a1946334fed26b.jpg","width":"558"},{"desc":"","height":"481","title":"","url":"https://p0.ssl.img.360kuai.com/t01119a318f7f1ace12.jpg","width":"921"}]}],"original":0,"pat":"art_src_0,fts0,sts0","powerby":"pika","pub_time":1700212597000,"pure":"","rawurl":"http://zm.news.so.com/b6b7cd08eb56a3159bd17623ae8b866c","redirect":0,"rptid":"0faaa0d67c886596","rss_ext":[],"s":"t","src":"国投智能","tag":[],"title":"专家说丨浅谈站库分离的取证方法研究

强古翁2750怎么使用nginx的vhost -
柴童姬18841104949 ______ nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块.其中proxy_set_header指令就是该模块需要读取的配置文件.在这里,所有设置的值的含义和http请求同中的含义完全相同,除了Host外还有X-Forward-For. Host的含义...

强古翁2750nginx 只能配置一个反向代理吗 -
柴童姬18841104949 ______ nginx支持通过多个server来配置不同的服务,每个服务都可以配置多个反向代理 反向代理可以配置在location中,匹配指定url的请求反向代理到一个后端服务器组中 一个server可以有多个location,一个nginx可以有多个server,所以可以配置多个反向代理

强古翁2750请问nginx如何使用啊,怎么在nginx下面挂网页,急求.. -
柴童姬18841104949 ______ server { listen 443 default ssl; listen [::]:443; server_name google.hahahahhahahahha.com; #1,设置反向代理的域名 ssl on; ssl_certificate /cert/hahahahhahahahha.cer; ssl_certificate_key /cert/hahahahhahahahha.pem; location / { proxy_redirect off; ...

强古翁2750nginx反向代理多台独立web服务器 -
柴童姬18841104949 ______ 多个域名的话,就每个域名使用一个server段,然后proxy_pass到相应的web服务器上或者到upstream上.

强古翁2750求nginx反向代理配置 -
柴童姬18841104949 ______ 没办法做这样的反向代理. 除非是 http://10.80.12.196:8080/8080/ -> http://10.80.12.198/8080/ http://10.80.12.196:8000/8000/ -> http://10.80.12.198/8000/ 如果是这样的话,配置是这样的 location /8080 { proxy_pass http://10.80.12.196:8080/; ...

强古翁2750为什么要用Nginx反向代理 -
柴童姬18841104949 ______ 一般来说公网延迟高,客户端与nginx之间的请求连接走公网,nginx先把这些请求缓存住,等这些请求数据全部完成之后nginx再向内网服务器请求,降低公网网络延迟成本,同时也降低一个连接占用服务端程序的时间.原因:因为tcp不一定一次就能把全部数据传输完毕,所以一个连接可能需要等待很久才能把所有需要的数据都传输完毕,而这样的空闲连接如果都直接连 接到服务器上的话,会加重服务器负担,而nginx在这方面做了很大的优化,可以承载更多的连接,空闲连接也不会占据太多内存,所以nginx作为反向代 理能降低上游服务器的负载.

强古翁2750nginx upstream bakend{} 中的bakend代表什么意思啊? -
柴童姬18841104949 ______ bakend是自己命名的变量也可以命名成其它的值,定义请求反向代理的地址 nginx 反向代理示例:upstream bakend { server 127.0.0.1:8080; keepalive 64; } server { listen 80; server_name www.testserver.com; location / { proxy_set_header X-...

强古翁2750nginx的反向代理和负载均衡的区别是什么 -
柴童姬18841104949 ______ 负载均衡需要通过反向代理来实现 反向代理就是指nginx作为前端服务器,将请求转发到后端,再将后端服务器的结果,返回给客户端 它在中间做了一个代理服务器的角色 负载均衡对反向代理增加了一些策略,因为后端是多台服务器,nginx会根据设定的策略将请求转发给一个相对空闲的服务器,对负载进行分流,减轻服务器压力

强古翁2750nginx反向代理怎么解决图片的问题 -
柴童姬18841104949 ______ 直接用nginx来调用现有的这套MRTG里面的图反馈给用户,这也就不难理解为什么会出现Basic Auth了.但是同一交换机上还有其他的用户,当然要防止用户根据自己的流量图图片地址推断去看别人的流量图了.

强古翁2750如何为thinkjs静态资源配置nginx反向代理 -
柴童姬18841104949 ______ 为了让网站静态资源加载更快,所以需要在VPS的nginx上配置一个反向代理来直接让Nginx处理静态资源,动态类的请求通过反向代理让Node.js来处理:?server { listen 80; server_name abc.com www.abc.com; index index.js index.html index....

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024