云计算可以帮助企业降低IT方面的成本和复杂性,并获得他们蓬勃发展所需的灵活性与敏捷性。但是,规划出通往云的明确路径并非易事。毕竟用户需要看透与云相关的市场大肆宣传,然后理解并分析不同种类的云计算模式的优点与缺点。此外,还需要确定备选的云中哪些最适合自己企业的战略、工作负载、性能、安全性需求和内部IT的专业知识,甚至希望将来某一刻可以完全地“Do it yourself“(自己动手)。

      本文将介绍“云“服务的三种类型,并讨论不同云计算模式满足什么类型的需要。

什么是云计算?

      云计算使用户能够通过Internet或专用网络访问软件、服务器、存储以及其他计算资源。这些资源与位置无关,具体表现在用户通常不需要管理甚至了解这些资源的实际位置。用户根据需要购买和使用IT资源,并根据使用量为其使用的服务付费。

      云计算构建在虚拟化技术的基础上,而虚拟化技术提供从弹性资源池中调配IT服务的功能。虚拟化可以将一个物理机分区为多个虚拟机,其中每一个虚拟机都可以独立与其他设备、应用程序、数据和用户交互,就像它是独立的物理资源一样。不同的虚拟机可以运行不同的操作系统和多种应用程序,同时共享单个物理计算机上的资源。因为每个虚拟机与其他虚拟机隔离,如果一个虚拟机崩溃,其他的不会受影响。除了使用虚拟化技术将一个计算机分区为多个虚拟机外,还可以使用虚拟化技术将多个物理资源合并为单个虚拟资源。存储虚拟化就是一个最好的例子:在此情况下,多个网络存储资源池化显示为单个存储设备,以实现对存储资源更轻松高效的利用和管理。

      虚拟机管理程序软件使虚拟化成为可能。这种软件也称为虚拟化管理器,位于硬件与操作系统之间,并使操作系统和应用程序与硬件隔离。虚拟机管理程序向操作系统和应用程序分配它们对处理器和其他硬件资源(例如内存和存储系统)所需的访问量。云提供商使用与他们提供的服务类型(存储、计算、带宽、有效用户帐户等)相关的计量功能来管理和优化资源。

云服务的常见类型:

      企业可以从数量不断增加的基于云的IT服务中进行选择和使用,并在不同类型的环境中部署它们。以下是三类最常见的“IT即服务”云产品:

软件即服务 (SaaS,Software as a Service) 使用户可以通过 Internet 访问软件应用程序。用户不必购买并在自己的计算机或设备上安装、更新和管理这些资源,而可以通过Web 浏览器访问并使用它们。SaaS 提供商在云中为用户管理软件、处理能力和存储。大多数 SaaS 解决方案在公共云中运行(详见下文),并以订阅或免费服务的形式提供。常用 SaaS应用程序的例子包括按需业务应用程序,例如 Salesforce.com、Google Apps for Business 和 SAP SuccessFactors,以及免费的社交网络解决方案,例如 LinkedIn 和 Twitter。
平台即服务 (PaaS,Platform as a Service) 提供在集成式云环境中开发、测试、运行和管理 SaaS 应用程序所需的基础架构和计算资源。拥有 Internet 连接的任何人都可以参与并开发基于云的解决方案,而不必寻找、购买和管理硬件、操作系统、数据库、中间件以及其他软件。大多数PaaS 供应商都可以提供比传统编程工具更易于使用的JavaScript、Adobe Flex 和 Flash 等工具。用户不必拥有或控制开发环境,但却能真正地控制他们在其中开发和部署的应用程序。一些知名度较高的 PaaS 提供商包括 Google App Engine、Windows Azure 和 Salesforce。
基础架构即服务 (IaaS,Infrastructure as a Service) 提供托管的 IT 基础架构,供用户调配处理能力、存储、网络和其他基础计算资源。IaaS 提供商运行并管理此基础架构,用户可以在此基础架构上运行选择的操作系统和应用程序软件。IaaS 提供商的例子有 Amazon Elastic Compute Cloud (EC2)、VerizonTerremark和 Google Compute Engine。
背景:rpmbuild时有一个make常常是这样写的,  make  DESTDIR=%{buildroot}  install,百这个buildroot是打包的路径,为何每次这样写都能奏效呢?是因为GUN的Make中约定俗成了的,如下。
     GNU Make中,有许多约定俗成的东西,比如这个DESTDIR:用于加在要安装的文件路径前的一个前缀变量。
