(httpd、php)2
(一)再说编译安装httpd2.4
新特性:
1:MPM(多处理模块)支持运行为DSO(动态共享,动态加载模式)机制,以模块形式按需加载,支持动态加载
2:event MPM生产环境可用
3:支持异步读写机制
4:支持每个模块和每个目录日志级别定义
5:每请求相关的专用配置
6:增强版的表达式分析式
7:支持毫秒级持久连接时长定义
8:基于FQDN的虚拟主机也不再需要NameVirtualHost directive
9:支持新的AllowOverrideList指令
10:支持自定义变量的使用
11:更低的内存消耗
12:支持fcgi
13:支持scgi
14:支持remote IP
再次编译httpd2.4
# 1:安装包组
yum groupinstall -y "Development tools" "Server Platform Development"
# 2:安装依赖开发包
yum install pcre-devel apr-devel apr-util-devel openssl-devel
# 3:解压本地的httpd-2.4.25.tar
tar xf httpd-2.4.25.tar
cd httpd-2.4.25
# 4:配置安装信息,生成make file, yum 安装的RPM包一般都是在/usr目录下
./configure --prefix=/usr/local/apache-2.4 --sysconfdir=/etc/httpd-2.4 --enable-so --enable-ssl --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-zlib --with-pcre --with-apr=/usr --with-apr-util=/usr --with-mpm=prefork
# 5:编译安装
make && make install
# 6:制作软连接,便于版本管控
ln -sv /usr/local/apache-2.4 /usr/local/apache
# 7:因为自带的Apache服务控制脚本:apachectl脚本在/usr/local/apache-2.4/bin/目录下,可以将这个目录添加到环境变量中,编辑 vi /etc/profile.d/httpd.sh , 添加export PATH=/usr/local/apache/bin/:$PATH,那么启动的时候,就可以直接使用apachectl start
vi /etc/profile.d/httpd.sh文件,添加如下代码
export PATH=/usr/local/apache/bin/:$PATH
. /etc/profile.d/httpd.sh
# 8:将头文件和库文件输出到默认的
ln -sv /usr/local/apache/include /usr/include/httpd
# 9:启动httpd2.4
apachectl start
# 10:编写服务脚本实现 service httpd start 启动httpd
vi /etc/rc.d/init.d/httpd-2.4 添加
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
HTTPD_LANG=${HTTPD_LANG-"C"}
INITLOG_ARGS=""
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
status -p ${pidfile} $httpd > /dev/null
if [[ $? = 0 ]]; then
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
else
echo -n $"Stopping $prog: "
success
fi
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=6
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
# Force LSB behaviour from killproc
LSB=1 killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
if [ $RETVAL -eq 7 ]; then
failure $"httpd shutdown"
fi
fi
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart|try-restart)
if status -p ${pidfile} $httpd >&/dev/null; then
stop
start
fi
;;
force-reload|reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
RETVAL=2
esac
exit $RETVAL
# 11:让脚本可以被chkconfig管控
chkconfig --add /etc/rc.d/init.d/httpd-2.4
# 12:使用service重启服务
service httpd-2.4 restart
(二)对于yum 安装的httpd2.4详解
前言:yum 安装的httpd2.4必须掌握
配置httpd2.4
(1)切换使用的MPM
/etc/httpd/conf.modules.d/00-mpm.conf 中选择需要的模式 ,打开独有的LoadModule,然后restart
(2)虚拟机基于IP的访问控制,位于<VirtualHost> </VirtualHost>
允许所有的主机访问:
Require all granted
拒绝所有的主机访问:
Require all deny
控制某特定的IP访问:
Require ip IPADDR:授权指定的IP访问
Require not ip IPADDR:拒绝
控制特定的主机访问:
Require host HOSHNAME:授权指定的来源的主句访问
Require not host HOSHNAME:拒绝
注意:如果允许所有的主机访问,但是拒绝192.168.10.2这台主机访问,要在<Directory>中加上一个容器,例如
<RequireAll>
Require all granted
Require not ip 192.168.10.2
</RequireAll>
(3)基于FQDN的虚拟主机不再需要NameVirtualHost指令
# www.a.com 虚拟机
<VirtualHost *:80>
ServerName www.a.com
DocumentRoot "/apps/www/a"
<Directory "/apps/www/a">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
# www.b.com 虚拟机
<VirtualHost *:80>
ServerName www.b.com
DocumentRoot "/apps/www/b"
<Directory "/apps/www/b">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
千万注意:对于httpd-2.4版本来说,任意目录下的页面只有被显示授权才能被访问
(三)对于httpd这样的web服务器中http协议说明
前言:
- 1:
什么是会话保持
请大家使用Google搜一搜什么是会话保持
- 2:
如何实现会话保持
(1)使用会话粘性
(2)使用会话服务器集群,会话保持在数据库里面
(3)使用会话服务器,会话保存在基于内存的NoSQL数据库中,如memcached或redis
- 3:
http协议
什么是请求报文
<方法> <请求URL> <协议版本>
<各种的请求的header>
<请求体>
什么是响应报文
<协议版本> <状态码> <是否ok>
<各种的响应的header>
<响应体>
- 4:
http协议的method介绍
GET :从服务器获取一个资源
HEAD :只从服务器获取文档的响应首部,不会获取响应的内容资源
POST:向服务器发送服务器要处理的数据,数据会保存在entity-body中
PUT:将请求的主体部分存储在服务器上,entity-body包含需要上传的内容
DELETE:删除服务器上的通过URL指定的文档
TRACE:追踪请求到达服务器中间经过的代理服务器
OPTIONS:让服务器返回对指定资源支持使用请求的方法
- 5:
http协议的状态码介绍
1xx:100-101,表示信息提示
2xx:200-206,成功
3xx:300-305,重定向
4xx:400-415,错误类信息,客户端错误
5xx:500-505,错误类信息,服务器端错误
常用状态码分类:
200:成功,请求的所有的数据通过响应报文的entity-body部分发送;ok
301:请求的URL指向的资源已经被删除,但是在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
302:与301相似,但是在响应报文中通过Location指明资源现在所处的临时的新位置;Found
304:客户端发出了条件式请求,但是服务器上的资源未发送改变,通过响应此响应状态码通知客户端,Not Modified
401:需要客户端输入账号和密码才能访问资源;Unauthorized
403:请求被禁止;Forbidden
404:服务器无法找到客户端请求的资源;Not Found
500:服务器内部错误;Internal Server Error
502:代理服务器从后端服务器收到了一条伪响应;Bad Gateway
- 6:
http协议的各个首部分类
(如何想深入学习,请移步《HTTP权威指南》)
1:通用首部:
Date:报文的创建时间
Connection:连接方式,如:keep-alive ,close
Via:显示报文经过的中间节点
Cache-Control:控制缓存的生效
2:请求首部:
Accept:告诉服务器客户端自己可以接受的媒体类型,也就是MIME类型
Accept-Charset:可以接受的字符集
Accept-Encoding:可以接受的编码格式,接受哪些压缩格式,如gzip
Accept-Language: 可以接受的语言
Host:请求的服务器名称,一般是域名
Referer:包含当前正在请求资源的上一级资源,就是上一级所在的域名
User-Agent:客户端代理
条件式请求首部:
Expect
If-Modified-Since: 自从自定的时间后,请求的资源是否发生过修改
If-UnModified-Since:自从自定的时间后,请求的资源是否没有发生过修改
If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器端的文档ETag标签不匹配
If-Match:本地缓存中存储的文档的ETag标签是否与服务器端的文档ETag标签匹配
安全请求首部
Authorization:向服务器发送认证信息,如:账号密码
Cookie:客户端向服务器端发送cookie
Cookie2:
代理请求首部 :
Proxy-Authorization:向代理服务器认证
3:响应首部:
信息性 :
Age:资源的有效期限,或 响应持续时长
Server:服务器程序的软件名称和版本,如:Apache,Nginx
协商首部:某资源有多种表示方法时使用
Accept-Ranges:服务器可以请求的访问类型
Vary:服务器查看的其他首部列表
安全响应首部 :
Set-Cookie:向客户端设置cookie
Set-Cookie2:
WWW-Authenticate:来自服务器对客户端的质询认证表单
4:实体首部 :
Allow:列出对此实体可使用的请求方法
Location:告诉客户端真正的实体位于何处
Content-Encoding:实体的编码格式
Content-Language:实体使用的语言
Content-Length:主体的长度
Content-Location:实体真正的所处位置
Content-Range
Content-Type:主体的对象类型
缓存:
ETag:实体的扩展标签
Expires:实体的过期时间
Last-Modified:最后一次修改的时间
(四)LAMP架构集群入门
LAMP简要介绍
L:Linux
A:Apache(httpd)
M:MySQL , Mariadb
P:php, perl , python
静态资源:图片,文档,视频,HTML代码,CSS代码,js代码等
动态资源:是程序文件,需要在执行引擎上执行后,返回给客户端
客户端技术:JavaScript(有机会一定要学习)
服务端技术:php, Java,Python(一定要学习),node.js,go(运维的趋势,跟着谷歌走,不拍栽跟头)
httpd:接受用户的web请求
php:运行PHP程序
MariaDB:数据管理系统
CGI:通用网关接口
作用:从客户端的网页浏览器向服务器上的应用程序传输数据
对于一个LAMP集群的请求流程
Client ---(http)---> httpd ---> (cgi协议) ---> PHP --- (mysql协议) ---> MySQL
PHP说明
脚本编程语言,使用PHP模板将PHP代码嵌入到HTML代码中,实现HTML页面的基于数据的动态化
http与php结合的方式
1:CGI
2:FastCGI
3:把php编译为httpd的模块
模块名为:libphp5.so
(五)LAMP架构集群进阶
安装LAMP
redhat 6:httpd,php, mysql-server , php-mysql
service httpd start
service mysqld start
redhat 7:httpd,php, mariadb-server , php-mysql
systemctl start httpd.service
systemctl start mariadb.service
简要说明MySQL
客户端程序:mysql
-u:指明用户名
-h:指明主机
-p:指明密码
例如:mysql -h192.168.23.10 -uroot -p
数据库SQL语言介绍(这个会在下周一一次性讲完,请同志们做好心理准备,其实很简单)
DDL:数据库定义语言
DML:数据库操作语言
DCL:数据库执行语言
例如:
grant all on testdb.* to testuser@'192.168.10.%' identified by '123456';
flush privileges;
检查PHP和MySQL是否安装成功检查代码
1:PHP
<?php
phpinfo();
?>
2:php连接mysql的测试代码
<?php
$conn = mysql_connect('192.168.10.3','yhy','123456');
if ($conn)
echo "ok";
else
echo "false";
?>
WordPress应用源码上线
(1)解压后,将目录放在web站点目录下,并且改名wp-config-sample.php为wp-config.php
(2)在mysql数据库中先创建wp数据库,并且给yhy用户授权 这是WordPress特殊的地方,其他的程序不需要
create database wpdb;
grant all on wp.* to yhy@'192.168.%.%' identified by '123456';
flush privileges;
systemctl restart mariadb.service
(3)编辑wp-config.php,修改如下配置
define('DB_NAME', 'wp');
/** MySQL数据库用户名 */
define('DB_USER', 'yhy');
/** MySQL数据库密码 */
define('DB_PASSWORD', '123456');
/** MySQL主机 */
define('DB_HOST', '192.168.10.3');
(httpd、php)2的更多相关文章
- (httpd、php)
(一)http协议介绍 http: 超文本传输协议,http协议是应用层协议,实现http协议的软件都监听的TCP的80端口之上.http协议也是一种文本协议,是基于TCP协议实现 http协议有几个 ...
- Java——搭建自己的RESTful API服务器(SpringBoot、Groovy)
这又是一篇JavaWeb相关的博客,内容涉及: SpringBoot:微框架,提供快速构建服务的功能 SpringMVC:Struts的替代者 MyBatis:数据库操作库 Groovy:能与Java ...
- iOS 小谈开发者中的个人、组织(公司、企业)账号
苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...
- 那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)
什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlo ...
- Python开发:环境搭建(python3、PyCharm)
Python开发:环境搭建(python3.PyCharm) python3版本安装 PyCharm使用(完全图解(最新经典))
- [UML]UML系列——类图class的关联关系(聚合、组合)
关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...
- 联合体union和大小端(big-endian、little-endian)
1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体.共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以 ...
- 《zw版·Halcon-delphi系列原创教程》 酸奶自动分类脚本(机器学习、人工智能)
<zw版·Halcon-delphi系列原创教程>酸奶自动分类脚本(机器学习.人工智能) Halcon强大的图像处理能力,令人往往会忽视其内核,是更加彪悍的机器学习.人工智能. ...
- VC++中操作XML(MFC、SDK)转
[转]VC++中操作XML(MFC.SDK) XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++ ...
随机推荐
- 2014年最热门的国人开发开源软件TOP100
2014年最热门的国人开发开源软件TOP100 不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多 ...
- AtCoder Regular Contest 059
C - いっしょ / Be Together 数据比较小,暴力就挺好的.O(n^2)可过的好题 #include <bits/stdc++.h> using namespace std; ...
- saltStack_安装和使用
服务端: yum install -y salt-master 客服端: yum install -y salt-minion 服务端启动: systemctl restartsalt-master ...
- loadrunner_关联检查点参数化
1.保存变量函数 lr_save_string("192.168.xx.xx","ip"); URL=http://{ip} 2.检查点函数 web_reg_f ...
- BLOB类型对应Long binary,CLOB对应Long characters
BLOB类型对应Long binary,CLOB对应Long characters
- vue实现购物车逻辑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- oracle中 =: 和 := 分别是什么意思
oracle中 =: 和 := 分别是什么意思 =:应该相当于 a = :b 表明b是个绑定变量,需要执行时进行变量绑定:= 相当于一般编程语言中的 赋值 a := 1 即将 数字1赋值给变量 a
- 如何让in/exists 子查询(半连接)作为驱动表?
一哥们问我,怎么才能让子查询作为驱动表? SQL如下: select rowid rid from its_car_pass7 v where 1 = 1 and pass_datetime > ...
- HDU 1828“Picture”(线段树+扫描线求矩形周长并)
传送门 •参考资料 [1]:算法总结:[线段树+扫描线]&矩形覆盖求面积/周长问题(HDU 1542/HDU 1828) •题意 给你 n 个矩形,求矩形并的周长: •题解1(两次扫描线) 周 ...
- linux 内核定时器的实现
为了使用它们, 尽管你不会需要知道内核定时器如何实现, 这个实现是有趣的, 并且值得 看一下它们的内部. 定时器的实现被设计来符合下列要求和假设: 定时器管理必须尽可能简化. 设计应当随着激活的定时器 ...