仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2342|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之用 Apache Proxy 的指令(mod_proxy)改...

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:39:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
根据功能来进行封装等。很多的不懂,在使用搜索引擎查找,或者请教老师和在老师详细的讲解、指导下,都能顺利解决。   Apache Software Foundation 的 HTTP 办事器项目(凡是称为 Apache)是现今互联网上占有优势的 Web 办事器,它占有了 60% 以上的市场份额。Apache 办事器是日渐盛行的 LAMP 软件设置装备摆设的一局部。LAMP 是一套收费软件法式,是在 Linux?、Apache、MySQL 和 PHP 等开放源码手艺之上构建的 Web 平台。在本文中,您将进修一种利用 mod_proxy 模块和多个后端办事器来改善 LAMP 平安性的办法。我将会商这类办法的长处和弱点,并供应一个设置装备摆设示例。
  PHP 和 Apache:平安性困难
  LAMP 办理员面临的一个应战是,供应完全 PHP 体系的一切特征,同时确保为体系的一切用户供应一个平安的情况。利用 PHP 的平安形式是完成这一方针的一种手艺,然而它也过度地限制了用户,并且启用了这个举措措施以后,一些 PHP 使用法式就不克不及发扬感化。
  PHP 平安成绩的本源在于大多半 Apache 办事器的设置装备摆设体例。由于大多半 Apache 设置装备摆设运转在特别的 www-data 用户 ID 下,对 Web 站点停止主机托管的一切用户在默许情形下必需确保这个用户可以读取他们的文件。因而,体系上的一切其他用户都能够会见一个用户的一切 Web 可会见文件;所以体系上本来与您有关的平安破绽会成为进击您的 Web 站点的冲破口。假如文件或目次必需设置为 www-data 用户可写的,那末这类情形会加倍严重。
  经由过程利用 CGI 法式,好比用 Perl 和 Python 等盛行言语编写的法式,可以在利用 suEXEC 机制时消弭这个成绩的局部影响。复杂地说,suEXEC 利用一个特别的两头法式以法式一切者的用户 ID 履行 CGI 法式。这是一种十分无效的机制,已利用了很多年了。
  然而,在利用 mod_php 模块主机托管时,PHP 页面作为 Apache 主历程的一局部履行。因而,它们承继 Apache 历程的一切凭证,并且它们在文件体系上履行的任何任务必需作为 www-data 用户履行。
  在多个用户 ID 下运转 Apache
  关于下面描写的成绩,分明的处理计划是请求对一个用户域的一切恳求都来自一个只具有此用户的凭证的 Apache 实例。可以将 Apache 设置装备摆设为在启动时获得任何用户的凭证。关于给每一个用户分派一个独自的互联网可见 IP 地址/端口组合的复杂设置,这类办法可以处理成绩。
  关于更庞杂的设置(在个中 IP 地址很名贵),这类办法是有效的。当单一 Apache 实例可以掌握一个特定的 IP 地址/端口组应时,只能利用虚拟主机,这是 Apache 体系中普遍利用的一种手艺。这就扫除了让属于多个用户的多个域利用统一个 IP 地址/端口组合的能够性。
  Apache 2.0 引入了多处置模块(multiprocessing module,MPM) 的概念。在根基 Apache 2.0 包供应的 MPM 中有一个实行性的模块 perchild,它可以将一个散布器线程分派给 IP 地址/端口组合,并将恳求传递给在独自用户的凭证下运转的子线程,从而完成多个用户 ID 下的虚拟主机。遗憾的是,perchild 依然是实行性的,它纷歧定可以发扬感化,并且在 Apache 2.2 宣布时从正式 Apache 刊行包中删除。在此之前,因为熟悉到依然需求一个不乱的可以发扬感化的与 perchild 类似的 MPM,Apache 社区入手下手研发很多 MPM 来填补这一完善。MetuxMPM 和面向进程的 peruser 正在野着这个偏向勉力。
  一个处理计划:mod_proxy
  虽然还没有正式的 Apache MPM 可以直接供应多个用户 ID 下的虚拟主机,然而依然可以经由过程某些设置装备摆设和办理在 Apache 体系中完成这类行动。这类办法的中心概念是利用 mod_proxy 模块,这个模块(加上其他功效)使 Apache 可以将页面恳求转发给其他办事器,并将呼应传递回本来收回恳求的客户机。
清单 1. 根基恳求转发的反向代办署理设置装备摆设示例
ProxyRequests Off 
 
