lamp

1、讲述httpd工作原理以rpm包的方式安装LAMP,配置基于域名的虚拟机主机并部署PhpMyAdmin、WordPress(提供https)、discuz

http协议介绍


http/0.9:1991,原型版本,功能简陋,只有一个命令GET。GET /index.html ,服务器只能回应HTML格式字符串,不能回应别的格式

http/1.0: 1996年5月,支持cache, MIME, method

每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接

引入了POST命令和HEAD命令

头信息是 ASCII 码,后面数据可为任何格式。服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME 多用途互联网邮件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型, 常见Content-Type值:text/xml image/jpeg audio/mp3

http/1.1:1997年1月

引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接

引入了管道机制(pipelining),即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率

新增方法:PUT、PATCH、OPTIONS、DELETE

同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking)

为避免上述问题,两种方法:一是减少请求数,二是同时多开持久连接。网页优化技巧,如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等

HTTP 协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度







1、建立连接:接收或拒绝连接请求

2、接收请求:接收客户端请求报文中对某资源的一次请求的过程

Web访问响应模型(Web I/O)

单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应

多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求

复用I/O结构:启动一个进程,同时响应N个连接请求

实现方法:多线程模型和事件驱动

多线程模型:一个进程生成N个线程,每线程响应一个连接请求

事件驱动:一个进程处理N个请求

复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

3、处理请求:服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理

元数据:请求报文首部

<method> <URL> <VERSION>

HEADERS 格式 name:value

<request body>

示例:

Host: www.magedu.com 请求的主机名称

Server: Apache/2.4.7

HTTP常用请求方式,Method

GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

4、访问资源:

服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

资源放置于本地文件系统特定的路径:DocRoot

DocRoot  /var/www/html

/var/www/html/images/logo.jpg

http://www.magedu.com/images/logo.jpg

web服务器资源路径映射方式:

(a) docroot

(b) alias

(c) 虚拟主机docroot

(d) 用户家目录docroot

5、构建响应报文:

一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体

1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:

描述了响应主体MIME类型的Content-Type首部

描述了响应主体长度的Content-Length

实际报文的主体内容

2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径

永久重定向:http://www.360buy.com

临时重定向:http://www.taobao.com

6、发送响应报文

Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了

7、记录日志

最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务


http mpm三种工作模型

prefork:多进程I/O模型,每个进程响应一个请求,默认模型

一个主进程:生成和回收n个子进程,创建套接字,不响应请求

多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个

worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型

一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

event:事件驱动模型(worker模型的变种)

一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

httpd-2.2:event 测试版,centos6默认

httpd-2.4:event 稳定版,centos7默认



实现步骤

安装lamp包 httpd php,php-mysql mariadb-server

yum install httpd, php, php-mysql, mariadb-server

systemctl start httpd.service

systemctl start mariadb.service


https://www.phpmyadmin.net/files/4.0.10.20/ 下载phpmyadmin



解压并进入目录 将范例文件更名 ,默认密码修改成随机的密码,将phpmyadmin解压至httpd根目录并且为了方便进入更改目录名

mv phpMyAdmin-4.0.10.20-source pma #更改目录名

mv config.sample.inc.php  config.inc.php #将范例文件更名


启动数据库,生成口令

systemctl restart mariadb

mysql_secure_installation #执行mysql安全脚本生成口令


yum install php-mbstring 安装phpmyadmin的依赖包

systemctl restart httpd #重新启动httpd服务

登录数据库名为root,密码为运行安全脚本时自己设置的密码。


创建wordpress数据库给wordpress使用,并创建用户



修改wpuser权限,可以管理wordpress库

wo

https://cn.wordpress.org/download/ 下载wordpress  注意。使用rpm方式实现lamp架构因为httpd php等版本更新较慢。下载wordpress时需要注意版本兼容问题。建议rpm安装时下载旧版wordpress

unzip wordpress-4.9.4-zh_CN.zip 解压wordpress安装包

cd wordpress/

cp wp-config-sample.php wp-config.php

修改配置文件,添加数据库账号 vim wp-config.php


访问成功


实现discuz 论坛

可在论坛中下载http://www.discuz.net/forum.php 

unzip Discuz_X3.3_SC_UTF8.zip 解压包

解压完成进入upload目录中可发现直接又install的目录。

http://192.168.64.136/upload/install/ 在游览器中直接输入开始安装


有些目录需要设置写权限。需要配置权限

setfacl -R -m u:apache:rw ./upload/




安装完成


实现虚拟主机使用域名解析

搭建wordpress

写入/etc/hosts 文件。加入域名

vim /etc/httpd/conf.d/test.conf 增加配置文件。

<virtualhost *:80>

DocumentRoot "/var/www/html/wordpress"

servername "www.a.com"

<directory /var/www/html/wordpress>

Require all granted

</directory>

</virtualhost>

添加以上字段。如果实现discurz论坛则需要修改discuz的目录

将documentroot 指向discuz的目录

curl www.a.com | less 测试连接成功


实现https 访问

利用mod_ssl实现加密功能

yum install mod_ssl

安装完成之后会自动生成公钥和私钥对,就自动完成了https加密的过程