比如,我们本地编译了一个第三方库,但需要对其打包发布给其他人使用,一方面如果我们安装到默认目录,比如/usr,这时,安装后的文件一但数量很大,则打包时很难找全;或者我们在configure时指定了--prefix,或cmake时指定了CMAKE_INSTALL_PREFIX,则pc文件内的编译依赖关系又会出错,变成了我们指定的那个路径,使用起来会很不方便。此时,DESTDIR就会派上用场。
DESTDIR只在make install时起作用,且和Makefile是由什么工具生成的没有关系,用法如下:
make install DESTDIR=<$CUSTOM_PREFIX>
在configure或cmake时,指定了要安装的路径后,以这种方式make install安装的文件会通通安装到以$CUSTOM_PREFIX为前缀的目录中,这样,开发者直接对这目录中的文件打包,即可发布使用。

来自:http://blog.csdn.net/coroutines/article/details/40891089
DownLoad:https://github.com/openresty/set-misc-nginx-module/
    最近公司运营提出需求,需要使从公司网站上下载的资料文件显示为中文名称,研发部问道我们有没有好的实现方法,php应该有这样的功能,研发回复说,之前就是这样实现过,但太消耗内存,不做考虑了,才有现在下载资料文件,显示中文名称没有实现。想了想,记起前段时间看agentzh(章亦春)大牛关于nginx的大作以及他写的nginx的模块,似乎有实现此类功能的模块,找了一下果然有:http://wiki.nginx.org/HttpSetMiscModule#Installation
利用其中 set_decode_base64 以及nginx 的 add_header 添加一个http头:Content-Disposition ,配合php代码实现。
nginx 添加模块重新编译
下载需要的模块:
到 https://github.com/agentzh/ 下载模块
agentzh-echo-nginx-module-v0.41-1-gb3ad5c1.tar.gz
agentzh-set-misc-nginx-module-v0.22rc8-5-ge79e7f0.tar.gz
simpl-ngx_devel_kit-v0.2.17-10-g4192ba6.tar.gz
解压到对应目录
安装:
./configure  --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/local/nginx_module/ngx_devel_kit --add-module=/usr/local/nginx_module/misc-nginx --add-module=/usr/local/nginx_module/echo-nginx

make -j2

make install
php 实现部分我也不是太懂,就不贴出来了。
nginx 相关配置段
点击在新窗口中浏览此图片
最终效果,上图
点击在新窗口中浏览此图片

各位童鞋注意啦:该种方式在使用CDN的网站中也可以生效的。
从该功能上线以来看,效果还不错,agentzh(章亦春)写的nginx模块那是杠杠的
参考:http://wiki.nginx.org/HttpSetMiscModule#Installation
来自:http://longzhiyi.blog.51cto.com/350171/964677
redis非授权访问的查毒过程,redis对外开端口时小心,或不要对外开端口:
http://lee90.blog.51cto.com/10414478/1857073
背景:有时在删除一些如ghost文件生成的~1这样的文件夹时,会提示没有权限,什么原因呢:1)是因为你不是administrator运行,也就不是最高权限在运行。2)这个文件夹是在之前重装系统时你有权的,但是后来重装后同样的用户Users但是uid不一样(姑且这样说),linux上有这个问题,估计windows下也有这个问题。

