设为首页 收藏本站
查看: 999|回复: 0

[经验分享] 基础运维:掌握Apache服务

[复制链接]

尚未签到

发表于 2018-11-17 09:28:48 | 显示全部楼层 |阅读模式
零、最前沿
  介绍第一款网页软件服务,操作简单,在全球也应用广泛,可能文中有不足之处,但我已经尽可能地去实现这个教程,结合实际和教程的入门到掌握,一步步由浅到深。希望一起学习的同学,不要感到学习困难,坑是一步步走过去的,记录下坑的位置,下次就不会再踩了。越踩越深,等解决问题之后,就会发现这个坑只是很简单的问题。哈哈哈~

一、简介
  1.通俗介绍

  Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。同时Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。也是一个基金会的名称、一种武装直升机等等。

  2.工作模式介绍
  Apache 一共有3种稳定的 MPM 模式(多进程处理模块),它们分别是 prefork、worker、event。http-2.2版本的httpd默认的mpm工作模式为prefork,2.4版本的httpd默认是event工作模式。
  2.1 prefork 工作模式
  Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
  优点:兼容所有新老模块,而且不需担心线程安全。
  缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求。
  2.2 worker 工作模式
  使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些。
  优点:占据更少的内存,高并发下表现更优秀。
  缺点:线程安全问题需要考虑
  2.3 event 工作模式
  它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。
  HTTP采用keepalive方式减少TCP连接数量,但是由于需要与服务器线程或进程进行绑定,导致一个繁忙的服务器会消耗完所有的线程。Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的,但不能在HTTPS访问下工作。

二、安装
  1.快速安装
  

[root@leo ~]# yum update     #更新仓库源  
[root@leo ~]# yum install -y httpd   #安装Apache服务
  
[root@leo ~]# systemctl status httpd         #查看Apache服务状态
  
● httpd.service - The Apache HTTP Server
  Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
  Active: inactive (dead)
  Docs: man:httpd(8)
  man:apachectl(8)
  
[root@leo ~]# systemctl start  httpd        #启动Apache服务
  
[root@leo ~]# systemctl enable  httpd    #设置开机自启动服务
  
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
  
[root@leo ~]#
  

  1.1 访问网页
  在网页上输入服务器的IP
DSC0000.jpg

  1.2 设置自定义主页
DSC0001.jpg

  2.源码安装
  2.1安装环境包
  [root@leo ~]# yum install -y gcc gcc-c++  expat-devel
  2.2下载源码安装包
  

[root@leo ~]# mkdir -p /server/source  
[root@leo ~]# cd /server/source/
  
[root@leo source]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.34.tar.gz
  
[root@leo source]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.3.tar.gz
  
[root@leo source]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
  
[root@leo source]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
  

  2.3 解压各个软件包
  

[root@leo source]# ls  
apr-1.6.3.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.34.tar.gz  pcre-8.40.tar.gz
  
[root@leo source]# tar -xf apr-1.6.3.tar.gz
  
[root@leo source]# tar -xf apr-util-1.6.1.tar.gz
  
[root@leo source]# tar -xf httpd-2.4.34.tar.gz
  
[root@leo source]# tar -xf pcre-8.40.tar.gz
  

  2.4 编译安装Apr
  

[root@leo source]# cd apr-1.6.3  
[root@leo apr-1.6.3]# ./configure --prefix=/usr/local/apr    &&  make && make install
  

  2.5 编译安装Apr-utils
  

[root@leo apr-1.6.3]# cd ..  
[root@leo source]# cd apr-util-1.6.1
  
[root@leo apr-util-1.6.1]#  ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr   && make && make install
  

  2.6 编译安装PCRE
  

[root@leo pcre-8.40]# pwd  
/server/source/pcre-8.40
  
[root@leo pcre-8.40]# ./configure  -prefix=/usr/local/pcre  && make && make install
  

  2.7 编译安装Apache服务
  

[root@leo pcre-8.40]# cd ..  
[root@leo source]# cd httpd-2.4.34
  
[root@leo httpd-2.4.34]# ./configure --prefix=/usr/local/httpd --sysconfdir=/etc/httpd --enable-so --enable-rewrite --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre  && make && make install
  

  2.8 设置Apache服务启动
  

[root@leo httpd-2.4.34]# cd /usr/local/httpd/bin/  
[root@leo bin]# vim /etc/httpd/httpd.conf
  
ServerName localhost:80
  
[root@leo bin]# ./apachectl start
  
[root@leo bin]# netstat -tunlp |grep 80
  
tcp6       0      0 :::80                   :::*                    LISTEN      47744/httpd
  
[root@leo bin]#
  

  2.9 设置开机自启动
  

[root@leo bin]# cp apachectl /etc/init.d/httpd  
[root@leo bin]# vim  /etc/init.d/httpd   #在/bin/sh下添加那两行
  
#!/bin/sh
  
# chkconfig: 2345 70 30
  
