域名就相当于是一个 IP 地址的面具,目的是为了便于记忆和访问一个或一组服务器的地址(网站,电子邮件,FTP 等)。
如:www.baidu.com
这就是一个完整的 FQDN(一个完整的 FQDN = 主机名 + 域名)
www
baidu.com
URL 和 URI 它俩之间很相似,URL 比 URI 能够更精确的定位到资源,资源位置是绝对路径,URI 的资源位置可以是相对路径。
URL = https://www.baidu.com/
(https
服务端协议,www.baidu.com
访问的域名,/
访问的具体资源)
静态页面后缀格式:.html
.htm
.xml
动态页面后缀格式:.php
.asp
.jsp
.py
.cgi
网站传输协议:
http
:超文本传输协议,监听的端口为 TCP 协议的 80 端口,不加密。https
:安全超文本传输协议,监听的端口号为 TCP 协议的 443 号端口,加密传输,使用证书加密。HTTP:超文本传输协议是互联网上应用最为广泛的一种网络协议,协议的核心功能是传输 Web 服务器上的 HTML 页面及其它文件。
HTTP 协议是一个应用层协议,其报文分为请求报文和响应报文。当客户端请求一个页面时,会先通过 HTTP 协议将请求的内容封装在 HTTP 请求报文之中,服务器收到该请求报文后根据协议规范进行报文解析,然后向客户端返回响应报文。
HTTP 报文结构为:
状态码 | 分类 |
---|---|
100~199 | 信息性状态码 |
200~299 | 成功状态码 |
300~399 | 重定向状态码 |
400~499 | 客户端错误状态码 |
500~599 | 服务器端错误状态码 |
常见状态码: |
Apache 作为最早的 Web 服务程序,基于 HTTP 提供网页浏览服务;模块化设置、开放源代码、跨平台应用、支持多种 Web 编程语言、运行稳定。
Apache 的核心模块叫多路处理模块 Multi-Processing Module,简称 MPM。
epoll
机制来通知请求是否完成;https
支持的不完美。总结:
httpd -V | grep 'MPM'
可以查看当前使用模式。准备工作
主机名 | 操作系统 | IP地址 | 版本号 |
---|---|---|---|
Apache | CentOS 7.4 | 192.168.1.1 | httpd-2.2.17.tar.gz |
httpd
的核心中。静态编译的所有模块都会随着 httpd
的启动而启动。httpd
的核心中。要启动动态编译的模块,需要在配置文件中使用 LoadModule
指令加载。[root@Apache ~]# wget http://archive.apache.org/dist/httpd/httpd-2.2.17.tar.gz
[root@Apache ~]# tar zxf httpd-2.2.17.tar.gz -C /usr/src/
[root@Apache ~]# cd /usr/src/httpd-2.2.17/
[root@Apache httpd-2.2.17]# ./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-cgi && make && make install
注解:
--enable-so
:开启动态加载模块的功能。--enable-rewrite
:开启地址重写、重定向功能。--enable-cgi
:开启与一些动态编程语言之间进行交互的接口。./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-modules=most \
--enable-mpms-shared=all && make && make install
查看模块
/usr/local/httpd/bin/apachectl -D DUMP_MODULES # 会显示静态编译还是动态编译
[root@Apache httpd-2.2.17]# ln -s /usr/local/httpd/bin/* /usr/local/bin/ # 优化执行路径
[root@Apache ~]# httpd -v # 查看httpd版本
[root@Apache ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd # 复制启动文件
[root@Apache ~]# sed -i 1a'#chkconfig: 35 85 15' /etc/init.d/httpd # 在第一行后面插入
[root@Apache ~]# chmod +x /etc/init.d/httpd # 添加可执行权限
[root@Apache ~]# chkconfig --add httpd # 添加为系统服务
[root@Apache ~]# chkconfig httpd on # 设置开机自启
[root@Apache ~]# systemctl start httpd # 开启httpd服务
[root@Apache ~]# netstat -anpt | grep 80 # 查看端口是否开启
[root@Apache ~]# cd /usr/local/httpd/htdocs/
[root@Apache htdocs]# rm -rf index.html
[root@Apache htdocs]# mkdir baidu
[root@Apache htdocs]# mkdir sina
[root@Apache htdocs]# echo "www.baidu.com
" > baidu/index.html
[root@Apache htdocs]# echo "www.sina.com
" > sina/index.html
[root@Apache ~]# vim /usr/local/httpd/conf/httpd.conf
将主配置文件中的:
144 Options Indexes FollowSymLinks
替换为:
144 Options FollowSymLinks
[root@Apache ~]# systemctl restart httpd # 重启httpd服务
[root@Apache ~]# netstat -anpt | grep 80 # 查看端口是否开启
[root@Apache ~]# httpd -V | grep 'MPM'
参数 | 作用 |
---|---|
StartServers | 服务器启动时建立的子进程数量 |
MinSpareServers | 空闲子进程最小数量,当空闲子进程数小于该数值将产生新的子进程 |
MaxSpareServers | 空闲子进程最大数量,当空闲子进程数大于该数值将杀死多余子进程 |
MaxClinets | 限制用户最大并发数 |
MaxRequestsPerChild | 每个子进程在其生存期内允许处理的最大请求数量 |
[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
36 <IfModule mpm_prefork_module>
37 StartServers 5
38 MinSpareServers 5
39 MaxSpareServers 20
40 MaxClients 150
41 MaxRequestsPerChild 10000
42 </IfModule>
[root@Apache ~]# vim /usr/local/httpd/conf/httpd.conf
将主配置文件中的:
370 #Include conf/extra/httpd-mpm.conf # 去掉注释
替换为:
370 Include conf/extra/httpd-mpm.conf
[root@Apache ~]# systemctl restart httpd # 重启httpd服务
[root@Apache ~]# netstat -anpt | grep 80 # 查看端口是否开启
参数 | 作用 |
---|---|
StartServers | 服务器启动时建立的子进程数量 |
MinSpareServers | 空闲子线程最少数量,当空闲子线程数量少于该数值将产生新的子线程 |
MaxSpareServers | 空闲子线程最大数量,当空闲子线程数量大于该数量将杀死多余子线程 |
MaxClients | 限制用户最大并发数 |
MaxRequestsPerChild | 每个子进程在其生存期内允许处理的最大请求数量 |
[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
51 <IfModule mpm_worker_module>
52 StartServers 2
53 MaxClients 150
54 MinSpareThreads 25
55 MaxSpareThreads 75
56 ThreadsPerChild 50
57 MaxRequestsPerChild 10000
58 </IfModule>
切换到 Worker 工作模式
[root@Apache ~]# systemctl stop httpd
[root@Apache ~]# cat /usr/local/httpd/build/config.nice # 查看之前安装httpd的配置信息
[root@Apache ~]# cd /usr/src/httpd-2.2.17/
[root@Apache ~]# ./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-cgi \
--with-mpm=worker && make clean && make && make install
[root@Apache ~]# httpd -V | grep 'MPM' # 查看当前工作模式
[root@Apache ~]# systemctl start httpd # 开启httpd服务
[root@Apache ~]# netstat -anpt | grep 80 # 查看端口是否开启
[root@Apache ~]# ps aux | grep httpd # 查看httpd进程
参数 | 作用 |
---|---|
ServerLimit | 服务器开启最大的进程数 |
StartServers | 服务器启动时建立的子进程数量 |
MaxClinets | 限制用户最大并发数 |
MinSpareThreads | 空闲子线程最小数量,当空闲子线程数小于该数值将产生新的子线程 |
MaxSpareServers | 空闲子线程最大数量,当空闲子线程数大于该数值将杀死多余子线程 |
ThreadsPerChild | 每个子进程的最大并发线程数 |
MaxRequestsPerChild | 每个子进程在其生存期内允许服务的最大请求数量 |
[root@Apache ~]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf
添加:
111 <IfModule mpm_event_module>
112 ServerLimit 1000
113 StartServers 20
114 MinSpareThreads 25
115 MaxSpareThreads 1200
116 ThreadsPerChild 50
117 MaxRequestsPerChild 1000
118 </IfModule>
--with-mpm=event
选项指定,并且内核版本最低需要 2.6[root@Apache ~]# tail -3 /usr/local/httpd/logs/access_log
192.168.1.250 - - [12/Apr/2021:20:21:19 +0800] "GET /baidu/ HTTP/1.1" 200 23
192.168.1.250 - - [12/Apr/2021:20:21:19 +0800] "GET / HTTP/1.1" 403 202
192.168.1.250 - - [12/Apr/2021:20:21:19 +0800] "GET /favicon.ico HTTP/1.1" 404 209
日志字段所代表的内容:
-
取代了。"METHOD RESOURCE PROTOCOL"
,即 方法 资源 协议。GET
表示从服务器上请求数据,POST
表示向服务器发送数据,HEAD
表示只请求资源的首部。index.html
/baidu/index.html
…(请求的文件)