一)
怎么办呢?
就是在目录上加上当前用户Users的权限后,再删除就Ok了。

二)
怎么加呢?
(1)在目录上点右键后属性。
(2)点选安全后,在右下角点高级。
(3)点添加出来一个界面后,点主体[选择主体]。
(4)选择主体弹出来一个框里面,再点高级(A)...
(5)立即查找,找到Users,双击后添加进去点确定。
(6)回到点主体[选择主体]这个框里发现有Users这个用户了。下面有基本权限,咱勾选上【V】完全控制,点确认。
(7)于是在权限条目下面多了一个Users用户,且是完全控制的,完全控制也就是拥有所有对目录操作的权限,点确定才真的加上了,否则还是没加上哟。


这些步骤,做后,咱也就可以正常删除该目录了。

上面步骤涉及图片截图方面参考链接:http://jingyan.baidu.com/article/afd8f4de9fd3d634e386e950.html
背景:win10一堆无用的东西,在PC这块儿,得删除掉。
卸载预安装应用的方法就是你在开始菜单中输入“P”字母,系统就会自动反馈回“Windows PowerShell”应用程序,然后右键点击“以管理员身份运行”,会跳出蓝色的批处理界面,随后根据你的个人需求,输入相应的代码就能够轻松完成 Windows 10预安装应用的卸载工作。
From:http://www.111cn.net/sys/361/91862.htm

背景:jenkins结合ansible做一些关于批量部署的活时,Excute shell时用shell command时,如果只用sudo su -成功后(下面是一些输出如ttl没有啥的配置sudoers的方法),则下面再输whoami时,还是jenkins帐户,此时怎么办呢?咱只执行一个ansible的脚本,那就用-c参数解决之,如下:sudo su -c "/usr/bin/ansible-playbook /etc/ansible/deploy/spec.yml" 。

     前几天遇到一个问题,在一个终端中调用另一个shell,始终是无法执行的,后来捕捉到报错信息为sudo: sorry, you must have a tty to run sudo,后来,在网上了解到可以如下解决:
1. 编辑 /etc/sudoers

  1)Defaults    requiretty,修改为 #Defaults    requiretty,表示不需要控制终端。

  2)Defaults    requiretty,修改为 Defaults:nobody !requiretty,表示仅 nobody 用户不需要控制终端。

       如果修改为 Defaults:%nobody !requiretty,表示仅 nobody 组不需要控制终端。

其实只要注释掉)Defaults    requiretty 那个就可以了。表示在执行的时候不打开终端。但是,有的shell必须要有终端才可以执行。这样显然是不行的。后来,又找到一片文章才搞定。下面为抄录的,仅为记录以后使用。

