文档章节

Apache和PHP结合与默认虚拟主机

是江山
 是江山
发布于 2017/07/29 11:12
字数 2018
阅读 28
收藏 0

Apache和PHP结合

####httpd与PHP的结合方式:

输入图片说明

#####CGI:

CGI(common gateway interface)通常翻译为共同网关接口,是HTTP服务器与机器上的其他程序进行通信的一个接口,让Web服务器必要时启动额外的程序处理动态内容。CGI是一种协议,它定义了Webserver与CGI程序的通信方式。Webserver接受客户端的HTTP请求,然后建立进程执行CGI程序,客户端的请求被传递给CGI程序,CGI执行后结果再返回Webserver。 CGI的出现让WEB从静态变为为动态,随着Web的越来越普及,很多的网站的都需要有动态的页面,以便与浏览者互交。随着网络技术的发展,CGI方式的缺点也越来越突出。每次客户端请求都需要建立和销毁进程。因为HTTP要生成一个动态页面,系统]就必须启动一个新的进程以运行CGI程序,不断地fork是一项很消耗时间和资源的工作。

#####FastCGI:

众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中 并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等。

FastCGI是一个常驻型的CGI,可以一直执行,只要激活后,不会每次都花时间去fork一次,而且还支持分布式运算(使得php程序解释执行可以单独交给php服务器),即可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

1、Web Server 启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module); 2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。 3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。 4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 在正常的CGI模式中,php-cgi.exe在此便退出了。

#####Module:

把php编译为apache的模块,就要考虑apache的MPM的工作模式。

首先我们要了解什么是MPM:

MPM:Multi Path Modules (多道处理模块)用于定义apache在响应多个用户请求时所工作的模型。有三种MPM模式:

prefork(一个请求一个进程响应)

worker(一个请求用一个线程响应,启动多个进程每个进程生成多个线程)

event(一个进程处理多个请求)

以模块安装的php没有独立的进程,是作为apache的模块和apache一起启动的。

以上三种MPM模式,worker模式会比prefork模式占据更少的内存,高并发下的表现更好。而且使用多进程和多线程混合模式,即使有一个线程挂了,也只影响和该线程同进程的其他线程,不会影响到其他的进程。但是如果有特别多的线程都使用keep-alive的长连接方式,则线程会一直被占据直到超时才释放,导致在高并发场景下无可用线程。而event模式使用了一个专门的线程来处理这些keep-alive类线程,较好的解决了这个问题。

####比较:

以CGI方式运行PHP,由于CGI是非常驻内存集,每次Webserver接受客户端的HTTP请求,然后建立进程执行CGI程序,客户端的请求被传递给CGI程序,CGI执行后结果再返回Webserver。 每次浏览页面都要重复上面的动作,会有非常大的消耗。

以mod_php模式运行PHP,意味着php是作为apache的一个模块来启动的,因此只有在apache启动的时候会加载扩展模块,在apache运行期间是不会再去读取和加载扩展模块的。显然使用mod_php的方式运行PHP效率比CGI方式更高。

而mod_php与fastcgi相比,俩者都有进程池的概念,但是,fastcgi将服务器端动、静态请求更好的分离。php进程除了问题不会将web服务器也当掉。

最后再对几个名词进行解释:

php的解释器是php-cgi。php-cgi只是个CGI程序,只能解析请求,返回结果,不会进程管理,而php-fastcgi是php-cgi的升级版。php-fpm的功能就是能够调度php解释进程实现进程管理。

11.16/11.17 Apache默认虚拟主机

####windows设置hosts

hosts文件路径:C:\Windows\System32\drivers\etc\hosts

在该文件中可添加DNS解析

httpd的默认虚拟主机

一台服务器可以设置多个域名,而每一个域名就对应一个虚拟主机。当域名解析到该服务器时,都可以访问的虚拟主机就是默认虚拟主机。

httpd的主配置文件中定义只有一个虚拟主机,所以默认虚拟主机为:

ServerName www.example.com:80
只定义了“ServerName www.example.com:80”一个域名,该域名即为Apache的默认主机,此时通过任何一个绑定该虚拟机IP的域名进行访问都会跳转到该主机。

管理多个虚拟主机

修改httpd主配置文件

修改配置文件/usr/local/apache2.4/conf/httpd.conf,找到“Include conf/extra/httpd-vhosts.conf”,将该配置语句取消注释

检查,重载配置文件

[root@allen1 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@allen1 ~]# /usr/local/apache2.4/bin/apachectl graceful
重新加载配置文件后,之前定义的默认虚拟主机将失效。