ProxyPass /foo http://foo.example.com/bar 
ProxyPassReverse /foo http://foo.example.com/bar 
  清单 1 中的代码是一个复杂的示例,它将对一个主机的 /foo 条理布局下任何页面的恳求转发到 http://foo.example.com/bar 的对应页面。例如,对 /foo/index.htm 页面的恳求会转发到 http://foo.example.com/bar/index.htm。可使用这一道理处理成绩。
  示例场景
  咱们来思索一个场景:Apache 办理员必需为两个独自的客户创立两个域。一个客户是在线创业企业,很存眷在线平安性。另外一个是团体客户,他在站点平安性方面对照宽松,能够将不平安的代码上载到这个站点。因而,Apache 办理员必需接纳办法将这两个站点隔分开。
  因而,办理员有两个域:www.startup.tld,它属于在线创业企业(用户 ID startup);和 www.reckless.tld,它属于团体(用户 ID nimrod)。为懂得决这个成绩,办理员决意利用 mod_proxy 处理计划。办理员给每一个用户一个独自的 Apache 实例,这个实例运转在用户本人的用户 ID 下,利用公有的 IP 地址/端口组合,并利用 mod_proxy 处理计划经由过程一个 facade 办事器供应对这两个用户的域的会见,这个办事器作为 www-data 运转,利用一个公共的 IP 地址/端口组合。图 1 申明了全部场景。
图 1. 场景示例

  保举的 Apache 版本
  关于示例使用法式设置装备摆设中的每一个元素,Apache 办理员应当利用 表 1 中列出的 Apache 版本。
表 1. 示例使用法式中利用的 Apache 版本
元素 Apache 版本 缘由
facade 办事器 Apache 2,运转 worker 或 event MPM Apache 2 对 mod_proxy 模块做了主要的改善。worker 和 event MPM 是线程化的,有助于削减 facade 办事器的内存开支。
后端办事器 Apache 1.3,或运转 prefork MPM 的 Apache 2 Apache 办理员必需意想到 PHP 模块不该该运转在线程化情况中。这两个处理计划为 PHP 模块供应了基于历程的情况。

  后端 Apache 实例的设置装备摆设
  清单 2 和 清单 3 中的代码片断申明了与尺度 Apache 设置装备摆设的根基差别。应当依据需求将它们添加到恰当的设置装备摆设中,好比这里疏忽的 PHP 功效设置装备摆设。
清单 2. 在线创业企业的 Apache 设置装备摆设
# Stuff every Apache configuration needs 
ServerType standalone 
LockFile /var/lock/apache/accept.startup.lock 
PidFile /var/run/apache.startup.pid 
 
ServerName necessaryevil.startup.tld 
DocumentRoot "/home/startup/web" 
 
# Essential modules 
LoadModule access_module /usr/lib/apache/1.3/mod_access.so 
 
# Which user to run this Apache configuration as 
User startup 
Group startup 
 
# This must be off else the host isn't passed correctly 
UseCanonicalName Off 
 
# The IP/port combination to listen on 
Listen 127.0.0.2:10000 
 
# Using name-based virtual hosting allows you to host multiple sites per IP/port combo 
NameVirtualHost 127.0.0.2:10000 
 
<VirtualHost 127.0.0.2:10000> 
    ServerName www.startup.tld 
 
    # You can add aliases so long as the facade server is aware of them! 
    ServerAlias startup.tld 
 
    DocumentRoot "/home/startup/web/www.startup.tld" 
 
    <Directory /home/startup/web/www.startup.tld/> 
      Options Indexes FollowSymLinks MultiViews ExecCGI Includes 
      AllowOverride All 
      Order allow,deny 
      Allow from all 
    </Directory> 
 
</VirtualHost> 
清单 3. 团体客户的 Apache 设置装备摆设
# Stuff every Apache configuration needs 
ServerType standalone 
LockFile /var/lock/apache/accept.nimrod.lock 
PidFile /var/run/apache.nimrod.pid 
 
ServerName necessaryevil.nimrod.tld 
DocumentRoot "/home/nimrod/web" 
 
# Essential modules 
LoadModule access_module /usr/lib/apache/1.3/mod_access.so 
 
# Which user to run this Apache configuration as 
User nimrod 
Group nimrod 
 
# This must be off else the host isn't passed correctly 
UseCanonicalName Off 
 
# The IP/port combination to listen on 
Listen 127.0.0.2:10001 
 
# Using name-based virtual hosting allows you to host multiple sites per IP/port combo 
NameVirtualHost 127.0.0.2:10001 
 
<VirtualHost 127.0.0.2:10001> 
    ServerName www.reckless.tld 
 
    # You can add aliases so long as the facade server is aware of them! 
    ServerAlias reckless.tld 
 
    DocumentRoot "/home/nimrod/web/www.reckless.tld" 
 
    <Directory /home/nimrod/web/www.reckless.tld/> 
      Options Indexes FollowSymLinks MultiViews ExecCGI Includes 
      AllowOverride All 
      Order allow,deny 
      Allow from all 
    </Directory> 
 
</VirtualHost> 
  清单 4 申明了门面 Apache 实例的设置装备摆设。
清单 4. 门面 Apache 实例的 Apache 设置装备摆设
# Stuff every Apache configuration needs 
LockFile /var/lock/apache/accept.www-data.lock 
PidFile /var/run/apache.www-data.pid 
 
ServerName necessaryevil.facade.server 
DocumentRoot "/home/www-data" 
 