# description: httpd
  

  
[root@leo bin]#  chkconfig --add httpd
  
[root@leo bin]#  chkconfig --list httpd
  
Note: This output shows SysV services only and does not include native
  systemd services. SysV configuration data might be overridden by native
  systemd configuration.
  

  If you want to list systemd services use 'systemctl list-unit-files'.
  To see services enabled on particular target use
  'systemctl list-dependencies [target]'.
  

  
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  
[root@leo bin]#
  

  2.10 访问网页
DSC0002.jpg


三、用户认证
  

[root@leo conf.d]# pwd  
/etc/httpd/conf.d

  
[root@leo conf.d]# vim>
  
[root@leo conf.d]# cat>  

  DocumentRoot "/server/web"
  
ServerName www.leo.com
  
ServerAlias www.leo1.com
  
  AllowOverride AuthConfig
  AuthName "Please input you acount."
  AuthType Basic
  AuthUserFile /server/data/.htpasswd
  require valid-user
  
  

  
[root@leo conf.d]# htpasswd -c /server/data/.htpasswd leo
  
[root@leo conf.d]# htpasswd -m /server/data/.htpasswd 000000
  
[root@leo conf.d]# systemctl restart httpd
  

四、设置默认主机
  

[root@leo conf.d]# pwd  
/etc/httpd/conf.d
  
[root@leo conf.d]# vim vhost.conf
  
[root@leo conf.d]# mkdir -p /server/web
  
[root@leo conf.d]# vim /server/web/index.html
  

  DocumentRoot "/server/web"
  ServerName 192.168.116.129
  
  Order allow,deny
  Deny from all
  
  

  
[root@leo conf.d]# cat /server/web/index.html
  
vhost
  
[root@leo conf.d]# systemctl restart httpd
  

五、301域名跳转
  1、配置域名跳转
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  

  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.leo.com$
  RewriteRule ^/(.*)$ http://www.leo1.com/$1 [R=301,L]
  

  
[root@leo conf.d]#
  

  2、配置多域名跳转
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  

  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.leo.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.test.com$
  RewriteRule ^/(.*)$ http://www.leo1.com/$1 [R=301,L]
  

  
[root@leo conf.d]#
  

  3、重启Apache服务
  [root@leo conf.d]# systemctl restart httpd

六、日志切割
  1.设置路径名称
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  
ErrorLog "logs/error.log"
  
CustomLog "logs/access.log" combined
  
[root@leo conf.d]#
  

  2.设置日志分割
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  
ErrorLog "|/server/logs/rotatelogs -l /server/logs/aaa-error_%Y%m%d.log 86400"
  
CustomLog "|/server/logs/rotatelogs -l /server/logs/aaa-access_%Y%m%d.log 86400" combined
  
[root@leo conf.d]#
  

  ErrorLog是错误日志,CustomLog是访问日志。|就是管道符,意思是把产生的日志交给rotatelog这个工具,而这个工具就是apache自带的切割日志的工具。-l的作用是校准时区为UTC,也就是北京时间。86400,单位是秒,正好是一天,那么日志会每天切割一次。而最后面的combined为日志的格式,在httpd.conf中有定义

七、不记录指定文件类型的日志
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  
SetEnvIf Request_URI ".*\.gif$" image-request
  
SetEnvIf Request_URI ".*\.jpg$" image-request
  
SetEnvIf Request_URI ".*\.png$" image-request
  
SetEnvIf Request_URI ".*\.bmp$" image-request
  
SetEnvIf Request_URI ".*\.swf$" image-request
  
SetEnvIf Request_URI ".*\.js$"  image-request
  
SetEnvIf Request_URI ".*\.css$" image-request
  
CustomLog "|/usr/local ... _%Y%m%d.log 86400" combined env=!image-request
  
[root@leo conf.d]#
  

  说明:在原来日志配置基础上,增加了一些image-request的定义,比如把gif、jpg、bmp、swf、js、css等结尾的全标记为image-request,然后在配置日志后加一个标记env=!image-request,表示取反。

八、配置静态缓存
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  

  ExpiresActive on
  ExpiresByType image/gif "access plus 1 days"
  ExpiresByType image/jpeg "access plus 24 hours"
  ExpiresByType image/png "access plus 24 hours"
  ExpiresByType text/css "now plus 2 hour"
  ExpiresByType application/x-javascript "now plus 2 hours"
  ExpiresByType application/javascript "now plus 2 hours"
  ExpiresByType application/x-shockwave-flash "now plus 2 hours"
  ExpiresDefault "now plus 0 min"
  

  
[root@leo conf.d]#
  

  说明:这里的时间单位可以 days、 hours 甚至是 min,两种不同的方法,上面使用的是mod_expires,而下面用的是 mod_headers,要想使用这些模块,必须要事先已经支持。

九、配置防盗链
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  
SetEnvIfNoCase Referer "^http://.*\.leo\.com" local_ref
  
