大数据概述
写在前面本套笔记使用环境CentOS7.7,Hadoop的版本为CDH5.7,开发工具使用IDEA2018.03。
机器学习、深度学习和人工智能都离不开大数据。大数据的生态圈有两个,一个是Hadoop生态圈,另一个是Spark生态圈。在本套快速入门笔记中,关于Hadoop会学习其三大核心组件的原理与使用,具体包括分布式文件系统HDFS、分布式资源调度YARN和分布式计算框架MapReduce。之后会在此基础上基于某网站的日志来进行Hadoop项目实战学习,主要分析该网站用户使用浏览器访问该网站的情况,可能A用户使用谷歌浏览器,B用户使用IE浏览器,C用户使用Firefox浏览器进行访问,我们需要做的就是基于用户访问日志来分析和统计不同浏览器的使用数量及占比情况。除了Hadoop项目实战之外,还会学习如何搭建Hadoop分布式集群,Hadoop集成Spring框架。
当然除了学习Hadoop,本套笔记中也会简单学习一些关于Spark、Flink和Beam的知识。尽管本套笔记主要学习的是Hadoop2.x相关内容,但是也会对Hadoop3新特性进行讲解。
大数据概述在大数据领域有两个非常经 ...
SSL配置、泛域名和静态服务
写在前面现在大部分网站都使用https协议,而不是传统的http,因此本篇就来学习如何使用Nginx配置网站HTTPS和如何将http重定向到https,同时也会学到如何进行泛域名路径分离和请求转发,静态服务的相关配置,这些都是企业日常开发过程中经常会遇到的情况。
Nginx配置网站HTTPSHTTPSHTTPS是超文本传输安全协议(英文为Hyper Text Transfer Protocol Secure,简称HTTPS)是超文本传输协议HTTP和SSL/TLS的组合,用以提供加密通信以及对网络服务器身份的鉴定。HTTPS连接通常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。请不要将HTTPS协议与在RFC2600中定义的安全超文本传输协议(S-HTTP)相混淆。
HTTPS目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS网站已经大面积创建了,个人和站长均可以自己动手搭建一个安全的加密网站。
第一步,创建本地SSL证书,依次执行如下命令:
1234// 创建存储文件目录mkdir -p /etc/nginx/ssl// 创建有效期为100年,加密算 ...
Nginx运行状态和NginxWebUI
写在前面开发者需要经常获悉Nginx的运行状态,以便进行更好的使用和维护。因此本篇首先来学习如何通过Nginx提供的ngx_http_stub_status_module模块来监控Nginx的运行状态,同时考虑到实际工作的便利性,这里还会学习如何使用NginxWebUI工具来通过网页方式配置Nginx。
Nginx状态信息这一部分其实应该在前面就应该学习的,但是放在这里学习也是可以。通过前面的学习,我们知道在Nginx模块中有一个ngx_http_stub_status_module模块,这个模块的主要功能就是记录Nginx的基本访问信息,可以让使用者随时掌握Nginx的工作状态。注意在编译的时候就必须增加这个模块,开发者可以使用nginx -V来检查在编译的时候是否添加了此模块:
1234[root@envythink vhost]# nginx -Vnginx version: nginx/1.17.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) configure arguments: --user=nginx --gr ...
Nginx文件访问控制、结构优化和适配移动端
写在前面在前面我们使用Nginx基于来源IP或者用户账号密码等信息来做用户访问控制,其实使用类似的原理还可以使用Nginx来实现根据扩展名来限制程序和文件的访问、禁止访问指定目录下的所有文件和目录(屏蔽某些目录)等配置功能。之后还会学习如何对Nginx程序结构进行优化,最后介绍如何适配PC或者移动设备。
根据扩展名来限制程序和文件的访问一般来说,现在很多网站都是以用户为中心的,不仅支持用户发布文本内容到服务器,甚至还支持用户发送图片、视频、文件等内容到服务器上,但是给用户开启上传功能是很危险的,极有可能带来重大问题。
接下来举一个简单的例子,使用Nginx禁止访问上传资源目录下的PHP、SHELL、PYTHON、JAVA、GO等程序文件,这样即使用户上传了木马文件也无法执行,可以提高系统的安全性。如下所示:
1234567891011location ~ ^/images/.*\.(php|php5|sh|py|java|go)$ { deny all;}location ~ ^/static/.*\.(php|php5|sh|py|java|go)$ { ...
Nginx防盗链、爬虫和虚拟目录
写在前面前面学习的都是一些比较枯燥的内容,接下来学习一下较为有趣的配置,如使用Nginx来设置防盗链、防爬虫和虚拟目录等,学习和掌握这些有趣的知识可以提升自己的综合能力。
防盗链为什么需要防盗链?现在随着自媒体的发展,很多人开始以博流量为由,各种复制别人发布的文章,更有甚至将其标为原创来盗取他人的劳动成果,因此防盗链的设置显得尤为重要。
一般来说,当开发者对该网站做好防盗链之后,其他网站盗链本站的图片就会全部失效无法显示,但是如果用户是通过浏览器来访问本网站或者直接访问图片地址时,这些图片依旧是可以正常显示,且可以右键下载到本地,所以这只是对网站做的防盗链,对于用户还是挺友好的。
这是使用的是ngx_http_referer_module模块,通常使用它来阻挡非法的域名请求,请注意伪装Referer头部其实非常简单,因此这个模块只能用于阻挡大部分非法请求,而有些正常请求,如用户直接访问是不会携带Referer头部,但是这种情况是应当被允许的,因此不能拒绝来源Referer头部为空的请求。
在vhost文件夹下面新建一个hero.com.conf的配置文件,其中的内容为:
1234567 ...
Nginx安全优化
写在前面前面学习的都是如何使用Nginx,接下来学习更深层次的Nginx优化知识。我们可以通过修改或者隐藏Nginx版本号,或者更改Nginx服务的默认用户等方式来提升Nginx的安全性。
隐藏Nginx版本号在浏览器中访问一个不存在的链接,可以看到页面出现如下所示的信息:
可以看到它直接暴露了Nginx的版本号,这肯定是不安全的,除了这个版本号之外,还有其他的信息也是较为敏感的,开发者可以进入到Nginx安装所在机器,执行如下命令来查看输出信息:
12345678910[root@envythink vhost]# curl -I 127.0.0.1HTTP/1.1 200 OKServer: nginx/1.17.0Date: Wed, 18 May 2020 07:02:59 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Tue, 03 Nov 2020 01:18:28 GMTConnection: keep-aliveETag: "5fa0afe4-264"Accept-Range ...
Nginx日志文件
写在前面在前面学习Nginx目录结构的时候,可以发现它有一个logs目录,这是nginx日志的默认目录,里面包括访问日志(access.log)、错误日志(error.log)以及nginx.pid文件。nginx.pid文件就是nginx进程在启动后会将其pid写入这个文件中,这个没什么好学习的。现在学习的重点就是访问日志(access.log)和错误日志(error.log)。
访问日志(access.log)访问日志文件(access.log)记录了每个用户对网站的访问请求,这个功能是ngx_http_log_module模块提供的,access.log文件可以帮助站长分析用户的浏览行为。
日志格式首先打开access.log文件,查看一下其中的内容,如下所示:
可以看到日志文件的记录格式为“访问IP+访问时间+请求方法+请求路径+HTTP版本+状态码+代理信息”,这些都是我们从日志文件中能获取到的,但是这些肯定是可以定制的。
回忆之前的Nginx主配置文件nginx.conf,可以发现里面有如下一段代码:
也就是下面的代码片段其实就是用来定义日志文件的输出格式,这是默认的格 ...
Nginx解决跨域问题
写在前面在前面我们学习了HTTP请求、响应报文、简单请求和非简单请求,接下来开始学习Nginx如何解决跨域问题。
简单请求和非简单请求首先对前面学习的简单请求和非简单请求相关内容进行回顾。为什么需要区分简单请求和非简单请求,那是因为浏览器处理简单请求和非简单请求的方式不一样。
如果某个请求同时满足下面两个条件,那么该请求就属于简单请求:(1)请求方法是GET、POST或者HEAD三者中的任意一个;(2)HTTP头信息不超过下面几个字段:Accept、Accept-Language、Content-Language、Last-Event-IDContent-Type。请注意Last-Event-IDContent-Type只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain;
除此之外,凡是不同时满足这两个条件的,都属于非简单请求。
前面说过浏览器会针对这两种请求采取不同的处理方式,那么具体的处理方式又是怎样的呢?
简单请求对于简单请求来说,浏览器会在其头信息中增加Origin字段后直接发出,Orig ...
Nginx安装第三方模块和访问控制
写在前面在前面学习了Nginx如何实现反向代理和负载均衡,接下来开始学习如何在Nginx中安装第三方模块,以及如何基于来源IP或者用户名密码来对访问进行控制。
Nginx安装第三方模块前面介绍的4中负载均衡方法中,有两个是第三方模块,需要在Nginx中提前安装它们。开发者只需进入Nginx所在目录,然后执行如下编译命令即可:
1./configure --prefix=/你的安装目录 --add-module=/第三方模块目录
为了更好的获得演示效果,这里以Nginx安装echo模块为例进行介绍。请注意笔者Nginx的安装目录为/usr/local/nignx,下载目录为/home/envythink/nginx-1.17.0,这两者是不同的,当开发者需要执行编译或者安装第三方插件的时候,就需要进入到下载目录进行编译安装。
第一步,安装前测试。首先在/usr/local/nginx/conf/vhost下的envy.com.conf文件内新增如下的server配置:
123456789server { listen 82; server_name envy.com; ...
Nginx实现负载均衡
写在前面在前面我们对Nginx如何实现本地请求转发和反向代理进行了学习,接下来学习Nginx另一个较为重要的用途,实现服务端的负载均衡。
负载均衡负载均衡介绍一般情况下,客户端发送多个请求到服务器,服务器将处理这些请求,不过其中一部分请求可能要操作一些资源,如数据库、静态资源等,服务器处理完成请求后,再将结果返回给客户端。
对于早期的系统来说,由于功能不复杂,且并发请求相对较少,因此上述模式可以适用。但是随着业务不断更迭、访问量和数据量也在飞速发展,此时这种模式已经无法满足实际要求,当并发量比较大的时候,服务器非常容易发生宕机和崩溃。
很明显这就是服务器性能瓶颈带来的访问过载,除了不断加机器之外,还需要使用负载均衡来解决这一问题。
在请求数量达到指数级增长的时候,单个机器性能再优秀也无法满足需求,这时就必须采用集群的方式,将请求分发到多个机器上,其实就是将负载分发到多个机器上,这就是负载均衡。负载均衡的核心就是分摊压力。一般来说,Nginx实现负载均衡就是将请求转发给多个服务器,也就是服务器集群。
举一个司空见惯的例子,当你早高峰乘坐地铁的时候,工作人员会拿着大喇叭告诉你:“请往车厢两 ...