1.前面提到:www服务是一种网页服务,但是网页服务也是需要软件来支撑的,通过软件的形式展示需要的网页,返回给浏览器。
www服务软件排名:http://w3techs.com/technologies/overview/web_server/all
说明:当前世界互联网主流web服务如上图所示:
静态服务软件:
1.apache:中小型企业静态web服务的主流,web服务器中的老大哥,份额逐年下降
2.nginx:大型企业新型网站静态web服务主流,框架逐渐成熟,份额直追apache。
动态服务器软件:
1.IIS:微软的web服务器
2.tomcat:中小型企业web服务器,互联网java容器主流
3.resin:(百度)大型企业动态web服务器,互联网java容器主流
2.安装apache有3种方式:
1)源码安装,只安装自己想要的参数 2)yum或rpm方式安装 3)高级安装 (自己制作rpm包,定制yum仓库)
3.什么是apache?
apache是web服务软件,任何平台都可以使用,在稳定性和安全性上比任何其他软件都好,是开源软件。但不可否认,nginx比apache在处理静态小文件并发上要好很多,占内存稍少,可做代理服务器或负载均衡来使用。
4.安装
4.1 这里选择源码安装,安装就三步:1)configure 2)make 3)make install
1)configure:. /configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。configure,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。
2)make:make是用来编译的,它从Makefile中读取指令,然后编译。这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码.
3)make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。
4.2 查看有无安装历史rpm -qa httpd ,如果有可以卸载:rpm -e 软件版本
4.3将软件下载到指定的地方:/home/oldboy/tools
[root@djw3 tools]# ls -lh
total 7.2M
-rw-r--r--. 1 root root 7.2M Sep 29 2017 httpd-2.2.27.tar.gz
4.4解压软件:tar zxf httpd-2.2.27.tar.gz
[root@djw3 tools]# ll
total 7348
drwxr-xr-x. 11 500 500 4096 Mar 14 2014 httpd-2.2.27
-rw-r--r--. 1 root root 7519677 Sep 29 2017 httpd-2.2.27.tar.gz
4.5 configure/make/make install 生成makefile文件
cd httpd-2.2.27 && ll
一般编译安装一个新软件,不会的话,有两个文件要注意,一个是readme,一个是install
./configure --prefix=/application/apache2.2.27
--enable-deflate #提供对类容的压缩传输编码支持,一般为html,js,css等站点,此参数会提高传输速度,apache调优重要选项之一
--enable-expires #激活允许通过配置文件控制HTTP的Expires:和Cache-Control:头类容,即对网站图片,js,css等内容提供在客户端浏览器缓存的设置,apache调优重要选项之一
--enable-headers #提供允许对HTTP请求头的控制
--enable-modules=most
--enable-so # 激活apache服务的DSO(动态共享对象)支持,即在以后以DSO的方式编译安装共享模块,这模块本身不能用DSO方式编译
--with-mpm=worker #worker模式是使用线程来处理请求 所以可以处理更多的并发请求,如果不指定此参数,默认以prefork进程模式, apache调优重要选项之一
--enable-rewrite #URL重写功能 伪静态通过此模块实现
make
make install 这一步才会生成到指定的位置。
ln -s /application/apache2.2.27/ /application/apache 制作软链接
configure 错误提示:
checking whether to enable mod_deflate... configure: error:
mod_deflate has been requested but can not be built due to prerequisite
failures
zlib-devel 没装的原因
4.6.启动:
/application/apache/bin/apachectl -t ---->检查语法
[root@djw3 bin]# /application/apache/bin/apachectl -t
httpd: apr_sockaddr_info_get() failed for djw3
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
/application/apache/bin/apachectl start ---->实际启动的是httpd服务,所以可以直接启动 httpd -k start
[root@djw3 bin]# /application/apache/bin/apachectl start
httpd: apr_sockaddr_info_get() failed for djw3
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
lsof -i:80--->查看端口,确认开启
[root@djw3 bin]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 29922 root 4u IPv6 88921 0t0 TCP *:http (LISTEN)
httpd 29924 daemon 4u IPv6 88921 0t0 TCP *:http (LISTEN)
httpd 29925 daemon 4u IPv6 88921 0t0 TCP *:http (LISTEN)
httpd 29926 daemon 4u IPv6 88921 0t0 TCP *:http (LISTEN)
ps -ef |grep httpd---->确认进程,可以看到httpd -k start
[root@djw3 bin]# ps -ef |grep httpd
root 29922 1 0 04:04 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start
daemon 29923 29922 0 04:04 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start
daemon 29924 29922 0 04:04 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start
daemon 29925 29922 0 04:04 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start
daemon 29926 29922 0 04:04 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start
root 30014 23061 0 04:08 pts/2 00:00:00 grep http
查看网站,出现IT works表示正常,这里如果可以ping通,但是连接不上,telnet不行,可能是防火墙策略,记得关闭防火墙
同理:也可以通过wget和curl测试服务是否正常,如下:
--2019-05-23 04:27:08-- http://192.168.0.103/
Connecting to 192.168.0.103:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 44 [text/html]
Saving to: “index.html”
HTTP/1.1 200 OK
Date: Wed, 22 May 2019 20:28:13 GMT
Server: Apache/2.2.27 (Unix) DAV/2
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "22d23-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html
5.部署一个简单节点:
知道就可以了 , apachectrl -l 激活的模块 apachectrl -M 都有哪些是静态模块
几乎每一个软件都有如下目录:bin conf logs
主配置文件如下:apache/conf/httpd.conf
网站的根目录:grep -i drcumentroot httpd.conf
找到对应的文件,可以修改访问:
[root@djw3 htdocs]# vim index.html
<html><body><h1>长得丑,活得久!!!</h1></body></html>
一般情况下,不修改配置文件,只是改静态程序是不需要重启机器的。
6.默认文件的配置路径和修改。
htdocs这是编译安装时apache的默认站点目录,当指定了默认站点后,通过DirectoryIndex index.html来指定首页文件,一般在程序中,我们也是通过index.html、index.php、index.jsp、index.htm等指定首页文件。
如下:修改配置文件,增加一个dangjingwei.html,首先找的首页一定是dangjingwei.html当没有的时候,就会找index.html
因为修改配置文件,所以需要平滑重启 ../bin/apachectl graceful
[root@djw3 htdocs]# /application/apache/bin/apachectl -t
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
[root@djw3 htdocs]# /application/apache/bin/apachectl graceful
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
7.配置文件中的一段如下:
对于directory需要说明的是,如果有站点,就要进行配置,才能让用户使用!!!
<Directory /> 根目录(以下是对根目录的限制,软件访问后,禁止对根目录访问,这是不允许求改,知道就好,我们不进行配置,无需理解)
Options FollowSymLinks FollowSymLinks表示允许符号链接,没加选项表示禁止,如不允许目录浏览等
AllowOverride None 表示禁止用户对目录配置文件(.htaccess进行修改)重载,普通站点目录此项建议不开启
Order deny,allow 允许未被明确拒绝的 (从后往前读)
Deny from all 拒绝所有访问
</Directory>
Options Indexes FollowSymLinks FollowSymLinks表示允许符号链接,indexes表示允许目录浏览,如允许目录浏览,允许符号链接
这里很危险,应禁止目录浏览 应更改为 Options FollowSymLinks或Options -Indexes FollowSymLinks(apache的第一个优化点)
AllowOverride None 表示禁止用户对目录配置文件(.htaccess进行修改)重载 尽量不开启.htaccess 安全隐患大,规则多了网站访问性能低
Order allow,deny 拒绝未被明确允许的 (从后往前读)
Allow from all 所有人都能访问
</Directory>
根据上面的修改后,测试如下,为正常情况:
8.从配置文件extra的一些简介
[root@djw3 extra]# ll
-rw-r--r--. 1 root root 2859 May 23 03:52 httpd-autoindex.conf
-rw-r--r--. 1 root root 1753 May 23 03:52 httpd-dav.conf
-rw-r--r--. 1 root root 2344 May 23 03:52 httpd-default.conf
-rw-r--r--. 1 root root 1103 May 23 03:52 httpd-info.conf
-rw-r--r--. 1 root root 5078 May 23 03:52 httpd-languages.conf
-rw-r--r--. 1 root root 949 May 23 03:52 httpd-manual.conf
-rw-r--r--. 1 root root 3789 May 23 03:52 httpd-mpm.conf
-rw-r--r--. 1 root root 2207 May 23 03:52 httpd-multilang-errordoc.conf
-rw-r--r--. 1 root root 11530 May 23 03:52 httpd-ssl.conf
-rw-r--r--. 1 root root 817 May 23 03:52 httpd-userdir.conf
-rw-r--r--. 1 root root 1507 May 23 03:52 httpd-vhosts.conf
在从配置文件中,这里先要注意这三个文件:
httpd-vhosts.conf 多个域名跑在一台服务器上使用的文件
httpd-mpm.conf apache有两种模式:worker和prefork模式,在安装./configure 的时候指定为worker模式,如果不指定的话,默认是prefork模式, --with-mpm=worker
httpd-default.conf 一些常见的配置参数都在这个文件中。