web服务器-apache

HTML语言:超文本标记语言

使用html语言编写的文本叫超文本,"超文本"就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。

HTTP协议:超文本传输协议

HTTP使用统一资源标识符(URL)来建立连接和传输数据。是一个基于TCP/IP通信协议来传递数据的协议,属于应用层协议。

URL:统一资源标识符

统一资源标识符是对互联网上得到的资源的位置和访问方法的一种简单的表示,是互联网上标识资源的地址。

格式:http://www.learn.com:80/images/1.jpg

URI:统一资源标志符,URI与URL都是定位资源位置的,就是表示这个资源的位置信息,就像经纬度一样。URI是一种宽泛的含义更广的定义,而URL则是URI的一个子集。

一、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           :80             #监听端口
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>

猜你喜欢

转载自www.cnblogs.com/sswind/p/12033435.html