httpd/php/mysql的安装-1
rely: 依赖: relier, reliance , reliable : i don't think he is a reliable man . we must lay stress on (强调) self reliance(自力更生)
comment out 注释掉, present: 目前的; 在场的,出席的(这个时候要放在被修饰的名词后面: the people present are students)
files are processed in alphabetical order.
-----------------------------------------------------------------------
apache server就是httpd,
httpd包括:
一部分: sysconfig/httpd是用来配置httpd service这个服务的
二部分: /etc/httpd/: httpd.conf文件, conf.d目录
三部分: 实体文件/var下的: /var/run/httpd.pid, /var/log/httpd/access_log, error_log, 和/var/www/html+error+icons+cgi_bin
=================================/bin/bash 编程
在c/c++编程中, 通常用大括号来表示代码块, 但是还有很多语言, 不是用{ } 来表示的, 而是用 对应的/ 对称的 关键字 对来表示 大括号{ }
如 if: if [ -f /path/somefile -a -z "${xxx:--}" -a -f /path/somefile ] ; then ## bash脚本中的字符串要用双引号引起来, 但是如果不是字符串, 如表示目录, 文件等等, 就不能加引号
....................
fi 这里就是用then ....fi 来表示 { ... }
循环语句:
for: for var in collections ; do
................. #在循环体中引用var变量,要用$var.
done 这里就是用do .. .. done 来表示 { ... }
while: while [ condition...] ;do
......................
done 这里就是用do ....done 来表示 { ... }
注意和c的区别: bash中, && || 不是用来表示条件的关系, 而是表示: if ....then fi, 或 if... else.....fi
要表示条件的 "与" " 或", 要用 -a , -r
安装服务器今后一般都不用窗体,为了方便,可以装虚拟机vmware
ssh: secure shell (安全都远程shell)
/etc/xinted服务“托管”了一些服务, 要启动这些“托管“的服务, 先要把服务放在/etc/xinetd.d/下, 然后 启动xinetd服务,再启动该服务
chkconfig类似于windows的service一样, 系统 服务=自启动服务都是由chkconfig管理/注册的:
chkconfig --add/添加注册, --delete/删除某个注册都服务, --list/列出服务, --level 35 name ...
要将某个程序注册为系统服务?
because 自定义安装/编译安装的apache并没有注册为服务
1. 将程序控制脚本拷贝到/etc/rc.d/init.d目录下
2. 在脚本中添加:
#chkconfig 35 70 30 35是启动级别, 70时S priority, 30是K priority.
# description some-service-name 这个也是必须的,原则上内容可以是任意的, 管理服务/启动服务/停止服务等等都是通过脚本名称而不是这个描述来使用的!
3. 添加/注册服务:
$ chkconfig --add service-name
4. 那么这个时候, 就可以用: service serv-name start/stop来管理, 如果要配置自启动: chkconfig serv-name on/off.
实际上按照上面的方法配置时,出现提示:
service httpd does not support chkconfig 为什么呢? 原来仔细看上面的几行的写法中是错误的, 漏掉了冒号: 也就是说, 后面的冒号是不能没有的!
# chkconfig: - 85 15 //#不能省略,注意空格
# description: Apache is a World Wide Web server. It is used to serve \ //description:后可任意字符串
修改后就成功的注册为服务了!
iptables的配置文件: /etc/sysconfig/ iptables....
-----------------------------------------------------------
1. 编译安装apache:
下载apache-version...tar.gz
解压后, ./configure --prefix=/usr/local/apache --enable-module=so
make && make install
安装后的启动脚本: /usr/local/apache/bin/apachectl start .
2. 如果是规模较大公司,拥有50台+ ,或者几百台 server,建议你保持原样或者用 red Hat Enterprise ,
redhat是所以linux发行版中,对驱动兼容性测试做的最好的发行版,毕竟是商业公司,保持原样是 不折腾。
几十台服务器的系统一般都是固定用途,需要配置的软件就那么几种,装好一台之后,写脚本批量装其他的即可,自己在局域网配置一个PXE,上新机也 最容易
如果是个人站长,1-10台server,或者就是vps,ubuntu是最好的选择,折腾方便,不用全世界找依赖包,小内存的vps
一定要用32位ubuntu省电省内 存,ubuntu自带的apt
source在墙外网速非常快,在国内,网易,sohu都提供了mirror,安装软件飞快
centos不比redhat好,debian也
不比ubuntu酷.从知道linux开始,我用过
redhat,centos,mandrake,debian,ubuntu,suse,fedora ,启蒙版本是 没有声卡驱动的 幸福linux
1.0,以上redhat和ubuntu两种是我的选择,大家没必要在这个发行版上折腾,或者纠结,省事最重要
所有跑过的server里面,就遇到一次出现了满屏内核错误,这个是一台跑php+nginx的网游后端服务器,os是 fedora,从此对这个发行版敬而远之。
3. vps
注意和vpn相联系和区别: vpn: virtual private network, 而vps: 是虚拟专用服务器, virtual private server.
虚拟主机和vps的区别?
VPS就是一个服务器上装了一个VM软件,在这个软件里,可以虚拟出好多个系统,每个系统可以装不同的系统和软件环境,可以当成一个小的独立系统来用。
而虚拟主机就是指在一台服务器上用软件将这台服务器分成许多个空间单独来出售,而这些空间的软件环境都是一样的"一般比如: apache,iis
下的虚拟目录而已.
虚拟主机使用的是同一个ip地址
如apache下 , 是通过<Directory "/path/to/virutal/host/dirname">...... </directory> 来实现的
apache下的httpd.conf配置文件,对其中虚拟目录的配置:
<Directory /> ..........</Directory>
<Directory /virtualdir1> ...............</Directory>
<Directory /virtualdir2> ...............</Directory>
virtualzzo?
apr-util和apr都是为上层应用提供的运行库。为没有stl库的C语言提供了一些数据结构和操作系统封装接口。显然apache的许多软件都是以apr/apr-util为基础库进行开发的
/usr/bin/htpasswd命令?
htpasswd -c passwordfile username
第一次创建用户,我们必须使用参数“-c”来同时创建用户密码文件
htpasswd -c passwd robert
上命令创建的一个文件“ passwd”,同时在文件里添加了一个 user named “robert”,执行该命令时会要求输入密码。
注意:创建第二或之后的用户时,一定不能用参数“ c ”,否则之前的用户就会被删除。
如果想要删除某个用户,我们可以使用下列命令:
htpasswd -D passwd robert
这样, robert就被从 passwd中删除了
###########################################################
# configure authentication on certain directory
<Directory "/var/www/html/private">
AuthName "AuthInstance:"
AuthType Basic
AuthUserFile "/var/www/html/.htpw"
Require valid-user
</Directory>
###########################################################
alt+tab的排序问题?
alt+table中图标的排列顺序并不是固定不变的! 他总是按最近使用的顺序, 从前到后地进行排列的! 所以你按一下alt+table,
总是能最大可能地 切换到你需要的窗口!
为什么要使用history命令?
使用history的 目地是, 我们能从其中获得好处:
通过查看histroy的历查史命令列表, 可以:
1 histroy n可以看最后n条记录: 注意: history的历史命令编号不是从后面往前编?
为什么? 因为它是为了保证从前面开始的命令, 不管后面执行了多少命令,
总是能够得到固定不变的编号;
2 通过查看history, 可以使用 "!编号" 的方式来执行历史命令.
这个! 和后面的编号之间不能有空格, 因为: ! 并不是一个命令, 只要 将!+编号合起来写,
shell才能识别
3 !! 执行最近的一条命令
4 !?string? 可以执行从后向前最先匹配到的命令
或者, 直接: !somestring: 如: !rpm...
5 fc 编号(不是命令名), 可以修改历史命令,wq保存后执行.
6. history默认的命令记录在 ~/.bash_histroy文件中, 默认的记录1000条.
用histroy -c 可以清楚所有的历史记录. 以免被黑客解析 /root/.bash_history内容!!
prefork.c和worker.c的MPM?
MPM: multi-process module: 多处理模块
apache是一种模块化的设计, 用来满足多种实际场景和平台的需要, 工作模式:
Apache 能更好的为有特殊要求的站点定制。例如,要求更高伸缩性的站点可以选择使用线程的 MPM,
即worker
或event
; 需要可靠性或者与旧软件兼容的站点可以使用prefork
在用户看来,MPM 很像其它 Apache 模块。主要是区别是,在任何时间, 必须有一个,而且只有一个 MPM 加载到服务器中
Description: | Implements a non-threaded, pre-forking web server |
---|---|
Status: | MPM |
Module Identifier: | mpm_prefork_module |
Source File: | prefork.c |
How it Works
A single control process is responsible for launching child processes which listen for connections and serveprefork模式:
prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大。
这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。
worker模式:
worker使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合高流量的http服务器。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起”死掉”,所以要保证一个程式在运行时必须被系统识别为”每个线程都是安全的”。
此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:
1. 它可以使用那些没有处理好线程安全的第三方模块,
2. 并且对于那些线程调试困难的平台而言,它也更容易调试一些。
worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器 上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉"。由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。
总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker(但是对服务器而言,
内存不是问题)!
以前apache主流模式为prefork,现在worker模式也开始多了起来,区别来说,worker模式可以应对高流量,但是安全性不太好;prefork模式安全性比较好,但是性能会差一点,各位可以根据自己服务器的类别选取不同的模式,更好的使用apache。
prefork模式配置详解
<IfModule mpm_prefork_module>
ServerLimit 256
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 256
MaxRequestsPerChild 0
</IfModule>
ServerLimit
默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。
生效前提:必须放在其他指令的前面
StartServers
指定服务器启动时建立的子进程数量,prefork默认为5。
MinSpareServers
指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。
MaxSpareServers
设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的
太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。
MaxClients
限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。
MaxRequestsPerChild
每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果
MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
1. 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2. 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
------------------------------------------------------------
测试ab时,提示: too many files open(24)?
1. 每一个client rquest 建立一个连接(即使是一个并发连接) , 一个连接对应着一个设备文件, 所以当打开的请求数很大的时候,通常不会报错,因为会把多余的
请求保存在请求队列中...
只有当请求数过多的时候,才会报错: could NOT allocate['2l2ukeit] memory for result statics. 是说内存不够用来保存请求队列.
2. 只有当-c 选项过大的时候, 即并发数过大的时候, 才会 提示" 同时打开的文件太多" : 因为1个并发连接就会打开一个设备文件, 多个并发连接, 就会同时
打开很多个设备文件...
解决方法 , 就是修改unix 同时打开的文件数的限制.
默认的同时打开文件的数目是: 1024: ulimit=unix limit -a
修改: ulimit -n ???
3. 所以, 报" too many files open" 是因为并发数过多, 而不是 请求数过多的原因.
-------------------------------------------------------------
如何向纯命令行服务器上传文件?
如果centos, redhat用的是纯粹的 命令行界面, 那么就要从windows/linux客户端向 服务器上传或下载文件,
1. 如果是linux服务器要获得其他机器上的文件, 就在服务器上安装 ftp, tftp这些ftp客户端包
2. 如果是在客户端操作, 服务器不操作, 那么就要在服务器上配置vsftpd 服务器端: vsftpd=very secure ftp Daemon.
windows 上的ftp服务器, 可以使用其自带的 iis, 其中就有ftp服务器....
在linux上使用命令: ftp 172.16.0.7, 输入用户名和密码,等登录到ftp服务器上,
然后使用: get / mget 下载1个或多个文件
put/mget 上传文件..
ftp的命令, 在ftp> 下都有提示: bye/quit, 将退出整个ftp程序, 而open/close并不会推出ftp, 只会关闭/打开某个ftp连接...
printf是linux中的命令, 不是函数, 因此它不支持括号: printf ("%02d", $i") 是错误的, 应该写成: printf "%02d" $i
history命令的读写?
histfiles是自己定义的文件, 而不是系统给我们提供的文件,就是你可以把当前shell的history命令写入到自己指定的文件中
root@linux ~]# history [n]
[root@linux ~]# history [-c]
[root@linux ~]# history [-raw] histfiles
参数:
n :数字,意思是‘要列出最近的
n 笔命令列表’的意思!
-c :将目前的 shell 中的所有 history 内容全部消除
-a :将目前新增的 history 指令新增入
histfiles 中,若没有加 histfiles ,
则预设写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个
shell 的 history 记忆中;
-w :将目前的 history 记忆内容写入
histfiles 中!
也就是说, 你打开的 每个shell都会有自己的history记忆列表!
所以, 不同shell的历史命令可能会是不同的, 就不必惊诧了.
--------------------------------------------------------