apache
[@more@]apache
任务大纲:
1、web服务器就发布web应用程序
2、只要web应用程序拷到DocumentRoot目录下就可以被访问到。
3、可以基于NET/IP做web应用程序的访问控制
4、可以基于帐号做web应用程序的访问控制
5、可以通过配置httpd,实现服务器端任何一个目录下的web应用程序的发 布。
6、虚拟主机技术
如果安装的RPM包的httpd,路径
ls /etc/httpd
conf conf.d logs modules run
vim /etc/httpd/conf/httpd.conf主配置文件
扩展
*.html *.htm 静态页面
*.asp *.jsp *.php 动态页面,可交互
静态页面:apache nginx
动态页面:apache+php(LAMP) nginx+php(LNMP)
*.jsp -> tomcat resin查看 除JBOSS(RED),weblogic(IBM),以外都是开源
*.asp -> IIS
[/]#elinks -dump http://192.168.1.254
12312312312
[/]#elinks http://192.168.1.254
[/]#elinks -dump http://192.168.1.254
12312312312
lynx http://192.168.1.254
(一)、基于IP/NET的页面访问控制
对以下蓝色内容("/var/www/html/www1")对应的web应用程序做基于主机的访问控制!!!
vim /etc/httpd/conf/httpd.conf
366
367 Order deny,allow
368 deny from 192.168.1.10
369
表示允许除了192。168。1。10以外所有主机
366
367 Order allow,deny
368 allow from 192.168.1.10
369
表示仅允许192。168。1。10,拒绝其它所有的主机
service httpd restart
(二)、基于账号的页面访问控制
vim /etc/httpd/conf/httpd.conf
366 站点根目录
367 AuthType basic
368 AuthName "private area !!!!!!!!!!!!!!"
369 AuthUserFile /etc/httpd_user
370 Require valid-user
#Required user apache2 apache3
371 Order allow,deny
372 allow from all
373
[/etc/httpd]#htpasswd -c /etc/httpd_user apache1
New password:
Re-type new password:
Adding password for user apache1
[/etc/httpd]#htpasswd /etc/httpd_user apache2
New password:
Re-type new password:
Adding password for user apache2
service httpd restart
htpasswd 生产http登录信息 -c参数第一次使用,第二次就不用了,否则发生覆盖。
注意:要想账户验证功能可用,必须保证/etc/httpd/conf.d 中除proxy_ajp.conf和welcome.conf存在,其他文件都不存在!!!
(三)、别名功能
5、可以通过配置httpd,实现服务器端任何一个目录下的web应用程序的发 布。
定义别名!!!!
345 Alias /test "/www/" 引号里是服务器的绝对路径
346
347
348 Options Indexes FollowSymLinks !!!将 Indexes 去掉,就可以禁止 Apache 显示该目录结构。用户就不会看到该目录下的文件和子目录列表了。可通过这个时限类似ftp文件下载,如果index.html文件存在,即显示其页面,若没有index.html,则显示该目录下所有文件目录列表形式
349 # AuthType basic
350 # AuthName "private area !!!!!!!!!!!!!!"
351 # AuthUserFile /etc/httpd_user
352 # Require valid-user
353 # Require user apache2 apache3
354 Order allow,deny
355 allow from all
356
http://IP/PATH
/PATH----> /var/www/html/PATH
[/var/www/html/www1]#ls -ld /www/
drwxr-xr-x 2 root root 4096 04-24 11:34 /www/
[/var/www/html/www1]#ls -l /www/index.html
-rw-r--r-- 1 root root 4 04-24 11:34 /www/index.html
[/var/www/html/www1]#vim /etc/httpd/conf/httpd.conf
[/var/www/html/www1]#grep test /etc/httpd/conf/httpd.conf
Alias /test "/www"
[/var/www/html/www1]#service httpd restart
停止 httpd: [确定]
启动 httpd: [确定]
[/var/www/html/www1]#firefox http://192.168.1.254/test
注意全局访问控制Directory段!!! 局部优先级别高于全局,局部 没有定义Directory指令段时,按照全局配置的定义生效
291
292 Options FollowSymLinks
293 AllowOverride None #在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。
294 # Order deny,allow
295 # deny from all
296
297
(四)、对cgi页面的支持
CGI common gateway interface
一、可以通过Perl或者shell脚本来编写CGI动态内容页面
一个bash写的CGI页面如下:
vim test.cgi
1 #!/bin/bash
2
3 echo "Content-type: text/html"
4 echo "" 这两行是固定CGI格式
5 echo ""
6 echo "
TIME:`date`
USERS:`who`
"
7 echo ""
8
chmod +x test.cgi !!!必须添加执行权限
二、为了让test.cgi能够通过apache发布,最终能被访问。
以下行是httpd.conf文件中定义好的CGI别名
566 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
572
573 AllowOverride None
574 Options None
575 Order allow,deny
576 Allow from all
577
我们自定义一个scriptalias,学习一下!
[/www]#ls -l /www/test.cgi
-rwxr-xr-x 1 root root 139 04-24 13:47 /www/test.cgi
[/www]#cat /www/test.cgi
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo ""
echo "
TIME:`date`
USERS:`who`
"
echo ""
vim /etc/httpd/conf/httpd.conf
580 ScriptAlias /cgi/ "/www/" 注意:如果/test后必须加"/",则/www后也要加"/",此外并不需要将www放在站点根目录下(目的可隐藏站点根目录)
581
582 AllowOverride None
583 AddHandler cgi-script .cgi .pl
584 Options +ExecCGI
585 Order allow,deny
586 Allow from all
587
service httpd restart
为了实现自动跳转!!!!
做如下页面:
[/www]#pwd
/www
[/www]#cat index.html
http://ip/cgi1/test.cgi
[/www]#cat test.cgi
vim /etc/httpd/conf/httpd.conf
579 alias /cgi/ "/www/"
580 ScriptAlias /cgi1/ "/www/"
581
582 AllowOverride None
583 AddHandler cgi-script .cgi .pl
584 Options +ExecCGI
585 Order allow,deny
586 Allow from all
587
============================
通过HTML语言实现,自动跳转URL路径到/var/www/cgi-bin/test.cgi
[/var/www/cgi-bin]#cat /var/www/html/index.html
[/var/www/cgi-bin]#ls /var/www/cgi-bin/test.cgi
/var/www/cgi-bin/test.cgi
[/var/www/cgi-bin]#cat !$
cat /var/www/cgi-bin/test.cgi
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo ""
echo "
TIME:`date`
USERS:`who`
"
echo ""
实现的结果是:
当访问http://192.168.1.254/ 时,自动转为http://192.168.1.254/cgi-bin/test.cgi
(五)、虚拟主机功能
虚拟主机的功能是:
在一台真实主机上部署多个web站 点,最终实现让客户端访问时,感受到的是访问了多个不同的web服务器。而不是同一个服务器。
目的:节省硬件资源,赚钱!
apache支持虚拟主机功能,常见的虚拟主机实现方式有3种:
1、基于端口
192.168.254
相同IP,不同端口,但是客户端访问时,必须http://ip:port/path,所以极少用
192.168.1.254:80
192.168.1.254:81
192.168.1.254:82
2、基于IP的,同一主机拥有多个IP
给当前主机申请多个IP,并配置使用!
3、基于域名,同一主机,同一IP能有多个域名解析到。
在域名服务商那申请多个域对应同一IP的正向解析(A记录)
(1)、基于IP的
当前主机有多个IP
[/www]#ifconfig eth0 | grep inet
inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::6ef0:49ff:feb1:59c7/64 Scope:Link
[/www]#ifconfig eth0:0 192.168.1.222/24
[/www]#ifconfig eth0:1 192.168.1.223/24
[/]#mkdir /www1
[/]#mkdir /www2
[/]#mkdir /www3
[/]#echo 192.168.1.254 >> /www1/index.html
[/]#echo 192.168.1.222 >> /www2/index.html
[/]#echo 192.168.1.223 >> /www3/index.html
[/]#
开始在httpd.conf中定义虚拟主机段:
[/]# tail -n 21 /etc/httpd/conf/httpd.conf
# ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /www1
ServerName localhost
ErrorLog logs/1.254.error_log
CustomLog logs/1.254.access_log common
# ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /www2
ServerName localhost 如果不写,可以在启动服务时报如下错误: 见错误1
ErrorLog logs/1.222.error_log
CustomLog logs/1.222.access_log common
# ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /www3
ServerName localhost
ErrorLog logs/1.223.error_log
CustomLog logs/1.223.access_log common
错误1: 对于这种错误,你也可以写/etc/hosts文件解析ip-名字对应关系
[/var/www/html]#service httpd restart
停止 httpd: [确定]
启动 httpd:[Sun Apr 24 14:45:20 2011] [error] (EAI 3)Temporary failure in name resolution: Failed to resolve server name for 192.168.1.223 (check DNS) -- or specify an explicit ServerName
[Sun Apr 24 14:45:30 2011] [error] (EAI 3)Temporary failure in name resolution: Failed to resolve server name for 192.168.1.222 (check DNS) -- or specify an explicit ServerName
[确定]
/etc/httpd/logs目录下有访问日志(谁访问)和错误日志(什么错)
(2)、基于域名
1、同一IP,多个域名解析
搭DNS或者/etc/hosts
[/var/www/html]#tail -n 3 /etc/hosts
192.168.1.254 www.up.com
192.168.1.254 www.looking.com
192.168.1.254 www.pg.com
[/var/www/html]#
2、配置/etc/httpd/conf/httpd.conf 做基于域名的虚拟主机
983 NameVirtualHost *:80
984
985 ServerAdmin root@localhost
986 DocumentRoot /www1
987 ServerName www.up.com
988 ErrorLog logs/www.up.com-error_log
989 CustomLog logs/www.up.com-access_log common
990
991
992 ServerAdmin root@localhost
993 DocumentRoot /www2
994 ServerName www.looking.com
995 ErrorLog logs/www.looking.com-error_log
996 CustomLog logs/www.looking.com-access_log common
997
998
999 ServerAdmin root@localhost
1000 DocumentRoot /www3
1001 ServerName www.pg.com
1002 ErrorLog logs/www.pg.com-error_log
1003 CustomLog logs/www.pg.com-access_log common
1004
(3)、apache支持php的页面解析
如果想让apache支持php,得给apache一个php的功能模块
]#rpm -ivh /mnt/Server/php-5.1.6-27.el5.i386.rpm
也可以自定义编译php的程序包(如果是自定义,以下过程必须手动完成)
[/var/www/html]#rpm -ql php | grep '.so'
/usr/lib/httpd/modules/libphp5-zts.so php线程方式工作的模块
/usr/lib/httpd/modules/libphp5.so php进程方式工作的模块
[/var/www/html]#rpm -ql php | grep 'conf'
/etc/httpd/conf.d/php.conf
[/var/www/html]#vim /etc/httpd/conf.d/php.conf
[/var/www/html]#grep '^[^#]' /etc/httpd/conf.d/php.conf
LoadModule php5_module modules/libphp5.so
LoadModule php5_module modules/libphp5-zts.so
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php
service httpd restart
[/var/www/html]#cat /var/www/html/index.php
phpinfo();
?>
访问: http://192.168.1.254/index.php
现在是apache+php
如果是LAMP,rpm方式,需要装四个包
LINUX OS + httpd + php + mysql-server + php-mysql
以上都是包名,光盘中自带。
注意mysql服务器端包名叫: mysql-server,而客户端工具包名叫mysql。
(4)、扩展功能:rewrite功能
rewrite指的是url地址重写
课外作业
(5)、apache服务器运行状态
apache服务器运行状态监视页面!!!
vim /etc/httpd/conf/httpd.conf
914
915 SetHandler server-status
916 Order allow,deny
917 allow from all
918
919
920 #
(6)、apache的两种工作模式
将apache 由进程运行 模式 改为线程模式
[/root]#service httpd stop
停止 httpd: [确定]
[/root]#vim /etc/sysconfig/httpd
[/root]#grep ^HTTPD !$
grep ^HTTPD /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
[/root]#service httpd start
启动 httpd: [确定]
]#ab -n 1000 -c 1000 http://localhost/
扩展:
访问量大的适合用线程模式,小的用进程
数据库系统一般用进程模式,因为写多
读多,用线程,应为读同一共享区,不冲突
写时拷贝(copy on write)写时复制一份为独享
ab为测试命令,压力测试 -n指定多少请求 -c多少客户端发送
线程模式:先快后慢
进程模式:先慢后快,因为开销
echo $[1024/4] 一个进程大概占4.5M
(7)、apache的日志记录扩展
apache不支持将日志记录到远程地址上,所以交由syslog来完成将日志记录到远程主机上
192.168.1.254 是apache服务器,希望把日志通过syslog记录到192.168.1.10主机上!!以便于统一日志管理 !
[/root]#grep logger /etc/httpd/conf/httpd.conf
#echo "131311234" | logger -t "apache" -p local3.info 模板
CustomLog "|logger -t apache -p local3.info" combined
[/root]#grep local3 /etc/syslog.conf
local3.info /var/log/testapache.log 测试
[/root]#service syslog restart
]# service httpd restart
++++++++++++++++
[/root]#grep local3 /etc/syslog.conf
local3.info @192.168.1.10 远程记日志
[/root]#service syslog restart
192.168.1.10上应该允许远程主机将日志记录过来!做如下配置:
[root@demo ~]# grep -- "-r -x" /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-m 0 -r -x"
[root@demo ~]# grep local3 /etc/syslog.conf
local3.info /var/log/192.168.1.254.log
[root@demo ~]# service syslog restart
在192。168。1。10上可以从如下指定的文件中看到记录过来的日志
]# tail -f /var/log/192.168.1.254.log
补充:
run目录中有pid文件,httpd服务启动会多一个httpd.pid文件,里面存pid,为写脚本方便!!!
白名单:
Order Allow,Deny
allow from 192.168.1.10 allow from all
黑名单:
Order Deny Allow
Deny from 192.168.1.10
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23168012/viewspace-1049524/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23168012/viewspace-1049524/