SetEnvIfNoCase Referer ".*\.leo\.com" local_ref
  
SetEnvIfNoCase Referer "^$" local_ref
  

  Order Allow,Deny
  Allow from env=local_ref
  

  
[root@leo conf.d]#
  

  说明:在这段配置中涉及到一个名词referer,其实就是上次访问的网站链接。配置referer是根据来源链接做限制的,如果来源链接不是我们想要的,就直接拒绝,这就是防盗链的原理。当然不止是图片,mp3、rar、zip等文件同样支持。上述配置中默认是除了定义的列表中的referer,其它都拒绝。

十、访问控制
  对apache的访问进行控制,可以设置白名单或黑名单。
  更改httpd.conf时候就已经看到了allow,deny这两个关键词,先来看看allow和deny的规则。
  1、例1
  

Order deny,allow  
deny from all
  
allow from 127.0.0.1
  
我们的判断依据是这样的:
  
看Order后面的,哪个在前,哪个在后
  
如果deny在前,那么就需要看deny from这句,然后看allow from这句
  
规则是一条一条匹配的,不管是deny在前还是allow在前,都会生效的。
  

  2、例2
  

Order allow,deny  
deny from all
  
allow from 127.0.0.1
  
这个就会deny所有,127.0.0.1也会被deny。因为顺序是先allow然后deny,虽然开始allow了127,但是后面又拒绝了。
  

  3、例3
  

Order allow,deny  
deny from all
  
上面的规则就表示,全部都不能通过。
  

  4、例4
  

Order deny,allow  
deny from all
  
上面的规则表示,全部都不能通。
  
Order deny,allow
  
只有顺序,没有具体规则,表示全部都可以通行(默认的),因为allow在最后了。
  
Order allow,deny
  
这个表示,全部都不能通行(默认的),因为deny在最后。
  

  5、针对某个目录限制
  

比如这个目录很重要,只允许我们公司的IP访问,当然这个目录可以是网站根目录,也就是整个站点。  

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
  

  

  6、针对请求的URL去限制
  

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
  

  
这里用到了filesmatch语法,表示匹配的意思。
  

  7、验证
  

# curl -x192.168.116.129:80 www.leo.com/admin.php -I  
HTTP/1.1 403 Forbidden
  
Date: Wed, 26 Oct 2016 06:24:54 GMT
  
Server: Apache/2.2.31 (Unix) PHP/5.6.38
  
Content-Type: text/html;
  

  
# curl -x127.0.0.1:80 www.leo.com/admin.php -I
  
HTTP/1.1 401 Authorization Required
  
Date: Wed, 26 Oct 2016 06:25:03 GMT
  
Server: Apache/2.2.31 (Unix) PHP/5.6.38
  
WWW-Authenticate: Basic realm="Please input you acount."
  
Content-Type: text/html; charset=iso-8859-1
  

十一、禁用解析PHP
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  

  php_admin_flag engine off
  
  Order deny,allow
  Deny from all
  
  

  
[root@leo conf.d]#
  

  说明:php_admin_flag engine off这个语句就是禁止解析php的控制语句,但只这样配置还不够,因为这样配置后用户依然可以访问php文件,只不过不解析了,但可以下载,用户下载php文件也是不合适的,所以有必要再禁止一下。

十二、禁止指定的user_agent
  user_agent叫做浏览器标识,目前主流的浏览器有IE、chrome、Firefox、360、iphone的Safari、Android手机上的百度搜索引擎、google搜索引擎等很多,每一种浏览器都有对应的user_agent。为了避免一些无用的搜索引擎或机器爬虫之类引起的带宽的无辜消耗。
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  

  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.leo.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.test.com$
  RewriteRule ^/(.*)$ http://www.leo.com/$1 [R=301,L]
  

  RewriteCond %{HTTP_USER_AGENT} ".*Firefox.*" [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} ".*Tomato Bot.*" [NC]
  RewriteRule .* - [F]
  

  
[root@leo conf.d]#
  

十三、限制目录
  可以allow和deny去现在网站根目录下的某个子目录,当然这个rewrite也可以实现,这段配置,会把只要是包含 /manage/ 字样的请求都限制
  

[root@leo conf.d]# vim vhost.conf  
[root@leo conf.d]# cat vhost.conf
  

  RewriteEngine on
  RewriteCond %{REQUEST_URI} ^.*/manage/* [NC]
  RewriteRule .* - [F]
  

  
[root@leo conf.d]#
  

十四、从入门到掌握
  完成上面的练习,证明已经入门,在掌握的路上还需要多加练习和记忆,后面的运维进阶会结合以上内容做服务器架构项目试验。请一起学习的同学,记录笔记。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636060-1-1.html 上篇帖子: linux中查看nginx、apache、php、mysql配置文件路径的方法 下篇帖子: apache系列(服务器缓存)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表