HTTP协议:超文本传输协议,Hyper Text transfer protocol(发明者:蒂姆.伯纳斯.李)
包含超链接(link)和各种多媒体元素的文本,这些超文本文件彼此相连,形成网状(web),
因此又被称为网页(web page),这些链接使用URL表示,文本格式一般为HTML或HTM
HTTP 0.9
HTTP 1.0
HTTP 1.1 当前最流行,更多的请求方法,更精细的缓存控制,支持持久连接
HTTP 2.0
URI:uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
URL:uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。格式:https://www.baidu.com/?tn=98010089_dg&ch=12
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式。
get 获得请求文件信息的数据内容(下载)
post 用户提交数据到服务器(上传)
put 明文上传数据(现在很少用)
head 获取报文首部
delete 删除某个资源
options 查询请求资源都支持什么HTTP方法
200 请求成功
201 上传文件成功
301 永久重定向(redirect)
302,307 临时重定向(redirect)
304 浏览器缓存
403 请求不到首页,没有权限
404 请求的资源在前端查明不存在
405 请求方法不支持
500 服务器的内部错误,程序错误
502 请求的资源前端有记录指向后端数据库,却找不到后端资源
503 服务暂时不可用
504 请求超时
短连接:建立一次tcp的连接,发起一次的HTTP请求,结束,tcp断开
长连接:建立一次tcp的连接,发起多次HTTP的请求,结束,tcp断开
(1)General概况
Request URL: https://www.baidu.com/ #请求的URL地址
Request Method: GET #请求的方法(获取)
Status Code: 200 OK #成功状态码
Remote Address: [2408:80f0:410c:1d:0:ff:b07a:39af]:443 #请求的地址(ipv4或ipv6)
Referrer Policy: no-referrer-when-downgrade #降级不推荐(从https降级到http)
(2)Request Headers:客户端请求头部信息
Accept: text/html #请求的类型
Accept-Encoding: gzip, deflate, br #是否进行压缩
Accept-Language: zh-CN,zh;q=0.9 #请求的语言
Connection: keep-alive #TCP长连接
cache-control:max-age=0 #缓存时间
Cookie: #客户端缓存,用户密码等网站信息
Host:www.baidu.com/ #请求的域名
Upgrade-Insecure-Requests: 1 #启用升级https访问
User-Agent: Mozilla/5.0 #客户端浏览器
(3)Response Headers:服务器响应头部信息
Cache-Control: private #缓存类型非公开(公开:pubLic)
Connection: keep-alive #长连接
Content-Encoding: gzip #压缩格式gzip
Content-Type: text/html;charset=utf-8 #文档类型
Date: Sat, 14 Mar 2020 08:48:02 GMT #响应时间
Expires: Sat, 14 Mar 2020 08:47:42 GMT #失效时间
Server: BWS/1.1 #网站服务器软件
status:200 #状态码
PV:页面浏览量
UV:独立客户浏览量
IP:独立ip浏览量
例子:50人,每人通过手机和电脑访问同一网站各两次,全部都用公司宽带上网,会产生多少pv、uv、ip?
答案:200 100 1
(1)用户输入域名->浏览器跳转->app缓存->DNS解析(递归查询|迭代查询)
(2)由浏览器向服务器发起tcp连接(三次握手)
(3)客户端发起HTTP请求:
请求的方法(获取)
请求的主机:域名
请求的资源类型(html)
请求的端口(80、443)
请求携带的参数(类型、压缩、认证等)
(4)服务器的响应:
服务器的web软件
响应的文件类型
是否压缩
是否长连接
(5)客户端向服务器发起tcp断开(四次握手)
10.用户访问网站流程:
(1)客户端发起HTTP请求,抵达网站的前端防火墙
(2)防火墙收到请求,分析判断是否符合规则,将合规流量通过tcp连接负载均衡器,传递用户HTTP请求
(3)负载均衡器收到请求,根据内容和策略进行下发任务,通过tcp连接web服务器,转发用户的HTTP请求
(4)web服务器收到用户的请求之后,解析请求内容:
静态请求:web服务器向nfs建立tcp连接,获取图片等静态文件,返回给负载均衡器
动态请求:由web服务器向后端的缓存或数据库建立tcp连接,将用户的动态请求传递给动态程序进行解析
(5)由数据库->动态程序->缓存->web->负载均衡器->防火墙->用户
##########################################################################
主流网站服务器软件:
Apache:时间较早,模块化设计,几乎可以运行在所有操作系统上,性能稳定;配置相对复杂,自身无法解析动态网页。
nginx:高性能、高并发的网站和反向代理服务器,也可做邮件代理,阿里再开发tengine应用于天猫和淘宝。
tomcat:java应用服务器,也是servlet容器,可以认为是Apache的扩展,可以独立运行,也可以和Apache合作。
Apache与nginx的区别:
nginx:配置简洁、反向代理、负载均衡、静态数据处理能力是Apache3倍以上,消耗内存少。
Apache:跨所有平台、支持通用网关接口(cgi)、支持多种动态网站语言(php,python,perl,java),模块组件比nginx多,运行稳定;配置复杂
1、MPM 支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能;
--enable-mpms-shared=all --with-mpm=event
2、支持 event
3、支持异步读写
4、在每个模块及每个目录上指定日志级别
5、增强版的表达式分析器
6、每请求配置:
7、毫秒级别的 keepalive timeout
8、基于 FQDN 的虚拟主机不再需要 NameVirtualHost 指令
9、支持使用自定义变量
rpm -q httpd \\查看是否安装
rpm -e httpd --nodeps \\卸载已安装的程序
把软件复制到虚拟机的/usr/src目录下或直接下载到虚拟机
如果编译安装无法执行,可能是开发软件工具没有安装,需要先安装开发软件:命令如下
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
编写脚本安装前提软件:
mkdir /sh
cd /sh
vim qianti.sh
添加:
#!/bin/bash
cd /usr/src
tar zxf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr && make && make install
cd ..
tar zxf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
cd ..
yum -y install zlib-*
tar zxf pcre-8.39.tar.gz
cd pcre-8.39
./configure --prefix=/usr/local/pcre && make && make install
cd ..
tar zxf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install
保存退出
执行脚本:sh qianti.sh
cd /sh
vim httpd.sh
添加:
#!/bin/bash
cd /usr/src
tar zxf httpd-2.4.25.tar.gz
cd httpd-2.4.25
./configure --prefix=/usr/local/httpd --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate && make && make install
保存退出
ln -s /usr/local/httpd/bin/* /usr/local/bin
添加系统服务
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
vim /etc/init.d/httpd
定位到第二行:修改为
# chkconfig: 35 85 15 \\声明服务启动级别,开机启动顺序,关机关闭顺序
# description: apache 2.4.25 \\服务声明,简要信息
保存退出
chkconfig --add httpd \\添加httpd到系统服务
chkconfig httpd on \\设置服务开机自启(等同于:systemctl enable httpd)
systemctl start httpd \\开启服务(等同于:service httpd start)
httpd -V \\查看版本和已装模块
httpd -l \\只查看静态编译模块
httpd -M \\查看所有模块
负责实现网络监听、请求的处理等功能,目的为了在不同的平台上实现最优化的性能和稳定性。
操作系统平台 MPM
BeOS beos
NetWare mpm_netware
OS/2 mpm_os2
linux prefork、worker、event
Windows mpm_winnt
非线程、预生成进程型MPM,一个子进程同一时间点仅能处理一个用户请求,根据并发请求数动态调整子进程
worker模式:
线程化、多进程型MPM,每个进程可生成多个线程,每个线程处理一个请求,缺点:长连接,资源容易被占用
event模式:
worker的改进版,使用监控线程处理长连接出现的资源占用问题
vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-mpm.conf 去除#号
systemctl restart httpd
vim /usr/local/httpd/conf/extra/httpd-mpm.conf
StartServers 3 #apache 启动时候默认开始的子进程数
MinSpareThreads 75 #最小空闲数量的工作线程
MaxSpareThreads 250 #最大空闲数量的工作线程
ThreadsPerChild 25 #每个子进程产生的线程数量
MaxRequestWorkers 400 #允许同时的最大接入请求数量
MaxConnectionsPerChild 0 #每个子进程可处理的请求数
#企业推荐参数
StartServers 2 #推荐设置:小=默认 中=3~5 大=5~10
MaxClient
使用ab压力测s 150 #推荐设置:小=500 中=500~1500 大型=1500~3000
MinSpareThreads 25 #推荐设置:小=默认 中=50~100 大=100~200
MaxSpareThreads 75 #推荐设置:小=默认 中=80~160 大=200~400 ThreadsPerChild 25 #推荐设置:小=默认 中=50~100 大型=100~200
MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~50000(此外,如果MaxClients/ThreadsPerChild大于16,还需额外设置ServerLimit参数,ServerLimit必须大于等于 MaxClients/ThreadsPerChild 的值。)
1.复制mysql5.6-rpm到虚拟机/root
cd /root/mysql5.6-rpm
yum -y localinstall *.rpm
systemctl start mysqld
systemctl enable mysqld
1.安装前提软件
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel openssl-devel bzip2-devel
2.复制libmcrpt和php包到/usr/src,安装libmcrypt加密工具
cd /usr/src
tar zxf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7/
./configure --prefix=/usr/local/libmcrypt && make && make install
3.安装php
cd /usr/src
tar zxf php-5.6.27.tar.gz
cd php-5.6.27/
./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts && make && make install
4.提供 php 配置文件
cp /usr/src/php-5.6.27/php.ini-production /etc/php.ini
5.为 php-fpm 提供脚本
cd /usr/src/php-5.6.27/
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
6.提供 php-fpm 配置文件并编辑
cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
7.启动php-fpm服务
systemctl start php-fpm
四.测试Apache与php的静/动分离
1.启用Apache服务的代理转发
vim /usr/local/httpd/conf/httpd.conf
找到下面三行,去除#号:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Include conf/extra/httpd-vhosts.conf
找到AddType所在行,添加:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
定位至 DirectoryIndex,改为:
DirectoryIndex index.php index.htm
保存退出
systemctl restart httpd
2.配置虚拟主机文件
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
改为:
ServerAdmin [email protected]
DocumentRoot "/var/www/benet"
ServerName www.benet.com
ServerAlias benet.com
ErrorLog "logs/benet.com-error_log"
CustomLog "logs/benet.com-access_log" common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/benet/$1
Options FollowSymLinks
AllowOverride None
Require all granted
保存退出
3.测试
(1)mysql服务器,创建测试数据库用户
mysql \\登录数据库命令
grant all on *.* to testuser@'%' identified by '123456';
(2)在 php 服务器上的/var/www/benet 目录下创建.php 的测试页:
vim /var/www/benet/index.php
添加:
phpinfo();
?>
保存退出
(3)在mysql服务器上测试访问Apache,会出现php内容
五.部署Discuz论坛
(1)复制Discuz包到apache和php服务器的/var/www/benet目录,解压并重命名赋权(步骤一样)
mkdir -p /var/www/benet
unzip Discuz_X3.3_SC_UTF8.zip
mv upload/ /var/www/benet/bbs
chmod -R 777 /var/www/benet/bbs
(2)在php服务器修改配置文件,重启服务
vim /etc/php.ini
找到下行并改为:
short_open_tag = On
保存退出
service php-fpm restart
(3)在mysql服务器上创建bbs数据库及用户(下面ip为本机ip)
mysql> create database bbsdb;
mysql> grant all on bbsdb.* to runbbs@'192.168.8.10' identified by 'pwd@123';
(4)访问Apache,安装discuz论坛
http://192.168.8.10/bbs