虚拟主机配置文件

(1)虚拟主机配置文件位置:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf

(2)查看虚拟主机:该配置文件下每组“< VirtualHost *:80 >”代表一个主机(即:一个域名网站) 3、添加自定义虚拟主机

(1)修改配置虚拟主机配置文件

vim   /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    #虚拟主机根目录
    DocumentRoot "/data/wwwroot/abc.com"
    #虚拟主机域名
    ServerName abc.com
    #别名,可写多个域名
    ServerAlias www.abc.com www.123.com
    #错误日志存放路径
    ErrorLog "logs/abc.com-error_log"
    #访问日志存放路径
    CustomLog "abc.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
    #虚拟主机根目录
    DocumentRoot "/data/wwwroot/111.com" 
    #虚拟主机域名
    ServerName 111.com
    #别名,可写多个域名
    ServerAlias www.example.com
    #错误日志存放路径
    ErrorLog "logs/111.com-error_log"
    #访问日志存放路径
    CustomLog "111.com-access_log" common
</VirtualHost>
定义网站的核心参数即为:DocumentRoot(网站根目录)、ServerName(域名)。
注意: 虚拟主机生效后,原Apache配置文件中的默认虚拟主机(www.example.com ~ 192.168.8.133)就会失效(在此用www.example.com ~ 111.com进行验证)。

(2)创建虚拟主机根目录

[root@allen1 ~]# mkdir -p  /data/wwwroot/abc.com
[root@allen1 ~]# mkdir -p  /data/wwwroot/111.com

(3)添加测试文件

abc.com测试文件
vim /data/wwwroot/abc.com/index.php
<?php
echo "welcome to  aaa.com"
?>
111.com测试文件

vim /data/wwwroot/111.com/index.php
<?php
echo "welcome to  111.com"
?>

(4)检查,重载配置文件

[root@allen1 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@allen1 ~]# /usr/local/apache2.4/bin/apachectl graceful

4、测试

由于服务器并没有指定host,所以使用curl进行测试时需要使用-x指定代理ip和端口

[root@allen1 ~]# curl  -x 192.168.205.137:80  abc.com
welcome to  aaa.com
[root@allen1 ~]# curl  -x 192.168.205.137:80  111.com
welcome to  111.com
[root@allen1 ~]# curl  -x 192.168.205.137:80  abcde.com
welcome to  aaa.com
[root@allen1 ~]# curl  -x 192.168.205.137:80 www.example.com
welcome to  111.com
此时的默认虚拟主机为aaa.com,只要是访问该服务器的IP都会解析到该域名
而且之前httpd.conf中定义的虚拟主机已经失效
```
[apache所有的主机都指向第一个](http://www.aminglinux.com/bbs/thread-491-1-1.html)

© 著作权归作者所有

共有 人打赏支持
是江山
粉丝 4
博文 44
码字总数 24060
作品 0
苏州
运维
私信 提问
LAMP架构PHP模块支持与虚拟主机配置

11月14日任务 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机 Apache和PHP结合 编辑apache的主配置文件 修改后需要执行 验证是否成功启动 网页打不开的解决思路:服务器ip是否...

robertt15
2018/11/14
0
0
linux的Apache(http)与PHP的结合配置及Apache默认虚拟主机

Apache和PHP结合 配置httpd支持php 1. 修改配置文件: 修改一: 修改httpd的主配置文件/usr/local/apache2.4/conf/httpd.conf,搜索ServerName,把#ServerName www.example.com:80前面的#号删...

Gary_加油涛
2017/12/19
0
0
Linux中Apache与php结合以及Apache的虚拟主机配置文件

Apache默认虚拟主机 一台服务器可以访问多个网站,每个网站都是一个虚拟主机 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机 1.每个VirtualHost *:80 代表一个主机,一个...

zenw
2018/01/02
0
0
day42:虚拟主机及apache和php结合:

1、虽然apache和php安装完成,但是它们要结合到一起才可以使用:如下: 1:要修改httpd的主配置文件: /usr/local/apache2.4/conf/httpd.conf #修改完成后需要重启服务:有四处需要修改: 2:检...

芬野de博客
2018/08/24
0
0
LAMP架构(apache与php结合,apache默认虚拟主机)

一、apache与php结合 主配置文件/usr/local/apache2.4/conf/httpd.conf [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful (重新加载服务,并不重启服务) [root@localhos......

小新锐
2017/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
3
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
4
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部