apache
一、目前服务器软件的使用排名,占有率
https://w3techs.com/technologies/overview/web_server/all
二、当前互联网主流web服务
当前互联网主流web服务
静态服务:
1、apache -->中小型静态web服务的主流,web服务器中的老大哥。
2、nginx -->大型新兴网站静态web服务主流。
3、lighttpd -->静态web服务不温不火,逐渐被淘汰。
静态效率高
动态服务:
1、IIS -->微软的web服务器(asp,.aspx)
2、tomcat -->中小企业动态web服务主流,互联网java容器主流(jsp,do)
3、resin -->大型动态web服务主流,互联网java容器主流(jsp,do)
4、php(fcgi)-->大中小网站,php程序的解析容器。
a.配合apache,php不是守护进程,而是mod_php5.so(module)
b.配合nginx,lighttpd,php守护进程模式,fcgi模式。
apache的特点:
功能强大、配置简单、速度快、应用广泛、性能稳定可靠,并可做代理服务器或负载均衡来使用。
apache的应用场合:
使用apache运行静态html网页、图片(处理静态小文件能力不及nginx)。
使用apache结合php引擎运行php、perl、python等程序,lamp。
使用apache结合tomcat/resin运行jsp,java等程序,成为中小企业的首选。
使用apache做代理、负载均衡、rewrite规则过滤等等。
三、源码安装apache
3.1)源码下载
http://mirror.bit.edu.cn/apache/httpd/
3.2)安装
cd httpd-2.2.27 ./configure \ --prefix=/application/apache2.2.27 \ --enable-deflate \ --enable-expires \ --enable-headers \ --enable-modules=most \ --enable-so \ --with-mpm=worker \ --enable-rewrite
检验编译是否正确
echo $?
安装
make && make install
做个软链接,舒服
ln -s apache2.2.27 apache
3.3)检查语法,开启服务
检查语法 [root@rsyncserver ~]# /application/apache/bin/apachectl -t 开启服务 [root@rsyncserver ~]# /application/apache/bin/apachectl start
此时在客户端浏览器访问服务器的ip会显示It works!
如果一个进程在执行的过程中太慢,可以尝试跟踪一下进程 strace
3.4)查看服务器网页存放默认的根目录,,,站点目录
[root@rsyncserver conf]# grep -i documentroot httpd.conf # DocumentRoot: The directory out of which you will serve your DocumentRoot "/application/apache2.2.27/htdocs" # This should be changed to whatever you set DocumentRoot to. # access content that does not live under the DocumentRoot.
四、httpd.conf
配置文件下默认定义的首页的名字
<IfModule dir_module> DirectoryIndex index.html //改成了oldboy.html,可以有多个,按照空格分 </IfModule>
改了名字之后需要平滑重启
[root@rsyncserver htdocs]# /application/apache/bin/apachectl -t Syntax OK [root@rsyncserver htdocs]# /application/apache/bin/apachectl graceful
配置文件里面的目录访问权限
<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory> 禁止任何用户访问/目录
<Directory "/application/apache2.2.27/htdocs"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
如果此时htdocs里面没有找到默认的首页名字就会显示目录结构,,,,所以第一个优化就是将Indexes 改成-Indexes或者删除。此时如果没有响应的默认首页,就会报403的错,这是个非常重要的安全参数!!!
五、extra
重点:httpd-vhosts.conf httpd-mpm.conf httpd-default.conf(了解,其中有参数可以关闭服务器端向客户端展示的服务器版本)
httpd-default.conf
ServerSignature Off ServerTokens Prod
还有的可以看本地图片,在http-apache中。
六、虚拟主机,部署多个站点,每个站点用不同的域名和站点目录,不同的端口,不同的ip
虚拟主机的分类:
a.基于域名(重要的)
b.基于端口(自己了解)
c.基于ip(自己了解)
这些都可以相互配合,例如域名加端口,ip加端口
Apache 在接受到请求时,首先会默认第一个VirtualHost,然后再找匹配的,如果没有匹配的,就是第一个VirtualHost起作用。 因此在httpd.conf中,将<Dicrectory />(这个是所有目录的默认配置)和 <Direcotry /opt/lampp/htdocs>的权限,都是deny from all.作为默认。
6.1)基于域名例子:
域名 站点目录 http://www.etiantian.org /var/html/www http://blog.etiantian.org /var/html/blog http://bbs.etiantian.org /var/html/bbs
6.1.2)创建三个web站点目录
[root@rsyncserver ~]# mkdir -p /var/html/{www,blog,bbs} [root@rsyncserver ~]# tree /var/html/ /var/html/ ├── bbs ├── blog └── www
6.1.3)在三个站点目录中写入一个首页,并导入数据
[root@rsyncserver ~]# for name in www blog bbs;do echo "http://$name.etiantian.org" >>/var/html/$name/index.html;done [root@rsyncserver ~]# for name in www blog bbs;do cat /var/html/$name/index.html;done http://www.etiantian.org http://blog.etiantian.org http://bbs.etiantian.org
6.1.4)配置虚拟主机
[root@rsyncserver extra]# vim httpd-vhosts.conf NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/www" ServerName www.etiantian.org ServerAlias etiantian.org ErrorLog "logs/www-error_log" CustomLog "logs/www-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/blog" ServerName blog.etiantian.org ErrorLog "logs/blog-error_log" CustomLog "logs/blog-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/bbs" ServerName bbs.etiantian.org ErrorLog "logs/bbs-error_log" CustomLog "logs/bbs-access_log" common </VirtualHost>
6.1.5)此时是不可以访问页面的,因为没有在主配置主文件添加响应的插件
[root@rsyncserver extra]# vim ../httpd.conf # Server-pool management (MPM specific) Include conf/extra/httpd-mpm.conf # Virtual hosts Include conf/extra/httpd-vhosts.conf
6.1.6)检查、平滑重启
[root@rsyncserver bin]# ./apachectl -t Syntax OK [root@rsyncserver bin]# ./apachectl graceful
6.1.7)本地解析
因为我的域名是私有的本地的,所以我要在本地做解析,然后再windows C:\Windows\System32\drivers\etc\hosts 下加上
192.168.222.140 www.etiantian.org blog.etiantian.org bbs.etiantian.org
然后再windows端访问ping www.etiantian.org是否通
6.1.8)此时还是不可以访问,因为少了个很重要的步骤,主配置文件没有开启权限目录的响应配置
vim httpd.conf <Directory "/var/html"> Options -Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
此时就可以了。
6.2)基于端口加域名的例子,内网用的多,这个是基于上面的配置的,如果单纯的配置这个,还要参考上面的一些配置
[root@rsyncserver conf]# vim httpd.conf Listen 80 Listen 8000 Listen 9000 [root@rsyncserver extra]# vim httpd-vhosts.conf NameVirtualHost *:80 NameVirtualHost *:8000 NameVirtualHost *:9000 <VirtualHost *:80> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/www" ServerName www.etiantian.org ServerAlias etiantian.org ErrorLog "logs/www-error_log" CustomLog "logs/www-access_log" common </VirtualHost> <VirtualHost *:8000> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/blog" ServerName blog.etiantian.org ErrorLog "logs/blog-error_log" CustomLog "logs/blog-access_log" common </VirtualHost> <VirtualHost *:9000> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/bbs" ServerName bbs.etiantian.org ErrorLog "logs/bbs-error_log" CustomLog "logs/bbs-access_log" common [root@rsyncserver bin]# ./apachectl -t Syntax OK [root@rsyncserver bin]# ./apachectl graceful 访问的时候需要加上端口号
6.3)基于ip的虚拟主机
[root@rsyncserver extra]# ifconfig eno16777736:0 192.168.222.141/24 up [root@rsyncserver extra]# ifconfig eno16777736:1 192.168.222.142/24 up [root@rsyncserver extra]# vim httpd-vhosts.conf 如果出现问题可以加NameVirtualHost *:80 <VirtualHost 192.168.222.140:80> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/www" ServerName 192.168.222.140 ServerAlias etiantian.org ErrorLog "logs/www-error_log" CustomLog "logs/www-access_log" common </VirtualHost> <VirtualHost 192.168.222.141:80> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/blog" ServerName 192.168.222.141 ErrorLog "logs/blog-error_log" CustomLog "logs/blog-access_log" common </VirtualHost> <VirtualHost 192.168.222.142:80> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/bbs" ServerName 192.168.222.142 ErrorLog "logs/bbs-error_log" CustomLog "logs/bbs-access_log" common </VirtualHost> 对于主配置文件httpd.conf里面的监听端口非常的重要
6.4)问题
httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe07:4bb7 for ServerName fully qualified domain name=FQDN [root@rsyncserver extra]# vim ../httpd.conf ServerName 127.0.0.1:80 [root@rsyncserver extra]# ../../bin/apachectl graceful [root@rsyncserver extra]# 此时在启动就没有问题了,这个无关紧要
七、apache日志轮询,,,,可以参考http://oldboy.blog.51cto.com/2561410/584513
7.1)apache日志格式详细说明
通用日志格式(Common Log Format)
组合日志格式(Commbined Log Format) 这个工作中用的多
7.2)安装apache日志轮询软件
unzip cronolog-1.6.2.zip cd cronolog-1.6.2 chmod 744 configure ./configure make && make install echo $?
7.3)cronolog日志轮询配置说明:
提示:轮询日志的正确写法,被轮询的日志路径要写全路径
按天轮询(生产环境常见用法,推荐使用):
[root@promote /]# mkdir -p app/logs [root@promote extra]# vim httpd-vhosts.conf <VirtualHost *:80> ServerAdmin 491964349@qq.com DocumentRoot "/var/html/bbs" ServerName bbs.etiantian.org ErrorLog "logs/bbs-error_log" CustomLog "|/usr/local/sbin/cronolog /app/logs/access_bbs_%Y%m%d.log" combined ====改此处配置 </VirtualHost>