【Linux基础服务教程】httpd(Apache)安装和配置

点我查看第二期教程单服务器配置多网站

一、httpd服务软件介绍

1.部署web服务器常用软件

  • Linux:
    • httpd、nginx、tomcat
  • Windows:
    • IIS

2.httpd(Apache)介绍

3.httpd(Apache)软件特性

  • 开源、跨平台的
  • 模块化软件
  • 支持虚拟主机功能
  • 支持https虚拟主机
  • 支持url重写
  • 支持缓存

二、安装并启动httpd(Apache)

1.安装

[root@localhost ~]# yum install -y httpd 

2.设置开机自启动

[root@localhost ~]# systemctl enable --now httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

3.默认服务端口

  • 80/TCP
[root@localhost ~]# netstat -antp | grep http
tcp6       0      0 :::80                   :::*                    LISTEN      6860/httpd 

查看进程

  • 父进程
    • 管理子进程、记录日志、读取配置文件
  • 子进程
    • 用于接收、处理客户端请求
[root@localhost ~]# ps -elf | grep http
4 S root       6860      1  0  80   0 - 56017 poll_s 13:53 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache     6861   6860  0  80   0 - 56017 inet_c 13:53 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache     6862   6860  0  80   0 - 56017 inet_c 13:53 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache     6863   6860  0  80   0 - 56017 inet_c 13:53 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache     6864   6860  0  80   0 - 56017 inet_c 13:53 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache     6865   6860  0  80   0 - 56017 inet_c 13:53 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

4.测试访问web服务器

浏览器端访问:https://服务器IP	#例:服务器IP为127.0.0.1 浏览器访问http://127.0.0.1即可

Linux端访问:curl 服务器IP	##例:服务器IP为127.0.0.1 命令访问curl 127.0.0.1即可
如果提示没有curl命令,请使用yum安装
yum install -y curl

5.删除默认的页面

[root@localhost ~]# rm -rf /etc/httpd/conf.d/welcome.conf 
[root@localhost ~]# systemctl restart httpd

6.新建一个自己的测试页面

[root@localhost ~]# vim /var/www/html/index.html

<h1>index.html</h1>

三、httpd(Apache)相关配置文件

1.主配置文件

/etc/httpd/conf/httpd.conf

2.子配置文件

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

3.模块路径和模块配置文件

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

4.PID文件

  • 每次重启服务后PID文件都会重置
  • 当服务停止后PID文件自动消失
/etc/httpd/run

5.日志文件

  • access_log 访问日志
  • error_log 错误日志
/var/log/httpd 
access_log	error_log

6.网站默认数据目录

/var/www/html

四、主配置文件内容解释/etc/httpd/conf/httpd.conf

1.指定httpd(Apache)工作目录

ServerRoot "/etc/httpd"		#非必要情况不要修改

2.指定监听端口

Listen 192.168.140.10:80	#监听某个IP的80端口
Listen *:80		#监听所有IP上的80端口

3.加载子配置文件

Include conf.modules.d/*.conf

4.指定启动进程的用户和组

User www
Group www

5.指定管理员邮箱(需要提前配置SMTP服务)

ServerAdmin root@localhost

6.指定网站主机名(域名)

ServerName test1.linux.com

7.指定网页目录

DocumentRoot "/var/www/html"	#一般关联权限

8.指定默认网站文件名

<IfModule dir_module>
    DirectoryIndex index.html	#默认为index.html可以更改成其他名字,将来访问域名或者IP会直接调用自定义的文件名
</IfModule>

9.错误日志文件、级别

ErrorLog "logs/error_log"
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel error

10.访问日志名称、记录格式

CustomLog "logs/access_log" combined

web访问量衡量标准

  • PV Page View 页面访问量
  • UV User View 用户访问量

11.自定义访问日志的记录格式

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  • %h 客户端地址
  • %l web认证用户
  • %u windows用户
  • %t 访问时间
  • %r 请求方法 文件名称 HTTP协议版本
  • %s 状态码
  • %b 响应数据的大小
  • %{Referer}i 超链接地址
  • %{User-Agent}i 浏览器类型

12.长链接配置(客户端与服务端通信)

KeepAliveTimeout 5
MaxKeepAliveRequests 100

13.目录权限与授权

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
  • options
    • 客户端访问对应目录下的文件时受什么影响
    • Indexes
      • 无index.html首页时,列出所有文件
    • FollowSymLinks
      • 允许网页目录下的软链接文件被正常访问
  • require 客户端访问认证
    • all granted 允许所有用户访问
    • ip 10.1.1.1 仅允许某个IP访问
    • not ip 10.1.1.1 屏蔽某个IP访问
    • valid-user 输入用户名密码访问
<RequireAll>
    Require all granted
    Require not ip 10.252.46.165	#允许所有用户访问除了这个IP(黑名单机制)
</RequireAll>

基于用户名和密码访问

创建认证用户
htpasswd -c 秘钥文件存放位置 用户
[root@localhost ~]# htpasswd -c /etc/httpd/.webuser martin
New password: 	#输入密码(不会显示)
Re-type new password: 	#确认密码
Adding password for user martin
[root@localhost ~]# cat /etc/httpd/.webuser 	#这个认证文件及其重要
martin:$apr1$6KV5I5w.$6iQ5ip.1bF3la2pHq9lX4/
修改某个页面访问权限
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf 

<Directory "/var/www/html">
    ........................
    AuthType Basic
    AuthName "Need to login: "	#自定义提示语句
    AuthUserFile "/etc/httpd/.webuser"	#指定秘钥文件位置
    Require valid-user
</Directory>
重启服务生效
[root@localhost ~]# systemctl restart httpd