【Linux学习笔记】之【Web服务器搭建——Apache】

Web 服务器的搭建

Apache


服务器搭建

安装Apache

yum  install  -y  httpd 
systemctl  start  httpd.service
# /etc/httpd/conf:该目录存放Apache服务器的配置文件
# /var/www/html:该目录是Apache服务器的默认站点根目录
# /etc/httpd/logs: Apache服务器的日志文件目录

浏览器输入localhost测试

部署网站:

cp exam /var/www/html/exam
# 网站源代码

vi /etc/httpd/conf/httpd.conf
# 修改默认网站
##############
DocumentRoot "/var/www/html/exam"
##############

systemctl restart httpd
# 重启服务

常用配置文件:

ServerRoot "/etc/httpd"
# 服务器的根目录。存放配置文件、记录文件、模块文件。
Listen 80
# Apache服务器监听的端口号,默认为80                                
User apache
Group apache
# 设置Apache工作时使用的用户和组
# 'Main' server configuration  
# 主服务器配置
ServerAdmin root@localhost
# 管理员的电子邮件地址
#ServerName www.example.com:80
# 主机名称

DocumentRoot "/var/www/html"
# 设置Apache主服务器网页存放位置

<ifModule dir_module>
    DirectoryIndex index.html default.asp
</ifModule>

# 设置站点默认首页
   
<Directory >
   Options FollowSymLinks
   AllowOverride None
</Directory>
# 设置Apache根目录的访问权限和访问方式  


systemctl stop firewalld
# 关闭防火墙

虚拟主机配置


基于域名
vi /etc/hosts
#################
192.168.75.128 www.hr.com 
192.168.75.128 www.exam.com
#################

cp exam /var/www/exam
# 将需要发布的网站放到/var/www目录下

vim /etc/httpd/conf/httpd.conf
# 修改配置
###############
Listen 80
DirectoryIndex  index.html