搭建私有ca生成https功能

cd /etc/pki/CA目录

(umask 066;openssl genrsa -out private/cakey.pem 2048)生成私钥文件

生成自签名证书并签名

openssl req -new -x509 -key private/cakey.pem -out cacert.pem


创建ca的证书编号文件

touch index.txt

echo 01 > serial

客户机生成私钥,及证书申请文件,(我这里是在本机操作)

(umask 077;openssl genrsa -out httpd.key 1024)

openssl req -new -key httpd.key -out httpd.csr


给生成的证书申请签名

openssl ca -in /etc/httpd/conf.d/ssl/httpd.csr -out certs/httpd.crt -days 365


将生成证书和ca公钥颁发,(这里是拷贝,因为一台机器。)

cp certs/httpd.crt /etc/httpd/conf.d/ssl

cp /etc/pki/CA/cacert.pem /etc/httpd/conf.d/ssl/

修改mod_ssl模块的配置文件

vim /etc/httpd/conf.d/ssl.conf

修改证书文件路径。和key路径

和ca的公钥路径

到此就可以利用https访问网站了。

windows因为没有域名所以只能实现ip访问

在虚拟机中可以实现域名访问



2、编译安装LAMP且PHP以FASTCGI的方式工作并使用XCache为php加速

下载httpd,php,mariadb,源码包,因为新版httpd包不支持老版本的apr包所以还需要下载apr 和aprutil包


解压缩

[root@centos7 ~]# tar xf apr-1.6.5.tar.bz2

[root@centos7 ~]# tar xf apr-util-1.6.1.tar.bz2

[root@centos7 ~]# tar xf httpd-2.4.37.tar.bz2

将新版apr复制到httpd目录并且更名

[root@centos7 ~]# cp -r apr-1.6.5 httpd-2.4.37/srclib/apr

[root@centos7 ~]# cp -r apr-util-1.6.1 httpd-2.4.37/srclib/apr-util

下载开发包组用于编译安装

yum groupinstall "Development Tools" -y

安装依赖包

yum install pcre-devel   openssl-devel expat-devel

进入httpd目录开始编译安装cd httpd-2.4.37/

./configure --prefix=/app/httpd24 \

--enable-so \

--enable-ssl \

--enable-cgi \

--enable-rewrite \

--with-zlib \

--with-pcre \

--enable-modules=most \

--enable-mpms-shared=all \

--with-mpm=prefork \

--with-included-apr

make && make install 

解压数据库到/usr/local目录中,创建软连接,创建账号及数据库目录

tar -xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local/

ln -s mariadb-10.2.15-linux-x86_64/ mysql

useradd -s /sbin/nologin -r mysql -d /data/mysql

chown -R root.root mariadb-10.2.15-linux-x86_64/

mkdir /data/mysql

chown mysql.mysql /data/mysql

进入/usr/local/mysql/目录执行初始化安装脚本。生成数据库文件

scripts/mysql_install_db --user=mysql --datadir=/data/mysql



自定义一个数据库配置文件,并且修改数据库路径
mkdir /etc/mysql/

 cp support-files/my-huge.cnf /etc/mysql/my.cnf

mysqld下加入一行datadir=/data/mysql

将启动脚本设置为开机自启动


加入环境变量
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

. /etc/profile.d/mysql.sh

创建数据库并授权wordpress用户,如果连接拒绝,也可以使用root用连接。

编译安装php

需要安装依赖包

yum install libxml2-devel bzip2-devel libmcrypt-devel (epel) 

解压缩php。进入php目录

tar xf php-7.1.18.tar.bz2

./configure --prefix=/app/php \

--enable-mysqlnd \

--with-mysqli=mysqlnd \

--with-openssl \

--with-pdo-mysql=mysqlnd \

--enable-mbstring \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--enable-sockets \

--enable-fpm \

--with-config-file-path=/etc \

--with-config-file-scan-dir=/etc/php.d \

--enable-maintainer-zts \

--disable-fileinfo

make && make sintall 

生成配置文件和启动脚本

cp php.ini-production /etc/php.ini

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm


cd /app/php/etc #进入php编译完成后的目录

cp php-fpm.conf.default php-fpm.conf #将范例文件名修改成配置文件

cp php-fpm.d/www.conf.default php-fpm.d/www.conf




更改apache配置文件,使其能够支持php


vim /app/httpd24/conf/httpd.conf

取消下面两行的注释

LoadModule proxy_module modules/mod_proxy.so #开启代理功能模块

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

在末尾加入

ProxyRequests Off #//是否开启正向代理

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1 ##//开启FCGI反向代理,//前面的/相对于后面的/var/www/html而言,后面的$1是指前面的/(.*\.php)



wordpress安装

unzip wordpress-4.9.4-zh_CN.zip

将wordpress目录中的文件移动至httpd的首页目录/app/httpd24/htdocs/

生成配置文件并修改配置文件的数据库内容

mv wp-config-sample.php wp-config.php

运行mysql_secure_installation安全脚本生成密码


写入wordpress配置文件中。库名和账户密码。及主机


搭建成功

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容