linux web打印服务,Linux之Web服务(2)Httpd服务配置之一

Linux之Web服务(2)Httpd服务配置之一

Apache HTTP Server

Apache HTTP 服务器,简称Apache,是非常留下的Web服务器软件。通常和脚步语言比如PHP,数据库MySQL一起工作,合成为LAMP栈(Linux, Apache, MySQL, PHP).当然流行的Web服务器还有nigix,但是nigix虽然轻量级很稳定,但是功能并不如Apache HTTP功能丰富,并且现在的Apache HTTP还支持模块化功能,及可以开发自己的功能模块并加入到此Web服务器软件中,更灵活的满足Web业务甚至是和http协议相关的实现。

本篇主要讲解在CentOS 7 上安装Httpd2.4和相应的配置。

Httpd2.4具体配置介绍

1、Httpd2.4的安装

#使用yum安装[root@root ~]# yum install httpd -y

#安装后查看httpd信息,可以检查是否已经安装[root@root ~]# yum info httpd

Loaded plugins: fastestmirror

Determining fastest mirrors

Installed Packages

Name        : httpd

Arch        : x86_64

Version     : 2.4.6

Release     : 40.el7.centos

Size        : 9.4 M

Repo        : installed

From repo   : centos6

Summary     : Apache HTTP Server

URL         : http://httpd.apache.org/

License     : ASL 2.0

Description : The Apache HTTP Server is a powerful, efficient, and extensible

: web server.

2、Httpd2.4默认配置

主程序文件:/usr/sbin/httpd

模块文件:/usr/lib64/httpd/modules/*.so

注:可以使用httpd -M 查看当前服务加载的模块文件列表

主配置文件:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d*/.conf

