httpd和apache

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云解析 DNS,旗舰版 1个月
简介: httpd和apache

HTTP协议:超文本传输协议,Hyper Text transfer protocol(发明者:蒂姆.伯纳斯.李)



1.超文本


   包含超链接(link)和各种多媒体元素的文本,这些超文本文件彼此相连,形成网状(web),

   因此又被称为网页(web page),这些链接使用URL表示,文本格式一般为HTML或HTM

 



2.HTTP协议版本:


   HTTP 0.9

   HTTP 1.0

   HTTP 1.1 当前最流行,更多的请求方法,更精细的缓存控制,支持持久连接

   HTTP 2.0


3.URI和URL **


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则是具体的资源标识的方式。

 



4.HTTP请求报文的方法


   get  获得请求文件信息的数据内容(下载)

   post 用户提交数据到服务器(上传)

 

   put         明文上传数据(现在很少用)

   head     获取报文首部

   delete     删除某个资源

   options 查询请求资源都支持什么HTTP方法



 

5.HTTP返回状态码(status-code),由3位数字组成(*****)  


200                请求成功

201                上传文件成功

301                永久重定向(redirect)

302,307        临时重定向(redirect)

304                浏览器缓存

403                请求不到首页,没有权限

404                请求的资源在前端查明不存在

405                请求方法不支持

500                服务器的内部错误,程序错误

502                请求的资源前端有记录指向后端数据库,却找不到后端资源

503                服务暂时不可用

504                请求超时


6.HTTP的连接类型:keep-alive


短连接:建立一次tcp的连接,发起一次的HTTP请求,结束,tcp断开

长连接:建立一次tcp的连接,发起多次HTTP的请求,结束,tcp断开


7.用户访问网站携带的参数,以及服务器返回的参数


(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                                #状态码


8.HTTP统计术语:


PV:页面浏览量

UV:独立客户浏览量

IP:独立ip浏览量

例子:50人,每人通过手机和电脑访问同一网站各两次,全部都用公司宽带上网,会产生多少pv、uv、ip?

     答案:200    100    1

   



9.HTTP协议原理和流程


(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->负载均衡器->防火墙->用户


##########################################################################



一、安装httpd

主流网站服务器软件:

   Apache:时间较早,模块化设计,几乎可以运行在所有操作系统上,性能稳定;配置相对复杂,自身无法解析动态网页。

   nginx:高性能、高并发的网站和反向代理服务器,也可做邮件代理,阿里再开发tengine应用于天猫和淘宝。

   tomcat:java应用服务器,也是servlet容器,可以认为是Apache的扩展,可以独立运行,也可以和Apache合作。

   Apache与nginx的区别:

       nginx:配置简洁、反向代理、负载均衡、静态数据处理能力是Apache3倍以上,消耗内存少。

       Apache:跨所有平台、支持通用网关接口(cgi)、支持多种动态网站语言(php,python,perl,java),模块组件比nginx多,运行稳定;配置复杂

 


 

Apache2.4版本

   新特性:


       1、MPM 支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能;

       

--enable-mpms-shared=all --with-mpm=event

       2、支持 event

       3、支持异步读写

       4、在每个模块及每个目录上指定日志级别

       5、增强版的表达式分析器

       6、每请求配置:,

       7、毫秒级别的 keepalive timeout

       8、基于 FQDN 的虚拟主机不再需要 NameVirtualHost 指令

       9、支持使用自定义变量

 


 

Apache安装步骤:


1.检查是否已安装rpm包httpd


rpm -q httpd            \\查看是否安装
    rpm -e httpd --nodeps    \\卸载已安装的程序

2.安装前提软件


把软件复制到虚拟机的/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

 

 



3.安装Apache主程序


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


保存退出


4.优化链接


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)

5.查看httpd模块


httpd -V    \\查看版本和已装模块
httpd -l    \\只查看静态编译模块
httpd -M     \\查看所有模块


6.MPM(Multi Process Modules):多进程处理模块


   负责实现网络监听、请求的处理等功能,目的为了在不同的平台上实现最优化的性能和稳定性。

   操作系统平台            MPM

       BeOS                beos

       NetWare                mpm_netware

       OS/2                mpm_os2

       linux                prefork、worker、event

       Windows                mpm_winnt

 



7.prefork模式:


   非线程、预生成进程型MPM,一个子进程同一时间点仅能处理一个用户请求,根据并发请求数动态调整子进程

 worker模式:

   线程化、多进程型MPM,每个进程可生成多个线程,每个线程处理一个请求,缺点:长连接,资源容易被占用

 event模式:

   worker的改进版,使用监控线程处理长连接出现的资源占用问题


8.修改mpm配置文件


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 的值。)


9.使用ab命令进行压力测试

yum -y install httpd-tools
ab -c 1000 -n 10000 http://192.168.1.102/index.html   试命令进行160人并发访问,发出10000个请求。

二、安装mysql


1.复制mysql5.6-rpm到虚拟机/root

cd /root/mysql5.6-rpm
yum -y localinstall *.rpm
systemctl start mysqld
systemctl enable mysqld


三、安装php


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服务的代理转发

systemctl start php-fpm

找到下面三行,去除#号:

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 webmaster@benet.com
 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/ 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



相关文章
|
7月前
|
Linux 网络安全 Apache
Centos下操作Apache httpd
Centos下操作Apache httpd
133 0
|
人工智能 网络协议 安全
Apache(httpd)的简介、安装以及如何使用(上)
Apache(httpd)的简介、安装以及如何使用(上)
687 0
Apache(httpd)的简介、安装以及如何使用(上)
|
2月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
229 1
|
2月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
52 1
|
7月前
|
Shell Linux 网络安全
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
95 0
|
安全 Apache
CVE-2021-42013 Apache HTTPd 2.4.49 2.4.50 路径穿越以及RCE漏洞
影响版本 Apache 2.4.49 Apache 2.4.50 当前描述 发现Apache HTTP Server 2.4.50中对CVE-221-41773的修复不足。攻击者可以使用路径遍历攻击将URL映射到Alias类指令配置的目录之外的文件。如果这些目录之外的文件不受通常默认配置“要求全部拒绝”的保护,这些请求可能会成功。如果还为这些别名路径启用了CGI脚本,这可能允许远程代码执行。此问题仅影响Apache 2.4.49和Apache 2.4.50,而不影响早期版本。 环境搭建可以查看我的上一篇文章 https://developer.aliyun.com/article/11136
378 0
CVE-2021-42013 Apache HTTPd 2.4.49 2.4.50 路径穿越以及RCE漏洞
|
关系型数据库 MySQL 应用服务中间件
在Centos7上将Apache(httpd)切换为Nginx的过程记录
近期要上线几个基于tornado+motor的移动端接口服务,众所周知,Apache和tornado天生八字不合,尤其apache对python3尤为的不友好,tornado和nginx才是木石前盟,另外由于apache目前系统占用确实比较高,不光进程数多,httpd竟然占用了200多M,太庞大,决定换为较轻量级,高并发的nginx。
在Centos7上将Apache(httpd)切换为Nginx的过程记录
|
网络协议 安全 Apache
Apache(httpd)的简介、安装以及如何使用(下)
Apache(httpd)的简介、安装以及如何使用(下)
311 0
Apache(httpd)的简介、安装以及如何使用(下)
|
安全 网络协议 算法
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS
248 0
RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS

推荐镜像

更多