# Essential modules 
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so 
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so 
 
# Which user to run this Apache configuration as 
User www-data 
Group www-data 
 
# These must be set else the host isn't passed correctly 
UseCanonicalName Off 
ProxyVia On 
ProxyRequests Off 
# This must also be set, though it's only an option in Apache2 
ProxyPreserveHost On   
 
# The IP/port combination to listen on 
Listen 9.20.1.1:80 
 
# Using name-based virtual hosting allows you to host multiple sites per IP/port combo 
NameVirtualHost 9.20.1.1:80 
 
# Configuration to forward requests for startup.tld 
<VirtualHost 9.20.1.1:80> 
    ServerName www.startup.tld 
    ServerAlias startup.tld 
 
    ProxyPass / http://127.0.0.2:10000/ 
    ProxyPassReverse / http://127.0.0.2:10000/ 
    ProxyPassReverse / http://www.startup.tld:10000/ 
    ProxyPassReverse / http://startup.tld:10000/ 
</VirtualHost> 
 
# Configuration to forward requests for reckless.tld 
<VirtualHost 9.20.1.1:80> 
    ServerName www.reckless.tld 
    ServerAlias reckless.tld 
 
    ProxyPass / http://127.0.0.2:10001/ 
    ProxyPassReverse / http://127.0.0.2:10001/ 
    ProxyPassReverse / http://www.reckless.tld:10001/ 
    ProxyPassReverse / http://reckless.tld:10001/ 
</VirtualHost> 
  必定要注重这里的 ProxyPreserveHost 指令。这个指令是 Apache 2 供应的,它处理了将准确的 HTTP 头转发给后端办事器的一些成绩。因而,激烈建议利用 Apache 2 实例作为 facade 办事器。
  运转示例设置装备摆设
  根用户应当运转每一个设置装备摆设。Apache 将获得设置装备摆设文件中指定的特权,并将其用于一切与主机相干的历程。清单 5 申明运转示例的办法。
清单 5. 启动示例办事器
  /usr/sbin/apache -f /etc/apache/startup.tld.conf 
/usr/sbin/apache -f /etc/apache/nimrod.tld.conf 
/usr/sbin/apache2 -f /etc/apache2/facade.tld.conf 
  mod_proxy 办法的限制
  必定要注重,本文中描写的办法不合用于需求 SSL 毗连的域。这是由于 SSL 协定不答应域的虚拟主机。因为这个限制,任何 SSL 主机必需以恰当的体例履行,让每一个 SSL 域利用它本人的 IP/端口组合。这个限制对一切 Apache 设置装备摆设都存在,利用这个处理计划的 Apache 也不破例。依然可以在它们的一切者的用户 ID 下运转 SSL 域。
  停止语
  在本文中,利用 Apache 的 mod_proxy 模块构建了一个情况,在这个情况中有一个门面办事器将恳求转发给两个后端办事器。可以对一系列后端办事器采取一样的办法。这类办法使体系办理员可以下降潜伏的平安风险,同时坚持 PHP 等东西供应的天真性。

也得学会了PHP。然后再学,见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历,得不偿失,最重要的是,你会被别人瞧不起。
再现理想 该用户已被删除
沙发
发表于 2015-2-4 04:54:12 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
小魔女 该用户已被删除
板凳
发表于 2015-2-5 00:05:28 | 只看该作者
做为1门年轻的语言,php一直很努力。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-8 00:51:07 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
只想知道 该用户已被删除
5#
发表于 2015-2-23 20:07:06 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
再见西城 该用户已被删除
6#
发表于 2015-3-7 10:06:51 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
精灵巫婆 该用户已被删除
7#
发表于 2015-3-14 20:13:08 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
老尸 该用户已被删除
8#
发表于 2015-3-17 11:08:32 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
莫相离 该用户已被删除
9#
发表于 2015-3-22 02:52:17 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
小妖女 该用户已被删除
10#
发表于 2015-3-30 18:40:41 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
小女巫 该用户已被删除
11#
发表于 2015-4-1 08:40:43 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
金色的骷髅 该用户已被删除
12#
 楼主| 发表于 2015-4-4 11:52:21 | 只看该作者
爱上php,他也会爱上你。
兰色精灵 该用户已被删除
13#
发表于 2015-4-6 13:57:33 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
冷月葬花魂 该用户已被删除
14#
发表于 2015-4-14 22:37:13 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
透明 该用户已被删除
15#
发表于 2015-4-16 12:11:55 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
飘灵儿 该用户已被删除
16#
发表于 2015-5-1 16:09:11 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
深爱那片海 该用户已被删除
17#
发表于 2015-5-1 17:11:55 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
因胸联盟 该用户已被删除
18#
发表于 2015-5-6 06:11:41 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
admin 该用户已被删除
19#
发表于 2015-6-6 04:25:54 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
乐观 该用户已被删除
20#
发表于 2015-6-8 16:06:53 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 22:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表