/etc/httpd/conf.modules.d/*.conf

站点文档路径:

/var/www/html

日志文件路径:

/var/log/httpd/access_log :访问日志

/var/log/httpd/error_log:  错误日志

Systemd Unit File:

/usr/ib/systemd/system/httpd.service

自带脚步文件:

/usr/sbin/apachectl

注意:在CentOS6及以前使用SysV风格启动的服务脚步使用的就是此脚本。

3、Http2.4 服务的启动和关闭

#启动服务[root@root ~]# systemctl start httpd.service

#关闭服务[root@root ~]# systemctl stop httpd.service

#查看服务是否启动成功[root@root ~]# systemctl status httpd.service

#通过查看默认端口80查看是否开启监听[root@root ~]# netstat -tnlp | grep ':80\>'

tcp     0      0 0.0.0.0:80       0.0.0.0:*        LISTEN      88660/httpd

#也可以通过查看进程来查看httpd相关的进程组[root@root ~]# ps -axu | grep 'httpd\>' | grep -v '\'

root      88660  0.0  0.5 222032  5104 ?     Ss   12:47      0:00 /usr/sbin/httpd -DFOREGROUND

apache    88661  0.0  0.3 222032  3108 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND

apache    88662  0.0  0.3 222032  3108 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND

apache    88663  0.0  0.3 222032  3100 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND

apache    88664  0.0  0.3 222032  3100 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND

apache    88665  0.0  0.3 222032  3108 ?        S    12:47   0:00 /usr/sbin/httpd -DFOREGROUND

解析:这里发现进程的发起者居然都是apache,这是为了保护系统而产生的一个系统用户,该用户只负责Httpd守护进程操作,这样如果Httpd服务被***,而保护了操作系统。在某些低版本如Httpd2.2版本中使用的系统账户名可能为httpd。

4、Http2.4准配前工作

#对80或Httpd指定监听的端口开发防火墙

[root@root ~]# iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

#保存此防火墙规则配置

[root@root ~]# iptables-save

5、Httpd2.4基础配置检查

配置文件格式:

DIRECTIVE  VALUE

DIRECTIVE:指令,不区分字符大小写;例如ServerRoot;

VALUE:该值除了文件系统指定路径除外,大多数也不区分大小写;

配置修改完后注意事项:

(1)检查语法;  注:可以使用httpd -t来检查,如果显示OK则无错误

(2)让服务重新重载配置文件

实例:

#检查配置文件语法是否有误,OK表示无语法错误

[root@root ~]# httpd -t

Syntax OK

#重载服务配置

[root@root ~]# systemctl reload httpd.service

#当然也可以通过发送1号信号让Httpd守护进程重新生成

[root@root ~]# pkill -SIGHUP -f '.*\/httpd\>'

6、具体的配置指令及其选项介绍

1、基本配置指令ServerTokens  OS      #会显示当前apache版本和系统版本

ServerRoot "/etc/httpd"   #默认服务器配置跟目录

PidFile  run/httpd.pid   #进程信息的存放路径,相对路径,相对于/etc/httpd/下

Timeout 60               #超时时间,60秒后端口并重新连接

Listen [ip:]port         #监听的地址和端口

注:Listend可以重复定义多次,默认监听本机可用的所有地址;当需要修改监听多个监听端口或者添加多个监听端口时,需要重新启动httpd服务守护进程,及:$ systecml restart httpd.service

2、保存连接的限制类指令

提示persistent connection : tcp连接建立后,资源获取完成后不会断开连接,而会继续等待。

而如何进行控制其他多个资源通过端口访问进程?

方案猜想:进行访问的数量限制,进行同一进程访问的时间限制。

具体配置举例说明:

是否开启保存连接KeepAlive  on|off

举例说明:在Tcp进行通信需要3次握手来建立连接,而假设如果需要进行传输文件时使用此协议,则传送一次文件后端口连接然后再次3次连接建立一次连接来进行下一次文件传输。

如果改为On,则表示只在传输第一个文件时建立一次Tcp连接,而不会断开,接下来继续进行下面的传输不在进行建立连接的请求过程。

单一用户的保持连接最大请求次数MaxKeepAliveRequest  100

解析:当输出此时为100次才端口一次连接,然后再次建立Tcp连接。

注意:只有KeepAlive 设为为On时此选项才会跟着生效。因为传输文件时不能总保持不断开连接,因此这里设置一个最大的传输请求次数来控制,防止网络请求队列堵塞。

单一用户的一次保持连接的超时时间,默认为s秒,httpd2.4可以设置ms表示毫秒KeepAliveTimeout  15

解析:假设当进行文件传输时,速度很慢,那么此此文件传输超过15秒会自动断开进行如下一次传输连接的建立。

2、MAP多处理模块

prefork MAP 可靠性、兼容性强的MAP,多进程,一个进程处理一次请求;

worker MAP  更高伸缩性的线程MAP,多线程,一个线程程处理一个请求;

event MAP   多线程,每线程处理一次请求,基于事件驱动机制;

这里主要列出perfork MAP介绍StartServers   8         #httpd进程组默认会开启8个守护进程

MinSpareServers   5      #当有多个用户来进行访问,会至少有5个进程用来备份使用

MaxSpareServers   20    #最大值预留

ServerLimit   256        #限制允许多少个用户进行连接

MaxClients   256        #允许多少个用户同时连接,及同一时间段的并发量

MaxRequestsPerChild 4000  #最大请求模块子进程

3、模块的加载和查看

使用httpd 命令选项查看已经加载的模块

-t -D DUMP_MODULES : show all loaded modules

-M : a synonym for -t -D DUMP_MODULES

模块加载具体配置LoadModule

#httpd服务启动时默认加载的模块LoadModule  mod_name  modules/mod_filename

注意:这里的LoadModule指定的模块名会在httpd -M命令中显示,而后面第二个参数才是真正对应的模块文件路径,此路径为相对路径,相对于ServerRoot配置节点指定的路径,一般默认为:ServerRoot  /etc/httpd/       #Httpd服务的根目录

Include conf.d/*.conf        #读取包含指定目录下的配置文件

4、用户相关配置:User apache    #系统用户,用于执行httpd守护进程

Group apache   #系统组,用于此组用户来管理httpd

注意:此系统用户一般不会轻易修改,就算要修改也要指定为一个系统用户,并且此用户的默认shell类型为/sbin/nologin,一次来就算Web服务站点出现的问题或被***,但是此进程的执行为系统用户,保证了系统的安全。

5、网站Main Server主要配置

#web服务站点邮箱,如:ServerAdmin  root@localhost

解析:一般为管理员邮箱,当站点出现问题会发送服务的相关日志信息给指定邮箱。

#设置站点域名,可以设置,如:ServerName  www.example.com:80

注意:此域名默认一般机器不会有,当启动服务时会出现一个提示说找不到ServerName指定域名,因此,可以设置为直接的主机名或者DNS配置的域名即可。

#站点文档及网页根路径DocumentRoot  “/var/www/html”

6、站点文档访问授权及众多服务特性的配置:

1、基于文件系统路径:

2、基于URL访问:

3、访问的选项节点

Options

选项固定参数:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

None             #表示都不选

All            #表示选择所有参数功能

Indexes:         #索引

FollowSymLinks:  #允许使用符号链接访问资源

ExecCGI:      #允许执行CGI模块配置的脚本

具体案例解析:

1、Indexes功能展示

#修改默认配置添加

Options Indexes FollowSymLinks

AllowOverride  None

Require all granted

说明:Indexes表示当访问这个设定的目录下是,如果没有index.html文件,则把此目录下的所有文件列表显示在网页中。如:

#在默认站点文档根目录/var/www/html下创建xx目录[root@meng ~]# mkdir /var/www/html/xx

#切换到xx目录[root@meng ~]# cd /var/www/html/xx/

#创建两个带测试内容的文本文件[root@meng xx]# echo aa > aa.txt

[root@meng xx]# echo bb > bb.txt

[root@meng xx]# sync

#重新启动服务[root@meng xx]# service httpd restart

#再次进行访问[root@meng xx]# links http://10.1.249.185:80/xx/

解析:这里因为没有检查当前目录下有index.html文件,所以会把当前目录下的其它所有文件列表给列出来。

dc82381403e376170aad39f73169bcf8.png

说明:如果去掉Indexes 则表示如果目录下没有index.html文件,则会隐藏该目录下的其它所有文件,如显示以下信息:[root@meng xx]# links http://10.1.249.185:80/xx/

8e6c530faa6a44113f36aa5741feb6b1.pngForbidden#forbidden   #表示为被禁用的意思

解析:这里最后一行就把系统的版本以及web站点服务器软件的版本以及端口后都显示出来。也是当全局设置有ServerTokens OS才会显示。这里显示的Forbidden就是上篇所列出的response响应介接收返回的状态码status code对应的403,及无权限访问此目录下除了默认文件名的默认文档及index.html的其它任何文件。

注意:Directory配置不能指定文件访问,为全局的,因此但如果指定该目录有文件,任然可以直接全路径进行访问指定资源,如查找aa.txt,如:[root@meng xx]# links http://10.1.249.185/xx/aa.txt

aa

解析:那为什么任然可以通过此指定资源全路径来访问呢?因为这里的配置只是对Directory定义的整个目录生效,但是如果目录里的资源文件路径被获取,那么文件还是可以访问的,要拒绝通过指定文件资源路径访问可以通过配置File标签,及添加:

Require all deiend

说明:这里访问/var/www/thml/xx/以.txt结尾的文件都不能访问了。当然如果建立了其它非以.txt结尾的文件还是可以访问的,如:

#新建一个以为.txt的文件,这时访问此文件时无权限的[root@meng ~]# echo hello > /var/www/html/xx/hello.txt

#那么给这个修改此文件名的后缀为.log[root@meng ~]# rename txt log  /var/www/html/xx/hello.txt

#则再次使用资源文件全路径去访问hello.log[root@meng ~]# links http://10.1.249.185/xx/hello.log

f9c55da686180c12d165f26fa7694c64.png

说明:这里可以访问说明只对.txt后缀的文件做了访问限制,那么是不是通过全资源路径就无法访问刚才的aa.txt路径了呢?非也,使用curl命令就可以抓取资源,如:

#使用curl将指定路径资源文档页面源代码读取打印[root@meng ~]# curl http://10.1.249.185/xx/aa.txt

aa

#当然直接打印此路径下的所有文件列表还是不行的[root@meng ~]# curl http://10.1.249.185/xx/

b136a1f85b12049f4929e833b1f5af8e.png

解析:curl能够根据资源记录来捕获对应的资源的源代码,当然在/var/www/html/xx目录下是没有index.html命名的文件,所以要想打印出下面的文件列表,还是不行的。那么添加一个index.html文件。

#在xx目录下添加一个index.html默认首页文档[root@meng ~]# echo '

新的默认页

Default

' \

>  > /var/www/html/xx/index.html

#使用curl尝试访问并读取其资源[root@meng ~]# curl http://10.1.249.185/xx

58c8e2285179365eaf17696a9ecad389.png

解析:这里似乎明白了什么,curl只是抓取资源的原代码或原内容,并不会解析对应的html标记,显示了301状态码表示这个目录下的文件被移动过。

#那么显示刚刚建立的/var/www/html/xx/index.html[root@meng ~]# curl http://10.1.249.185/xx/index.html

新的默认页

Default

说明:这样直接就将源码截获了,那么怎么办,只有给此文件设置访问控制facl了吗?和linux中的rwx基本权限类似,如果一个目录不能访问那么其下的所有资源如果设置了不能访问,那么就完全不能访问了。如,修改Directory对/var/www/html/xx目录的配置:

Options FollowSymLinks

AllowOverride AuthConfig

Require all deined#将允许所有修改过为拒绝所有

#这次再次使用curl去抓取资源源码[root@meng ~]# curl http://10.1.249.185/xx/index.html

6cf245b204611f4c18456c1c04d407e6.png

说明:这样设置了直接对当前整个目录设置了访问控制,那么想要访问此目录的任何文件都不行了,403表示没有权限,curl使用读取web资源内容来打印,但是现在也没有权限去获取此资源文件了,那么使用浏览器或者links更没法了。

总结:

其实这里没必要这么麻烦,一般如果在一个目录下有多种类型的文件,这时可以通过设置对应的 标签来对指定文件名设置访问权限。而去掉里Options中的Indexes是为了安全考虑。Indexes的生效主要跟是否有index.html默认页有关,如果没有此默认页,那么去掉此项并设置访问拒绝才不会显示访问到所有文件。如果需要将不想让指定的文件在此目录下被访问,如果在现在的CentOS系统中,就好办了,直接将不想被访问并且被打印在文件列表中:

1、将此文件设置为隐藏文件

2、给对应的文件设置标签控制访问

验证总结案例实现:

#删除刚才创建的index.html默认页[root@meng ~]# rm -f /var/www/html/xx/index.html

#修改FIles标签拒绝所有人html/xx目录下所有以.开头并以txt结尾的文件[root@meng ~]# vim /etc/httpd/conf/http.conf

Options Indexes FollowSymLinks

AllowOverride AuthConfig

Require all granted

Require all deined

#修改aa.txt文件名为.aa.txt及为隐藏文件[root@meng ~]# rename aa .aa /var/www/html/xx/aa.txt

#此时通过ls默认选项查看xx目录已经无法找出隐藏文件.aa.txt了[root@meng ~]# ls /var/www/html/xx/

bb.txt

#通过links访问此目录[root@meng ~]# links  http://10.1.249.185/xx/

ed9aa0f3e0e69ceb296c8b7f22338b90.png

解析:因为没有index.html及默认页,所有打印当前目录下的所有资源文件,但不包括隐藏文件,因此.aa.txt并没有被打印。

#同时为了防止curl抓取内容,删除所有用户的r及读权限[root@meng ~]# chmod -r /var/www/html/xx/.aa.txt

#只是通过curl命令来通过web读取资源,就不行了[root@meng ~]# curl http://10.1.249.185/.aa.txt

HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

404 Not Found

Not Found

The requested URL /.aa.txt was not found on this server.


Apache/2.2.3 (Red Hat) Server at 10.1.249.185 Port 80

说明:curl是需要是一个二进制执行程序,默认有x及执行权限,而对应的文件没有读权限,因此此curl获取资源源码失效。

#当然如果使用root用户直接在本地读取此文本还是可以的,只是对web做了限制[root@meng ~]# whoami

root

[root@meng ~]# cat /var/www/html/xx/.aa.txt

aa

2、Options FollowSymLinks允许符号链接

说明:允许Directory定义指定目录下创建符号链接来访问其他路径文件。

功能展示

#给/var/www/html默认文档路路径对应的Directory标签中添加此选项:

Options FollowSymLinks

..........

#在根目录下创建一个目录:[root@meng ~]# mkdir /xx

#在xx目录下预习建立一个默认页面[root@meng ~]# echo echo aa > /xx/index.html

#切换到默认文档根路径[root@meng ~]# cd /var/www/html/

#给创建的默认页index.html添加httpd服务所需的安全上下文[root@meng html]# chcon -R -t httpd_sys_content_t /xx/

#在根路径下创建一个符号链接yy文件执行刚才的/xx目录[root@meng html]# ln -s /xx/ yy

#查看文档目录下的所有文件的安全上下文[root@meng html]# ll -Z

-rw-r--r--  root root root:object_r:httpd_sys_content_t index.html

drwxr-xr-x  root root root:object_r:httpd_sys_content_t xx

lrwxrwxrwx  root root root:object_r:httpd_sys_content_t yy -> /xx/

#发送SIGHUP信号重载Httpd服务配置[root@meng html]# pkill -HUP 'httpd.*'

#进行站点下的yy服务链接,显示结果实际为文件系统根路径下的xx目录,及/xx[root@meng html]# links http://10.1.249.185:80/yy

echo aa

说明:这里显示的内容并不是根据规则目录标签里定义的指定为/var/www/html目录下的相对路径yy,这个yy为一个软连接,而连接的指定的是一个目录,而目录里有index.html则执行的是这个网页。

3、AllowOverride访问控制配置

httpd的访问控制配置,允许每目录单独进行;在每个目录下建立一个.htaccess文件;

AllowOverride 表示是否允许目录中的.htaccess文件中的配置来覆盖当前配置段中的配置;

具体的参数:

Options            多选项

FileInfo         详细文件配置,一般用于文件Files标签配合

AuthConfig        允许使用Auth配置文件来读取配置设定

Limit             允许限制访问范围控制

All           所有设定

None           不使用任何设定

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值