有些程序/脚本可能在没有控制终端的环境下上执行(如系统启动服务时, Daemon,
或者是setsid启动的程序等) 但可能这个程序需要控制终端, 这这么办呢?
如我们的例子: 我们在linux启动时启动一个服务, 可是中间有个程序(旧的systemtap)使用了sudo
但sudo需要控制终端(当然可以通过修改sudo的配置文件, 但这样很对用户不友好啊)
例子: (setsid 启动的程序会失去控制终端)
# setsid sudo ls
sudo: sorry, you must have a tty to run sudo
(如果你的系统没有输出这句话, 那就是你的系统的sudo配置文件允许sudo可以在这个,
请确保已经设置了Defaults    requiretty)
没有控制中断的时候, 打开控制终端是这样的效果:
# setsid head -c 0 /dev/tty
head: cannot open `/dev/tty' for reading: No such device or address
为了解决这个问题, 所以应该使用能创建(伪)控制终端的程序来启动你的程序如: script, expect
如:
# setsid script -c "sudo ls" /dev/null
或:
# setsid expect -c 'spawn sudo ls; expect'
#打开控制终端成功:
# setsid script -c 'head -c 0 /dev/tty' /dev/null
# setsid expect -c 'spawn head -c 0 /dev/tty; expect'
不过 setsid 跟 script 组合使用有着奇怪的bug, 我这段时间非常的depression,
这样对script, expect来说, 都是大材小用了

查看原文请点:http://blog.chinaunix.net/u1/57250/showart_516605.html

业务背景:  yourcmd为我的linux程序,它对权限要求非常严格,当用php去执行yourcmd程序
系统:CentOS 6.3
apache是php的执行用户
用exec函数去执行linux系统上的程序/usr/local/yourcmd/sbin/yourcmd
php代码如下:


测试结果为没有权限:
Array ( [0] => sudo: no tty present and no askpass program specified )

解决步骤:
$ visudo
1)注释以下行
#Defaults    requiretty
2)在文件末尾加入以下
apache ALL=(ALL) NOPASSWD: ALL
Cmnd_Alias yourcmd = /usr/local/yourcmd/sbin/yourcmd
最后测试结果
Array ( [0] => Warning: memory is too small: 1044725760 [1] => test configure is ok )
来自:http://www.wyzu.cn/2015/0425/108848.html
==================为何这么修改?====================
PHP调用Shell脚本需要注意的问题:
php调用shell脚本的svnup.php文件内容:

<?
set_time_limit(0);
//$output = array();
$ret = 0;
exec("/usr/bin/sudo /data0/shell/svnvp.sh", $output, $ret);
echo "Result:{$ret}";
print_r($output);
?>

/data0/shell/svnvp.sh是更新的脚本,主要内容是svn up。

还需要修改sudo配置文件,直接键如visudo命令编辑配置文件:

1. 注释Defaults requiretty
Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。
否则会出现sudo: sorry, you must have a tty to run sudo

2. 增加行 Defaults visiblepw
否则会出现 sudo: no tty present and no askpass program specified

我发现sudo-1.6.9p17-5.el5是不支持这个参数的,sudo-1.7.2p1-10.el5支持。


3. 赋予www用户执行svn权限
如,增加行:www  ALL=(ALL) NOPASSWD: /data0/shell/svnvp.sh
注:NOPASSWD可以使在命令执行时不需要交互输入www 用户的密码

www用户为nginx或apache的运行用户

4.重启nginx或apache,让用户重新获得权限。

来自:http://www.codesky.net/article/201108/173995.html


背景:安装软件包的时候,被我手动终止了,可能导致yum的数据库事务啥的存在问题:
问题描述:



1、前提条件:安装软件包的时候,被我手动终止了
[root@dhcp yum.repos.d]# yum clean all
rpmdb: Thread/process 4541/140619363587840 failed: Thread died in Berkeley DB library
error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 -  (-30974)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
Error: rpmdb open failed
[root@dhcp yum.repos.d]# yum makecache
rpmdb: Thread/process 4541/140619363587840 failed: Thread died in Berkeley DB library
error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 -  (-30974)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

2、根据提示可以知道rpm数据库被损坏,如是按照下面的方法进行重建
[root@dhcp yum.repos.d]# cd /var/lib/rpm/
[root@dhcp rpm]# ls
Basenames     __db.004     Name            Pubkeys         Triggername
Conflictname  Dirnames     Obsoletename    Requirename
__db.001      Filedigests  Packages        Requireversion
__db.002      Group        Providename     Sha1header
__db.003      Installtid   Provideversion  Sigmd5
[root@dhcp rpm]# rm __db.* -rf
[root@dhcp rpm]# rpm --rebuilddb
[root@dhcp rpm]# yum clean all
Loaded plugins: aliases, changelog, downloadonly, kabi, presto, product-id,
              : refresh-packagekit, security, subscription-manager, tmprepo,
              : verify, versionlock
Updating certificate-based repositories.
Unable to read consumer identity
Loading support for Red Hat kernel ABI
Cleaning repos: rhel-source
Cleaning up Everything
0 delta-package files removed, by presto
[root@dhcp rpm]# yum update
Loaded plugins: aliases, changelog, downloadonly, kabi, presto, product-id,
              : refresh-packagekit, security, subscription-manager, tmprepo,
              : verify, versionlock
Updating certificate-based repositories.
Unable to read consumer identity
Loading support for Red Hat kernel ABI
rhel-source                                                | 4.0 kB     00:00 ...
rhel-source/primary_db                                     | 3.1 MB     00:00 ...
Setting up Update Process
No Packages marked for Update


来自:http://blog.sina.com.cn/s/blog_6fb8aaeb0101aegn.html
背景:在做zabbix的监控时候,用命名出现You have new mail in /var/spool/mail/root,一查是客户端的问题,因为一运行zabbix客户机上的脚本就出现这个,怎么屏蔽掉?

服务端:
zabbix_get  -s 10.72.2.XX -p 10050 -k "proc.num[nginx]"
addr:You have new mail in /var/spool/mail/root

客户端:
/usr/local/etc/script/nginx_status.sh active
1
You have new mail in /var/spool/mail/root

解决方法,步骤如下:

执行:
echo "unset MAILCHECK" >> /etc/profile
source /etc/profile

查看
ls -lth  /var/spool/mail/

清空:
cat /dev/null > /var/spool/mail/root

再实践一下,提示mail的话没了:
/usr/local/etc/script/nginx_status.sh active
1

最后,zabbix的客户端发现按要求无输出了,但是zabbix的服务端还有,也就是zabbix的服务端也需要按上面这种方法再执行一次就好了。EOF

摘自:http://blog.itpub.net/29819001/viewspace-1360978/
更多:
http://www.111cn.net/sys/CentOS/58857.htm

背景:这个buttonbar的功能主要是对一些经常执行又较长的一些命令进行浓缩,以更快捷的方式进行操作linux系统的shell。
经实践发现这个功能并不能批量,像view->command windows,里send command to all session,功能一样能批量给所有tab执行相同命令,但已经足够了。

http://jingyan.baidu.com/article/6b97984dce10981ca3b0bf45.html
RHEL/CentOS和Fedora


delete old vim rpm pkg:
yum remove vim*  -y

异步任务

以前在 Vim 里面调用外部一个程序(比如编译,更新 tags,Grep ,检查错误,git/svn commit)等,只能傻等着外部程序结束才能返回 Vim ,这也是 Vim 最受 emacs 诟病的地方,限制了很多可能性,导致NeoVim当年发布时,最先引入的新功能就是异步机制。如今 8.0中,可以在后台启动各种长时间运行的任务,并把输出重定向到 VimScript 里面的某个 callback 函数,和 nodejs的子进程管理模块类似,使得你可以一边浏览/编辑文件,一遍运行各种长时间编译类任务可以同时运行,并且把输出同步到 Vim 里的某个窗口中。

时钟机制

可以在 VimScript 中创建时钟,比如每隔100ms调用一下某个 VimScript 里面的函数,这样方便你定时检查各种状态,比如某项工作是否做完,或者某个与服务器的通信如何了。有这个机制配合 Python 可以实现纯脚本的终端,或者实现网络交互,实时读取一些股票信息并且显示在右下角之类的,这给 Vim 插件开发带来了更多可能性。

网络机制

可以用纯 VimScript + socket + json 和外部支持json的服务器进行通信,比如通知远程服务器做一件什么事情,或者查询个什么东西,不过使用 Timer + python 也可以达到同样的效果。
背景:将T60P升级为Windows10系统后,最近 买卫个独立 ThinkPad 键盘,需要蓝牙连接,但发现蓝牙设备没了,连右键后硬件列表里也没有,这可怎么办?
最佳答案: Fn+F5就可以打开。
如何安装:用驱动精灵,它会自己检测并安装上的。
背景:第一次连接ansible的host里的一堆机器时,会出标题里面的错,解决办法如下:
vi /home/xiangdong/ansible/ansible.cfg
# uncomment this to disable SSH key host checking
host_key_checking = False
—————————————————————————————————————————
提示输入yes 进行确认为将key字符串加入到  ~/.ssh/known_hosts 文件中:
本篇就结合一个示例对其进行下了解。我在对之前未连接的主机进行连结时报错如下:

[root@361way.com ~]# ansible test -a 'uptime'
10.212.52.14 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.
10.212.52.16 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.
从上面的输出提示上基本可以了解到由于在本机的~/.ssh/known_hosts文件中并有fingerprint key串,ssh第一次连接的时候一般会提示输入yes 进行确认为将key字符串加入到  ~/.ssh/known_hosts 文件中。

方法1:

了解到问题原因为,我们了解到进行ssh连接时,可以使用-o参数将StrictHostKeyChecking设置为no,使用ssh连接时避免首次连接时让输入yes/no部分的提示。通过查看ansible.cfg配置文件,发现如下行:

[ssh_connection]
# ssh arguments to use
# Leaving off ControlPersist will result in poor performance, so use
# paramiko on older platforms rather than removing it
#ssh_args = -o ControlMaster=auto -o ControlPersist=60s
所以这里我们可以启用ssh_args 部分,使用下面的配置,避免上面出现的错误:

ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no
方法2:

在ansible.cfg配置文件中,也会找到如下部分:

# uncomment this to disable SSH key host checking
host_key_checking = False  
默认host_key_checking部分是注释的,通过找开该行的注释,同样也可以实现跳过 ssh 首次连接提示验证部分。由于配置文件中直接有该选项,所以推荐用方法2 。


来自:http://www.361way.com/ansible-cfg/4401.html
我们再来讲讲DSO动态编译的方法:
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。

我尝试在fedora core 3中安装apache 2. 当我解压了apache 2.0.54后使用configure工具并且加入了 --enable-so 或者 --enable-modules=so (两个我都试过了)
去make并且make install了。我希望在/apache2/modules/目录里有各种模块,但是这个文件最后只包含了一个httpd.exp文件。 为什么?哪里出错了?
谢谢


Because you're just telling apache to enable the use of shared modules. You also need to tell it to MAKE the shared modules.

You can use these compile flags:
--enable-mods-shared='headers rewrite dav' (where you list the mods. you want)
--enable-mods-shared=most ( compiles "most" modules )
--enable-mods-shared=all ( compiles all modules )

因为你只告诉了apache可以使用共享模块。你还需要告诉它要MAKE共享模块

你可以使用如下的这些编译标志
--enable-mods-shared='headers rewrite dav' (凡是你想编译的模块都可以写到后边的引号里面,以空格分隔)
--enable-mods-shared=most (编译最多的模块)
--enable-mods-shared=all (编译所有模块)
动态编译还是静态编译的效率问题:http://jackxiang.com/post/4029/
来自:http://m.blog.csdn.net/article/details?id=6977466
我们再来讲讲DSO动态编译的方法:
首先编译安装apache
tar zvxf apache_1.3.27
cd apache_1.3.27
./configure --prefix=/usr/local/apache --enable-module=so \
--enable-module=rewrite --enable-shared=max &&
make &&
make install
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。
在某个论坛里找到了解决方法。
package-cleanup --cleandupes
1
然后再
yum install openssh
1
就可以了
地址:
http://bbs.chinaunix.net/thread-4173797-1-1.html

更多:http://www.path8.net/tn/archives/5974
背景:这块儿说是加速,还真是不明白,先扔这儿。
使用redis加速ansible

我们知道,每次使用ansible时候都要收集系统信息,那一步占用挺多时间的,我们可以用redis把GATHERING的时间给省下来。

1. ansible.cfg

[defaults]
gathering = smart
fact_caching = redis
fact_caching_timeout = 86400

2. install redis
mac下面

brew install redis

vim /usr/local/etc/redis.conf
···
daemonize yes
···
/usr/local/bin/redis-server /usr/local/etc/redis.conf

3. install python driver

sudo  easy_install pip
sudo pip install redis

如果redis端口不是6379,可以用fact_caching_connection限定:

fact_caching_connection = 127.0.0.1:6378

来自:http://blog.csdn.net/aca_jingru/article/details/46532063
背景:阿里搞的lvs,在七层交换时出现获取不到正确的remote_addr的情况,昨天那个取不到remote_ip的把lvs修改成4层交换就O了,可以通过$ip=$_SERVER["REMOTE_ADDR"]; 获取到用户端的出口IP的。


(1).REMOTE_ADDR:浏览当前页面的用户计算机的ip地址

(2).HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关

(3).HTTP_CLIENT_IP:客户端的ip

在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

不过要注意的事,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。
来自:http://www.jb51.net/article/27880.htm
更详细的解释如下:


REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造)
$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

三个值区别如下:

一、没有使用代理服务器的情况:

REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

//获取用户IP
$ip = '';
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_FROM', 'REMOTE_ADDR') as $v) {
   if (isset($_SERVER[$v])) {
       if (! preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $_SERVER[$v])) {
                continue;
   }
          $ip = $_SERVER[$v];
   }
}

uset($ip,$v);

来自:http://www.cnblogs.com/jackluo/archive/2013/03/03/2941411.html
安装一下iotop程序。
可以通过yum install intop 安装

通过rpm -qa |grep iotop 确认是否已经安装好, 直接通过io  tab补全查看有这个命令

使用iotop命令: iotop  -o 直接查看输出比较高的磁盘读写程序。
使用该命令有个条件,Linux内核要高于2.6.20的版本,版本过低则没有此命令:yum install iotop 安装,后:
TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                        
14453 be/4 mysql       3.87 K/s  603.68 K/s  0.00 % 10.13 % mysqld --basedir=/usr/local/mysql --data~.pid --socket=/tmp/mysql.sock --port=3306
    1 be/4 root     1691.07 K/s    0.00 B/s 31.45 %  9.55 % systemd --switched-root --system --deserialize 21
14449 be/4 mysql      11.61 K/s  247.66 K/s  0.00 %  9.53 % mysqld --basedir=/usr/local/mysql --data~.pid --socket=/tmp/mysql.sock --port=3306


LINUX下找出哪个进程造成的IO等待很高的方法 :
在本机测试通过^^
抓哪个进程干坏事前要先停掉syslog
/etc/init.d/syslog stop
echo 1 > /proc/sys/vm/block_dump
dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head
1423 kjournald
1075 pdflush
209 indexer
3 cronolog
1 rnald
1 mysqld
不要忘记在抓完之后关掉block_dump和启动syslog
echo 0 > /proc/sys/vm/block_dump
/etc/init.d/syslog start

来自:http://blog.itpub.net/16978544/viewspace-696756/



实践用最新的:
wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.39/pcre-8.39.tar.gz

根据下面这个链接,编译好相关apache需要的包后,

#apachectl –l

看到的prefork.c,说明使用的prefork工作模式。

可以在编译的时候使用#--with-mpm=prefork对应的工作模式名称来修改工作模式:
./configure --help|grep with-mpm
  --with-mpm=MPM          Choose the process model for Apache to use by

加上就好了:
[root@iZ25dcp92ckZ bin]# ./apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c
[root@iZ25dcp92ckZ bin]# ./apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  prefork.c



1root两www进程,搞定:
/usr/local/apache2/bin/httpd -k restart
/usr/local/apache2/bin/httpd -k restart
/usr/local/apache2/bin/httpd -k restart
静态:
在使用./configure 编译的时候,如果不指定某个模块为动态,即没有使用:enable-mods-shared=module或者enable-module=shared 这个2个中的一个,那么所有的默认模块为静态。 那么何谓静态?  其实就是编译的时候所有的模块自己编译进 httpd 这个文件中(我们启动可以使用这个执行文件,如: ./httpd & ) ,启动的时候这些模块就已经加载进来了,也就是可以使用了, 通常为:<ifmodule> </ifmodule> 来配置。所以大家看到的配置都是 <ifmodule  module.c>  ,很显然,module.c这个东西已经存在 httpd这个文件中了。

动态:
就是编译的时候,使用enable-module=shared 或者enable-modules-shared=module 来动态编译。  那么什么是动态?  静态是直接编译进httpd中, 那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块, 而是给你一个module.so 文件,你一定要使用 loadmodule 这个语法来加载,这个模块才有效。
From:http://xtony.blog.51cto.com/3964396/836508/

Apache安装apr和apr-util作用:
安装Apache的时候,为什么要安装apr和apr-util呢
要测APR给tomcat带来的好处最好的方法是在慢速网络上(模
拟Internet),将Tomcat线程数开到300以上的水平,然后模
拟一大堆并发请求。如果不配APR,基本上300个线程狠快就会
用满,以后的请求就只好等待。但是配上APR之后,并发的线
程数量明显下降,从原来的300可能会马上下降到只有几十,
新的请求会毫无阻塞的进来。
APR对于Tomcat最大的作用就是socket调度。
你在局域网环境测,就算是400个并发,也是一瞬间就处理/传

输完毕,但是在真实的Internet环境下,页面处理时间只占
0.1%都不到,绝大部分时间都用来页面传输。如果不用APR,
一个线程同一时间只能处理一个用户,势必会造成阻塞。所以
生产环境下用apr是非常必要的。

  注:APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。
    在早期的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。随着Apache的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用APR而已。

    一般情况下,APR开发包很容易理解为仅仅是一个开发包,不过事实上并不是。目前,完整的APR实际上包含了三个开发包:apr、apr-util以及apr-iconv,每一个开发包分别独立开发,并拥有自己的版本。

adapt from:http://wgkgood.blog.51cto.com/1192594/432272
在phpMyAdmin中提示“Configuration of pmadb… not OK”,如下图所示:
“Configuration of pmadb… not OK”解决办法,这个问题不大,不影响使用,仅仅是一个警告。如果不想总是看见这个警告,可以用如下办法来解决。

(1)初始化phpmyadmin数据库
cd /Library/WebServer/Documents/phpmyadmin/sql
mysql -u root -p < create_tables.sql
Enter password:

mysql> CREATE DATABASE phpmyadmin;
Query OK, 1 row affected (0.02 sec)

mysql> use phpmyadmin
Database changed
mysql> source /data/htdocs/dev.XXX.com/phpmyadmin/sql/create_tables.sql


(2)创建数据库用户
CREATE USER 'pma'@'localhost' IDENTIFIED BY 'pmapass';
GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'pma'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;


(3)配置config.ini.php文件
vim config.inc.php
/**
* phpMyAdmin configuration storage settings.
*/

/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
// $cfg['Servers'][$i]['controluser'] = 'pma';    
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';

参考:
http://wlb.wlb.blog.163.com/blog/static/46741320158199711556/
http://bbs.vpser.net/thread-13962-1-1.html
1、打开【开始菜单】进入设置后,进入2的系统(显示、通知、应用、电源)。
2、进入【系统设置】
3、点击”系统选项“
4、选择【通知和操作】
5、选择在任务栏上显示哪些图标
6、控制显示的应用图标【开关】
7、设置成功,任务栏显示应用图标。

摘自 :http://zhidao.baidu.com/link?url=sm3gwUbd7RkQUlspvGUNpzipEaR7fTxXmcw_D0UqAEHT0pb_ThhEkJhdTfJ8OpdMWUj48gb8PR7jQ6d-NsFqyX_NRY2GDD97CBgrkkSujn7
分页: 7/194 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]