# 在末尾增加:
Include conf/vhost/*.conf
###############

mkdir /etc/httpd/conf/vhost
# 创建/etc/httpd/conf/vhost目录
touch hr.conf exam.conf 
# 并在下面分别为不同域的网站新建hr.conf与exam.conf两配置文件。

vim hr.conf
# 分别修改其对应文件
##################
<VirtualHost 192.168.75.128>
ServerName www.hrcom
DocumentRoot /var/www/hr
<Directory “/var/www/hr”>
Options Indexes FollowSymLinks
# 显示网页文件列表
AllowOverride NOne
# 忽略.htaccess 文件
Require all granted
# 允许所有
</Directory>
</VirtualHost>
##################

httpd -t
# 检查虚拟主机的配置
systemctl restart httpd

基于IP

主机需要分配多个IP

vim hr.conf
# 分别修改其对应文件
##################
# 修改对应IP即可   ↓
<VirtualHost 192.168.75.129>
ServerName www.hrcom
DocumentRoot /var/www/hr
<Directory “/var/www/hr”>
Options Indexes FollowSymLinks

基于端口
vim hr.conf
# 分别修改其对应文件
##################
# 修改对应端口即可   ↓
<VirtualHost 192.168.75.130:8080>
ServerName www.hrcom
DocumentRoot /var/www/hr
<Directory “/var/www/hr”>
Options Indexes FollowSymLinks

虚拟目录配置

虚拟目录是主网站的下一级子目录,要依附于主网站,但它的物理位置并不在主目录下,以前面配置的www.hr.com网站为例,配置如下:

mkdir /tmp/movie
echo ‘virtual directory’>  /movie/index.html
# 创建虚拟目录

vi hr.conf
# 修改配置文件
#############
<virtualHost 192.168.75.128>
    DocumentRoot /var/www/gxa
    ServerName www.hr.com
    Alias /movie "/tmp/movie"
    # (/movie 网站路径 "/movie" 真实路径)
</virtualHost>
#############

配置目录权限


1.基于目录配置文件

配置文件示例:

<Directory "/Users/jackma/htdocs">
    Options FollowSymLinks Multiviews
    MultiviewsMatch Any
    AllowOverride None
    Require all granted
</Directory>

Options 配置项
配置项说明
All表示除MultiViews之外的所有特性。这也是Options指令的默认设置
None表示不启用任何的服务器特性
FollowSymLinks服务器允许在此目录中使用符号连接
Indexes如果输入的网址对应服务器上的一个文件目录,而此目录中又没有DirectoryIndex指令(例如:DirectoryIndex index.html index.php),那么服务器会返回由mod_autoindex模块生成的一个格式化后的目录列表。
MultiViews允许使用mod_negotiation模块提供内容协商的"多重视图"。
SymLinksIfOwnerMatch仅在符号连接与目标文件或目录的所有者具有相同的用户ID时才使用它。
ExecCGI允许使用mod_cgi模块执行CGI脚本
Includes允许使用mod_include模块提供的服务器端包含功能
IncludesNOEXEC允许服务器端包含但禁用"#exec cmd"和"#exec cgi"。但仍可以从ScriptAlias目录使用"#include virtual"虚拟CGI脚本。

AllowOverride 配置项

该配置项用于指定是否使用.htaccess文件,参数有如下表

配置项说明
All开启.htaccess文件
None关闭.htaccess文件

Require 配置项

该配置项用于指定允许、拒绝列表。

配置项说明
Require all granted允许所有的访问
Require all denied拒绝所有访问
Require ip 10.2.2.32允许10.2.2.32这个地址访问
Require not ip 10.3.3.21拒绝10.3.3.21这个地址访问
Reuquire host baidu.com允许名为baidu.com的域访问
Reuquire not host baidu.com拒绝名为baidu.com的域访问

2.基于客户端地址

目录的访问控制可以通过Order、Allow、Deny等语句来实现。

  • Order语句用于定义默认的访问权限;

    • Order allow,deny:默认拒绝所有客户端访问
    • Order deny,allow:默认允许所有客户端访问
  • Allow语句用于定义允许访问目录的主机列表;

    • Allow from 192.168.80.0/24:允许192.168.80.0网段内的客户端访问
  • Deny语句用于定义拒绝访问目录的主机列表。

    • Deny from 192.168.80.101:拒绝IP为192.168.80.101的客户端访问

拒绝192.168.80.0网段访问网站:

<VirtualHost 192.168.75.128:80>
    ServerName www.hrcom
    DocumentRoot /var/www/hr
    DirectoryIndex index.html
    <Directory "/var/www/hr">
        order allow,deny
        allow from 192.168.80.0                 
    </Directory>
</VirtualHost>

3.基于用户的访问控制
配置项作用
AuthName定义受保护的领域名称,客户端访问时在弹出的认证登录对话框中将显示该名称
AuthUserFile设置用于保存用户帐号、密码的认证文件路径
AuthType配置认证类型(基本认证:Basic;摘要认证:Digest)
require v;alid-user授权给认证文件中的所有有效用户,如果写成 require user [用户名]表示只允许该用户访问

访问网站时需要输入用户名和密码:

  1. 在www.exam.com的虚拟主机部分中添加如下的内容:
<virtualHost 192.168.10.1>
    DocumentRoot /var/www/exam
    ServerName www.exam.com
Alias /movie “/movie”
    <Directory “/movie”>
        AuthName “movie”
        AuthType Basic
        AuthUserFile /etc/httpd/conf/.htpasswd
        require valid-user
    <Directory>
</virtualHost 192.168.10.1>
  1. 创建.htpasswd文件并向其中添加用户
htpasswd -cm /etc/httpd/conf/.htpasswd harry
# -c 创建认证文件
# -m MDB5加密
# -D 删除一个用户
systemctl restart httpd

Apache 日志分析

  • 目录:/var/log/httpd
  • 日志文件:access_log
  • 错误日志文件:error_log

1.访问日志

1. 访问日志字段说明
日志字段说明
127.0.0.1(%h)这是发送请求到服务器的客户的IP地址,即远程主机的地址,即它表明访问网站的究竟是谁。
-(%l)这是由客户端identd进程判断的RFC1413身份(identity),输出中的符号"-"表示此处的信息无效。除非在严格控制的内部网络中,此信息通常很不可靠,不应该被使用。只有在将IdentityCheck指令设为On时,Apache才会试图得到这项信息。
frank(%u)这是HTTP认证系统得到的访问该网页的客户标识(userid),环境变量REMOTE_USER会被设为该值并提供给CGI脚本。如果状态码是401,表示客户未通过认证,则此值没有意义。如果网页没有设置密码保护,则此项将是"-"。
[09/Sep/2019:23:08:36 +0800](%t)这是服务器完成请求处理时的时间,其格式是:[日/月/年:时:分:秒 时区]
“GET /images/apache_pb.gif HTTP/1.1”引号中是客户端发出的包含许多有用信息的请求行。该客户的动作是GET,请求的资源是/images/apache_pb.gif,使用的协议是HTTP/1.1。
304(%>s)这是服务器返回给客户端的状态码。这个信息非常有价值,因为它指示了请求的结果,或者是被成功响应了(以2开头),或者被重定向了(以3开头),或者出错了(以4开头),或者产生了服务器端错误(以5开头)。完整的状态码列表参见HTTP规范(RFC2616第10章)。
-(%b)最后这项是返回给客户端的不包括响应头的字节数。如果没有信息返回,则此项应该是"-",如果希望记录为"0"的形式,就应该用%B。
“http://localhost:8080/” ("%{Referer}i")"Referer"请求头。此项指明了该请求是被从哪个网页提交过来的,这个网页应该包含有/apache_pb.gif或者其连接。
“Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0” “%{User-Agent}i”"User-Agent"请求头。此项是客户端提供的浏览器识别信息。

2.apache格式字符串及其含义
格式字符串含义
%%百分号(Apache2.0.44或更高的版本)
%a远端IP地址
%A本机IP地址
%B除HTTP头以外传送的字节数
%b以CLF格式显示的除HTTP头以外传送的字节数,也就是当没有字节传送时显示’-'而不是0。
%{Foobar}C在请求中传送给服务端的cookieFoobar的内容。
%D服务器处理本请求所用时间,以微为单位。
%{FOOBAR}e环境变量FOOBAR的值
%f文件名
%h远端主机
%H请求使用的协议
%{Foobar}i发送到服务器的请求头Foobar:的内容。
%l远端登录名(由identd而来,如果支持的话),除非IdentityCheck设为"On",否则将得到一个"-"。
%m请求的方法
%{Foobar}n来自另一个模块的注解Foobar的内容。
%{Foobar}o应答头Foobar:的内容。
%p服务器服务于该请求的标准端口。
%P为本请求提供服务的子进程的PID。
%{format}P服务于该请求的PID或TID(线程ID),format的取值范围为:pid和tid(2.0.46及以后版本)以及hextid(需要APR1.2.0及以上版本)
%q查询字符串(若存在则由一个"?"引导,否则返回空串)
%r请求的第一行
%s状态。对于内部重定向的请求,这个状态指的是原始请求的状态,—%>s则指的是最后请求的状态。
%t时间,用普通日志时间格式(标准英语格式)
%{format}t时间,用strftime(3)指定的格式表示的时间。(默认情况下按本地化格式)
%T处理完请求所花时间,以秒为单位。
%u远程用户名(根据验证信息而来;如果返回status(%s)为401,可能是假的)
%U请求的URL路径,不包含查询字符串。
%v对该请求提供服务的标准ServerName。
%V根据UseCanonicalName指令设定的服务器名称。

2.错误日志

1.字段说明
字段说明
[Mon Sep 09 23:50:23.195490 2019]错误发生的日期和时间;
[core:notice]错误的严重性,LogLevel指令使只有高于指定严重性级别的错误才会被记录;
[pid 5929]导致错误的进程号
AH00094: Command line: ‘/usr/sbin/httpd -D FOREGROUND’具体的错误信息

2.错误日志级别
Level描述举例
emerg紧急(系统无法使用)“Child cannot open lock file. Exiting”
alert必须立即采取措施“getpwuid: couldn’t determine user name from uid”
crit致命情况“socket: Failed to get a socket, exiting child”
error错误情况“Premature end of script. headers”
warn警告情况“child process 1234 did not exit, sending another SIGHUP”
notice一般重要情况“httpd: caught SIGBUS, attempting to dump core in …”
info普通信息“Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)…”
debug调试信息“Opening config file …”

3.监视错误日志
tail -f error_log

日志分割

常用的工具有Apache自带的日志分割工具rotatelogs或是第三方日志分割cronolog工具等。

利用Apache自带的日志分割工具rotatelogs对日志进行分割存储:

ServerRoot "/var/www/zlt/"
ErrorLog "|/usr/sbin/rotatelogs -l logs/www.book.com.Error_%Y%m%d.log 86400"
CustomLog "|/usr/sbin/rotatelogs -l logs/www.book.com.Access_%Y%m%d.log 86400" common
........

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值