一、apache详解

1. 概述

  apache是世界上使用排名第一的web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python/php等解释器编译到服务器中。

  apache可以支持ssl技术,支持多个虚拟主机。apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,故在一个apache web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器。

2. 工作模式

  apache一共有三种稳定的MPM模式(MPM:多进程处理模块),他们分别是prefork、worker、event。

prefork工作模式

  apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。

  优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。

  缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求。

worker工作模式

  使用了多进程和多线程的混合模式。他也预先fork了几个子进程(数量较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到一个线程来服务。线程比进程更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比prefork有更多的可用线程,表现更优秀一些。

  优点:占据更少的内存,高并发下表现优秀

  缺点:必须考虑线程安全的问题

event工作模式

  和worker工作模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。

  HTTP采用keepalive方式减少tcp连接数量,但是由于需要与服务器线程或进程进行绑定,导致一个繁忙的服务器会消耗完所有的线程。event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率,可用的线程数量就是关键的资源限制,此时event MPM方式是最有效的,但不能在HTTPS访问下工作。

查看方式:

httpd -V |grep -i "server mpm"

指定方式:

在编译时,在选项中指定,--with-mpm=xxx。

3. 相关文件保存位置

配置文件位置:

  源码包安装:  PREFIX/etc/httpd.conf(主配置文件)

          PREFIX/etc/extra/*.conf(子配置文件)

  rpm包安装:  /etc/httpd/httpd.conf

网页文件位置:

  源码包安装:  PREFIX/htdocs/

  rpm包安装:   /var/www/html/

日志文件位置:

  源码包安装:  PREFIX/logs/

  rpm包安装:  /var/log/httpd/

4. 配置文件详解

注:apache配置文件严格区分大小写

针对主机环境的基本配置参数

ServerRoot        /usr/local/apache2    #apache主目录
Listen    :          #监听端口
LoadModule php7          #加载的相关模块
User
Group     #用户和组
ServerAdmin #管理员邮箱
ServerName    #服务器名(没有域名解析时,使用临时解析。默认不开启)
ErrorLog "logs/error_log"       #服务器错误日志
CustomLog "logs/access_log" common #访问记录日志
DirectoryIndex index.html index.php #默认网页文件名,优先级顺序
Include etc/extra/httpd-vhost.conf #加载子配置文件中的内容

主页目录及权限

DocumentRoot “/usr/local/apache2/htdocs”
#网页文件存放目录(默认)
<Directory “/usr/local/apache2/htdocs”>
#定义指定目录的权限
Options Indexes FollowSymLinks
None #没有任何额外权限
All #所有权限(除去MultiViews以外)
Indexes #浏览权限(当此目录下没有默认网页文件时,显示目录内容) FollowSymLinks #准许软连接到其他目录
MultiViews #准许文件名泛匹配(需要手动开启模块才有效negotiation)
AllowOverride None
#定义是否允许目录下.htaccess文件中的权限生效
None #.htaccess中权限不生效
All #文件中所有权限都生效
AuthConfig #文件中,只有网页认证的权限生效
Require all granted (denied) #访问控制列表
</Directory> <IfModule dir_module>       #此标签用来指定访问到指定目录时自动加载哪个页面文件
DirectoryIndex index.php index.html #可写多个,但是有优先级之分
</IfModule>

5. 实验

1) apache的目录别名

当apache接受请求时,在默认情况下会将DocumentRoot目录中的文件送到客户端,如果想将某一不在DocumentRoot目录中的文件共享到网站上,并希望将它们留在本来位置而不需要进行移动的话,处理这种情况可以通过建立别名的方式将URL指向特定的目录

1. 编辑主配置文件

[root@localhost /usr/local/apache2/etc]# vim httpd.conf
Include etc/extra/httpd-autoindex.conf
#去掉注释,开启调用子配置文件

2. 编辑子配置文件

[root@localhost ~]# vim /usr/local/apache2/etc/extra/httpd-autoindex.conf
Alias /icons/ "/usr/local/apache2/icons/"
#结构:别名 “真实目录”
#真实目录的结尾要有/,否则报错
<Directory "/usr/local/apache2/icons">
Options Indexes MultiViews
AllowOverride None
Require all granted
</Directory>
根据模板编写一个自己需要的目录别名

2)apache用户认证

有时候,我们需要给一些特殊的访问设置一个用户认证机制,增加安全。比如我们的个人网站,一般都是有一个管理后台的,虽然管理后台本身就有密码,但我们为了更加安全,可以再设置一层用户身份认证。

1. 编辑配置文件

[root@localhost /usr/local/apache2/etc]# vim httpd.conf
#在需要进行登录认证的目录标签中加入如下配置 <Directory "/usr/local/apache2/phpmyadmin/htdocs/phpmyadmin">#声明被保护的目录
Options Indexes FollowSymLinks
AllowOverride All #开启权限认证文件.htaccess
Require all granted
</Directory>

2. 在指定目录下创建权限文件

切换到/usr/local/apache2/htdocs/phpmyadmin,创建 .htacess 文件,并添加以下内容

[root@localhost /usr/local/apache2/htdocs/phpmyadmin]# vim .htaccess
AuthName "welcome"
#提示信息
AuthType basic
#加密类型
AuthUserFile /usr/local/apache2/htdocs/apache.passwd
#密码文件,文件名自定义。(绝对路径)
require valid-user
#允许密码文件中所有用户访问

3. 建立密码文件,加入允许访问的用户。(此用户与系统用户无关)

[root@localhost /usr/local/apache2/htdocs/phpmyadmin]# ln -s /usr/local/apache2/bin/* /usr/local/bin/

[root@localhost /usr/local/apache2/htdocs/phpmyadmin]# htpasswd -c /usr/local/apache2/htdocs/phpmyadmin/apache.passwd test1
#-c 建立密码文件,只有添加第一个用户时,才能使用 -c
[root@localhost /usr/local/apache2/htdocs/phpmyadmin]# htpasswd -m /usr/local/apache2/htdocs/phpmyadmin/apache.passwd test2
#-m 再添加更多用户时,使用-m 参数

注:htpasswd 命令是httpd的命令,需使用绝对路径

4. 重启apache服务

[root@localhost ~]# httpd -t

[root@localhost ~]# systemctl restart httpd

先检查配置是否正确,然后通过浏览器测试。

3)虚拟主机

虚拟主机,也叫"网站空间",就是把一台运行在互联网上的物理服务器划分成多个"虚拟"服务器。虚拟主机技术极大的促进了网络技术的应用和普及。同时虚拟主机的租用服务也成了网络时代的一种新型经济形式。

虚拟主机的分类:

基于 IP 的虚拟主机:一台服务器,多个ip,搭建多个网站

基于端口的虚拟主机:一台服务器,一个ip,搭建多个网站,每个网站使用不同端口访问

基于域名的虚拟主机:一台服务器,一个ip,搭建多个网站,每个网站使用不同域名访问

实验准备:

1. 域名解析:准备两个域名

www.sohu.com

www.sina.com

#使用本地hosts 文件进行解析

2. 在/htdocs/ 目录下分别创建 sohu 和 sina 两个目录,并在新建目录内分别创建index.html文件(写不一样的内容)

实验步骤:

1. 修改主配置文件开启文件关联

[root@localhost /usr/local/apache2/etc]# vim httpd.conf
  Include etc/extra/httpd-vhosts.conf #取消此行的注释

2. 修改子配置文件,编写虚拟主机标签

[root@localhost /usr/local/apache2/etc/extra]# vim httpd-vhosts.conf
#添加以下内容,有几个虚拟主机就写几组(添加之前先把原先的示例删除) <Directory "/usr/local/apache2/htdocs/sohu">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
#目录权限标签根据需要自行添加
<VirtualHost 192.168.80.131:> #虚拟主机标签
ServerAdmin webmaster@sohu.com #管理员邮箱
DocumentRoot "/usr/local/apache2/htdocs/sohu" #网站主目录
ServerName www.sohu.com #完整域名
ErrorLog "logs/sohu-error_log" #错误日志
CustomLog "logs/sohu-access_log" common #访问日志
</VirtualHost> <Directory "/usr/local/apache2/htdocs/sina">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory> <VirtualHost 192.168.80.131:>
ServerAdmin webmaster@sina.com
DocumentRoot "/usr/local/apache2/htdocs/sina"
ServerName www.sina.com
ErrorLog "logs/sina-error_log"
CustomLog "logs/sina-access_log" common
</VirtualHost>

3. 重启服务,验证结果

Windows下:浏览器输入两个不同的域名验证网页内容(提前修改windows的hosts文件路径:C:\Windows\System32\drivers\etc)

Linux下:通过curl/elinks 命令验证:curl/elinks URL 地址(提前修改hosts文件)

4)域名跳转

一个站点难免会有多个域名,而多个域名总得有一个主次,比如我的网站可以用两个域名访问:www.sina.com和www.sohu.cn但大家发现不管我用哪个域名访问,最终都会跳转到www.sina.com上来。这个行为就叫做域名跳转,状态码:301是永久跳转,302是临时跳转,网站上一定要设置为301,这样对搜索引擎是比较友好的。

实验条件:

1. 虚拟主机能正常访问

2. 打开主配置文件开启重新模块

LoadModule rewrite_module modules/mod_rewrite.so    #取消注释

实验步骤:

1. 修改虚拟主机配置文件

[root@localhost /usr/local/apache2/etc/extra]# vim httpd-vhosts.conf

    <Directory "/usr/local/apache2/htdocs/sohu">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

2. 创建规则匹配文件

[root@localhost /usr/local/apache2/htdocs/sohu]# vim .htaccess
#在指定的网站目录下创建文件,并添加以下内容
RewriteEngine on
#开启rewrite功能
RewriteCond %{HTTP_HOST} ^www.sohu.com
#把以www.sohu.com 开头的内容赋值给HTTP_HOST 变量
RewriteRule ^(.*)$ http://www.sina.com/$1 [R=permanent,L]
#^(.*)$指代客户端要访问的资源
#$ 把.* 所指代的内容赋值到$1变量中
#R=permanent 永久重定向=
# L 指定该规则为最后一条生效的规则,以后的不再生效

3. 重启服务并测试

[root@localhost /usr/local/apache2/etc/extra]# httpd -t
Syntax OK
[root@localhost /usr/local/apache2/etc/extra]# systemctl restart httpd

通过测试,发现无论是sina 或 sohu 最终都是访问到 www.sina.com 域名上则实验成功。

5)apache+openssl实现https

HTTPS(全称Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,用于安全的HTTP数据传输。这个系统被内置于浏览器中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

1. 准备工作:

检查apache是否支持ssl,检查相应模块是否安装,若安装则将模块启用

模块存放目录:/usr/local/apache2/modules

检查模块是否启用:apachectl -M

2. CA证书创建

[root@localhost /usr/local/apache2/certs]# openssl genrsa -out apa.key
[root@localhost /usr/local/apache2/certs]# openssl req -new -key apa.key -out apa.csr
[root@localhost /usr/local/apache2/certs]# openssl x509 -req -days -sha256 -in apa.csr -signkey apa.key -out apa.crt

注1:生成秘钥和证书文件后,将文件存放在apache的安装目录下的certs目录下

注2:在生产环境中必须要在https证书厂商注册(否则浏览器不识别)

3. 配置文件修改

3.1 调用ssl 模块,并启用ssl独立配置文件

[root@localhost /usr/local/apache2/etc]# vim httpd.conf
LoadModule ssl_module modules/mod_ssl.so #取消注释
Include etc/extra/httpd-ssl.conf      #取消注释

 3.2 修改etc/extra/httpd-ssl.conf 配置文件,调用证书等文件

#添加SSL协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
#修改加密套件
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
#证书公钥配置
SSLCertificateFile "/usr/local/apache2/certs/apa.crt"
#私钥
SSLCertificateKeyFile "/usr/local/apache2/certs/apa.key"

3.3 修改主配置文件,添加虚拟主机

<VirtualHost _default_:>
DocumentRoot "/usr/local/apache2/htdocs"
ServerName localhost:
SSLCertificateFile certs/apa.crt
SSLCertificateKeyFile certs/apa.key
SSLCertificateChainFile certs/apa.crt
</VirtualHost>

4. 验证

[root@localhost /usr/local/apache2/etc]# httpd -t
Syntax OK
[root@localhost /usr/local/apache2/etc]# systemctl restart httpd

报错提示:
AH00526: Syntax error on line 78 of /usr/local/apache2/etc/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

解决办法:要么不调用此模块,要么让此模块加载上

 5. 强制调整https

  有时为了安全,网址不允许使用http 访问,仅允许使用https访问,目的是为了更加安全。

  在http部分的目录权限标签中添加以下内容:

<Directory "/usr/local/apache2/htdocs">
......
RewriteEngine on #开启转发规则
RewriteCond %{SERVER_PORT} !^$ #检查访问端口只要目标不是443的
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] #全都使用https重新访问
</Directory>

6)apache日志切割

我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大,如何避免产生大的日志文件?其实apache有相关的配置,使日志按照我们的需求进行归档,比如每天一个新日志,或者每小时一个新的日志

1. 首先简单设置日志的路径名

[root@localhost /usr/local/apache2/etc]# vim httpd.conf
#编辑添加以下内容
ErrorLog "logs/error_log"
CustomLog "logs/access_log" common

指定了日志存放在/usr/local/apache2/logs目录下,分别为error.log和access.log,common为日志显示的格式,日志格式可以参考配置文件httpd.conf 中的格式,如下:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

2. 设置apache日志分割

编辑配置文件 httpd.conf

ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined

注:若开启了https,需要修改http-ssl.conf 配置文件中的日志记录条目

ErrorLog是错误日志,CustomLog是访问日志。|就是管道符,意思是把产生的日志交给rotatelog这个工具,而这个工具就是apache自带的切割日志的工具。-l的作用是校准时区为UTC,也就是北京时间。86400,单位是秒,正好是一天,那么日志会每天切割一次。而最后面的combined为日志的格式,在httpd.conf中有定义。

7) 不记录指定文件类型的日志

如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的,比如网站的一些图片,还有js、css等静态对象。而这些文件的访问往往是巨量的,而且即使记录这些日志也没有什么用,那么如何忽略不记录这些日志呢?

 1. 配置日志不记录图片的访问

[root@localhost /usr/local/apache2/etc]# vim httpd.conf

#相关配置为
SetEnvIf Request_URI ".*\.gif$" image-request
SetEnvIf Request_URI ".*\.jpg$" image-request
SetEnvIf Request_URI ".*\.png$" image-request
SetEnvIf Request_URI ".*\.bmp$" image-request
SetEnvIf Request_URI ".*\.swf$" image-request
SetEnvIf Request_URI ".*\.js$" image-request
SetEnvIf Request_URI ".*\.css$" image-request
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs
/access_%Y%m%d.log " combined env=!image-request

在原来的访问日志配置基础上,增加了一些image-request 的定义,比如把gif、jpg、bmp、swf、js、css等结尾的全标记为image-request,然后在配置日志后加一个标记env=!image-request,表示取反。

8)apache配置静态缓存

所说的静态文件指的是图片、js、css等文件,用户访问一个站点,其实大多数元素都是图片、js、css等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总有一些时效性,那么就得设置这个过期时间。

1. 配置静态缓存

[root@localhost /usr/local/apache2/etc]# vim httpd.conf
<IfModule mod_expires.c> #此模块默认未启用,手动启用
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hours"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>

或者使用 mod_headers 模块实现:该模块默认启用

<IfModule mod_headers.c>
<filesmatch "\. (html|htm|txt)$">
header set cache-control "max-age=3600"
</filesmatch> <filesmatch "\. (css|js|swf)$">
header set cache-control "max-age=604800"
</filesmatch> <filesmatch "\. (ico|gif|jpg|jpeg|png|flv|pdf)$">
header set cache-control "max-age=29030400"
</filesmatch>
</IfModule>

要想使用这些模块,必须事先已经支持。查看是否支持:

apachectl -M

2. 重启服务并验证

httpd -t
systemctl restart httpd.conf

验证:

[root@localhost /usr/local/apache2/htdocs/image]# curl -x127.0.0.: '192.168.80.131/image/wallpaper.jpg' -I
HTTP/1.1 OK
Date: Mon, Dec :: GMT
Server: Apache/2.4. (Unix) PHP/7.0.
Last-Modified: Mon, Dec :: GMT
ETag: "28e63-599d3a5f44a96"
Accept-Ranges: bytes
Content-Length:
Cache-Control: max-age=86400
Expires: Tue, Dec :: GMT
Content-Type: image/jpeg

9)禁止解析php

某个目录下禁止解析PHP,这个很有作用,我们做网站安全的时候,这个用的很多,比如某些目录可以上传文件,为了避免上传的文件有木马,所以我们禁止这个目录下面的访问解析PHP。

配置禁止解析php

<Directory /usr/local/apache2/htdocs/image>
php_admin_flag engine off
<filesmatch "(.*)php">
Order deny,allow
Deny from all
</filesmatch>
</Directory>
 

web服务器-apache的更多相关文章

  1. Web服务器☞Apache VS Nginx

    Web服务器☞Apache VS Nginx LZ最近公司有一个项目在Web服务器选型上,在Apache和Nginx之间引起了一些讨论.这两者目前都是业内优秀的web服务器,都实现了HTTP1.1协议 ...

  2. Windows(Server)环境安装Web服务器(Apache,PHP,Mysql)图文教程

    Windows下Apache+PHP+MySQL搭建web服务器的方法,windows Server Install Apache PHP MySQL(图文详解) 环境准备: Windows Serv ...

  3. [转]web服务器apache架构与原理 &apache 监控

    web服务器                                                                                在开始了解Apache前,我 ...

  4. Ubuntu14.4下搭配WEB服务器(apache + php + mysql)

    今天,趁着自己动手安装web服务器的余热,将Ubuntu14.4搭配WEB服务器的过程记录下来. “一切皆文件”. 说明:网上关于类似搭配web服务器的教程,案例不计其数,但自己亲自动手“试试”,一定 ...

  5. Web服务器—Apache

    Apache配置文件:httpd.conf文件 # 指定Apache的安装路径,此选项参数值在安装Apache时系统会自动把Apache的路径写入. ServerRoot "/www/ser ...

  6. Mac上搭建Web服务器--Apache

    局域网搭建 Web 服务器测试环境,因为Mac OS X 自带了 Apache 和 PHP 环境,我们只需要简单的启动它就行了. 1.命令:sudo apachectl start Apache服务器 ...

  7. WEB服务器----Apache 安装配置

    1.官网下载需要的安装包(包括主安装包和依赖包的下载)可以直接使用Linux的wget进行下载: httpd安装包下载地址:http://mirrors.hust.edu.cn/apache//htt ...

  8. 搭建web服务器---Apache服务器

    一.安装Apache 尽管xampp appserv等提供了方便的集成环境,但实际上部署环境还是下载单独安装的Apache,以避免那些安全问题 二.加载php解析模块,并指定模块处理文件的类型 编辑h ...

  9. Web服务器(Apache)与Servlet容器(Tomcat)

    之前一直比较迷惑Apache与Tomcat的关系,通过查询资料,有所了解,现记录于此. Apache与Tomcat 两者定位:Apache是HTTP Web服务器,Tomcat是Web容器. 有一个非 ...

随机推荐

  1. MQ异步同步搜索引擎ElasticSearch数据踩坑

    业务背景 在大型网站中,为了减少DB压力.让数据更精准.速度更快,将读拆分出来采用搜索引擎来为DB分担读的压力,ElasticSearch就是目前市面上比较流行的搜索引擎,他的检索速度奇快.支持各种复 ...

  2. 复旦大学2018--2019学年第二学期(18级)高等代数II期末考试第六大题解答

    六.(本题10分)  设 $A$ 为 $n$ 阶实对称阵, 证明: $A$ 有 $n$ 个不同的特征值当且仅当对 $A$ 的任一特征值 $\lambda_0$ 及对应的特征向量 $\alpha$, 矩 ...

  3. ZROI 暑期高端峰会 A班 Day6 离线问题

    FBI Warning:本文含有大量人类本质之一. 动态联通问题 允许离线. 模板,不讲了. 归并排序 %@)(#&%)++%($@)%!#(&%)(&@))) 主定理 U^( ...

  4. vb.net 对字符串中的括号匹配进行判断,容许嵌套

    '   括号检查 '     括号共有四种:  1(英文圆括号),2(中文圆括号),3[方括号],4{花括号} '      要左右匹配(可以嵌套) Private Shared Function i ...

  5. PyCharmIDE: 给脚本传递参数

  6. Spring Cloud @RefreshScope 原理是什么?

    要清楚RefreshScope,先要了解Scope Scope(org.springframework.beans.factory.config.Scope)是Spring 2.0开始就有的核心的概念 ...

  7. c++primer(第五版) 阅读笔记

    快速阅读一遍c++ primer,复习c++ 1.本书代码:http://www.informit.com/store/c-plus-plus-primer-9780321714114 2.本书结构:

  8. Solr7.x学习(1)-安装

    1.下载solr-7.7.2.tgz和jdk-8u221-linux-x64.tar.gz 2.将文件解压到/usr/local目录 cd /usr/local/ tar -zxvf jdk-8u22 ...

  9. window 运行spark报错

    Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties // :: ERROR Shell: F ...

  10. linux ------ 在Vm 安装 centos系统

    -------------   简介 熟悉的操作系统*(android apple windows) 主要分类 1.应用领域(桌面.服务器.嵌入式) 2.源码开放程度(开源.闭源) 3.所支持的用户数 ...