系统版本 Centos 7
安装httpd 2.4
1、编译安装:
2、yum仓库安装
~]# yum -y insatll httpd
程序环境配置文件;
httpd主配置文件。
- /etc/httpd/conf/httpd.conf
自建配置文件。
在不修改主配置文件的情况下新增一个配置文件。
- /etc/httpd/conf.d/*.conf
Systemd 服务配置文件。
- /usr/lib/systemd/system/httpd.service
主程序文件:
- /usr/sbin/httpd httpd-2.4支持的MPM的动态切换;
日志文件:
- /var/log/httpd;
- access_log; 访问日志
- error_log; 错误日志
站点文档
- /var/www/html ; 即帮助文件
模块文件路径
- /uar/lib64/httpd/modules
服务控制命令:
- systemctl enable | disable httpd.service 是否自动启动
- systemctl { start | stop | restart | status } httpd.service 服务是否 开启、停止、重启、状态
多处理模块(MPM)
- prefork:多进程模型,一个进程响应一个请求;
- worker:多进程多线程模型,一个线程响应一个请求;
- event:事件驱动模型,一个进程响应n个请求;
分别启用prefork、worker、event工作方式
默认开启的状态是prefork,一旦启动/etc/sysconfig/httpd里的worker、event模式便自动切换.
1、开启worker模式
[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
...
...
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 禁用
...
...
LoadModule mpm_worker_module modules/mod_mpm_worker.so 启用
...
...
#LoadModule mpm_event_module modules/mod_mpm_event.so 禁用
重启服务并检查语法错误
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# httpd -M | grep mpm
mpm_worker_module (shared)
2、开启event模式
[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
...
...
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 禁用
...
...
#LoadModule mpm_worker_module modules/mod_mpm_worker.so 禁用
...
...
LoadModule mpm_event_module modules/mod_mpm_event.so 启用
重启服务并检查语法错误
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# httpd -M | grep mpm
mpm_event_module (shared)
3、开启prefork模式
[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
...
...
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 启用
...
...
#LoadModule mpm_worker_module modules/mod_mpm_worker.so 禁用
...
...
#LoadModule mpm_event_module modules/mod_mpm_event.so 禁用
重启服务并检查语法错误
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t
Syntax OK
查看启用的模式
[root@localhost ~]# httpd -M | grep mpm
mpm_prefork_module (shared)
错误修复办法:AH00558:
[root@localhost ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK
...
...
#
ServerName www.example.com:80 第95行 去掉前面的 # 号
#
...
...
系统版本 Centos 6.7
安装httpd 2.2
1、编译安装:
2、yum仓库安装
~]# yum -y install httpd
程序环境配置文件;
配置文件:
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/*.conf
服务脚本
- /etc/rc.d/init.d/httpd
- /etc/sysconfig/httpd 脚本配置文件
主程序文件:
- /usr/sbin/httpd
- /usr/sbin/httpd.worker
- /usr/sbin/httpd.event
日志文件:
- /var/log/httpd;
- access_log; 访问日志
- error_log; 错误日志
站点文档:
- /var/www/html
模块文件路径:
- /usr/lib64/httpd/modules
服务启动
- chkconfig httpd on | off
服务控制
- service { start | stop | restart | status | configterst | reload } httpd
多处理模块(MPM)
- prefork:多进程模型,一个进程响应一个请求;
- worker:多进程多线程模型,一个线程响应一个请求;
- event:事件驱动模型,一个进程响应n个请求;
分别启用prefork、worker、event工作方式
默认开启的状态是prefork,一旦启动/etc/sysconfig/httpd里的worker、event模式便自动切换.
1、开启worker模式
[root@localhost ~]# vim /etc/sysconfig/httpd
...
...
HTTPD=/usr/sbin/httpd.worker 启用
#HTTPD=/usr/sbin/httpd.event #停用
...
[root@localhost ~]# service httpd restart 重启服务
停止 httpd: [确定]
正在启动 httpd:httpd.worker: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[确定]
[root@localhost ~]# ps aux | grep httpd
root 6270 0.0 0.4 184100 4040 ? Ss 13:29 0:00 /usr/sbin/httpd.worker
apache 6273 0.3 0.5 528360 5368 ? Sl 13:29 0:00 /usr/sbin/httpd.worker
apache 6274 0.2 0.5 593896 5360 ? Sl 13:29 0:00 /usr/sbin/httpd.worker
apache 6275 0.2 0.5 528360 5360 ? Sl 13:29 0:00 /usr/sbin/httpd.worker
root 6388 0.0 0.0 103320 860 pts/0 S+ 13:29 0:00 grep httpd
2、开启event模式
[root@localhost ~]# vim /etc/sysconfig/httpd
...
...
#HTTPD=/usr/sbin/httpd.worker #停用
HTTPD=/usr/sbin/httpd.event 启用
...
[root@localhost ~]# service httpd restart
停止 httpd: [确定]
正在启动 httpd:httpd.event: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[确定]
[root@localhost ~]# ps aux | grep httpd
root 6422 0.0 0.4 184108 4040 ? Ss 13:32 0:00 /usr/sbin/httpd.event
apache 6425 0.0 0.5 528368 5332 ? Sl 13:32 0:00 /usr/sbin/httpd.event
apache 6426 0.0 0.5 528368 5348 ? Sl 13:32 0:00 /usr/sbin/httpd.event
apache 6427 0.0 0.5 528368 5336 ? Sl 13:32 0:00 /usr/sbin/httpd.event
root 6510 0.0 0.0 103320 860 pts/0 S+ 13:32 0:00 grep httpd
3、开启prefork模式
[root@localhost ~]# vim /etc/sysconfig/httpd
...
...
#HTTPD=/usr/sbin/httpd.worker #停用
#HTTPD=/usr/sbin/httpd.event #停用
...
[root@localhost ~]# service httpd restart
停止 httpd: [确定]
正在启动 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[确定]
[root@localhost ~]# ps aux | grep httpd
root 6542 0.0 0.3 183892 3844 ? Ss 13:35 0:00 /usr/sbin/httpd
apache 6545 0.0 0.2 183892 2492 ? S 13:35 0:00 /usr/sbin/httpd
apache 6546 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6547 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6548 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6549 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6550 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6551 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
apache 6552 0.0 0.2 183892 2476 ? S 13:35 0:00 /usr/sbin/httpd
root 6555 0.0 0.0 103320 860 pts/0 S+ 13:36 0:00 grep httpd
简述request
request对象是http事物中用于客户端发出获取数据请求,在获取数据后返回至客户端;
request报文语法格式:
request请求:
<medhod> <request-URL> <version>
<HEADERS>
<entity-boby>
request响应报文
<version> <status> <reason-phrase>
<HEADERS>
<entity-boby>
method方法:
- GET: 从服务器获取一个资源;
- HEAD: 只从服务器获取文档的响应首部;
- POST: 向服务器发送要处理的数据;
- PUT: 将请求的主题部分存储在服务器上;
- DELETE: 请求删除服务器上的指定文档;
- TRACE: 追踪请求到达服务器中间经过的代理服务器;
- OPTIONS: 请求服务器返回对指定资源的支持使用的请求方法;
协议查看或分析工具:
- tcpdump
- tshark
- wireshark
status 状态码:
- 1xx:100-101;信息提示;
- 2xx:200-206;成功;
- 3xx:300-305;重定向;
- 4xx:400-415;客户端错误信息;
- 5xx:500-505;服务器错误信息;
常用的状态吗:
- 200:成功,请求的所有数据通过响应报文的entity-body部分发送:ok
- 301:请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved permanently
- 302:与301相似,但在响报文中通过Location指明资源所处临时新位置;Found
- 304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通过通知客户端:Not Modified
- 401:需要输入账号和密码r认证方能访问资源:Unauthorized
- 403:请求被禁止;Forbidden
- 404:服务器无法找到客户端请求的资源:Not Found
- 500:服务器内部错误;Internal Server Error
- 502:代理服务器从后端服务器收到一条伪响应;Bad Gateway
httpd 虚拟机
httpd虚拟机是将多个网站运行到一台服务器上,。
实现的三种方案:
- 基于ip:虚拟主机至少拥有一个独立的ip地址;
- IP相同;但端口不同;
- 基于port:虚拟主机至少拥有一个独立的port;
- IP不同;但端口均为默认端口;
- 基于FQDN:虚拟主机至少拥有一个FQDN:
- 请求报文首部不同;
注意:
- httpd-2.2 虚拟主机不可与中心主机混用;使用前要先禁用’main’主机;注释掉中心主机的DocumentRoot指令即可;
- httpd-2.4 配置即可使用。
虚拟主机的配置方法:
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot "/PATH/"
<Directory "/PATH/">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
CentOS 7 虚拟机:
关闭防火墙和SELinux
IP不同
配置两台虚拟机:
- 虚拟机A
- www.abc.io
- 192.168.199.175
- /data/web/abc
- 虚拟机B
- www.xyz.io
- 192.168.199.185
- /data/web/xyz
1、首先创建abc,xyz网站文件目录
[root@localhost web]# mkdir -pv /data/web/{abc,xyz}
abc访问主页配置
[root@localhost web]# vim /data/web/abc/index.html
<h1>Welcome www.abc.io</h1>
xyz访问主页配置
[root@localhost web]# vim /data/web/xyz/index.html
<h1> Welcome www.xyz.io </h1>
2、确定电脑有两个ip
[root@localhost web]# ip addr add 192.168.199.185/24 dev ens33
3、配置A、B主配置服务文件
A、
[root@localhost conf.d]# vim abc.conf
<VirtualHost 192.168.199.175:80>
ServerName www.abc.io
DocumentRoot "/data/web/abc"
<Directory "/data/web/abc">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/abc_access_log" combined
</VirtualHost>
B、
[root@localhost conf.d]# vim xyz.conf
<VirtualHost 192.168.199.185:80>
ServerName www.xyz.io
DocumentRoot "/data/web/xyz"
<Directory "/data/web/xyz">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/xyz_access_log" combined
</VirtualHost>
4、验证语法错误:
[root@localhost conf.d]# httpd -t
Syntax OK
[root@localhost conf.d]# apachectl reload
5、浏览器分别访问
A、192.168.199.175
B、192.168.199.185
注意如果提示错误检查是否关闭了SELinux 和防火墙。
端口不同
1、修改B主机的ip 及添加端口
[root@localhost conf.d]# cat /etc/httpd/conf.d/xyz.conf
listen 8090 不要忘记添加端口
<VirtualHost 192.168.199.175:8090> 修改ip地址及端口
ServerName www.xyz.io
DocumentRoot "/data/web/xyz"
<Directory "/data/web/xyz">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/xyz_access_log" combined
</VirtualHost>
[root@localhost conf.d]#
2、访问测试
192.168.199.175
192.168.199.175:8090
主机名不同
修改A 配置文件:
<VirtualHost 192.168.199.175:80>
ServerName www.abc.io
DocumentRoot "/data/web/abc"
<Directory "/data/web/abc">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/abc_access_log" combined
</VirtualHost>
修改B 配置文件:
<VirtualHost 192.168.199.175:80>
ServerName www.xyz.io
DocumentRoot "/data/web/xyz"
<Directory "/data/web/xyz">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/xyz_access_log" combined
</VirtualHost>
测试: 由于没有做DNS解析访问可以修改本机的hosts文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.175 www.abc.io www.xyz.io 添加解析
浏览器输入
CentOS 6 有时间弄
注意: 如果是httpd-2.2,则使用基于FQDN的虚拟主机时,需要事先使用如下指令:
NameVirtualHost IP:PORT
其他命令使用格式:
<VirtualHost *:80>
ServerAlias www.x.io www.y.io www.z.io 网站别名
ServerName www.xyz.io
DocumentRoot "/data/web/xyz"
<Directory "/data/web/xyz">
Options None
AllowOverride None
Require all granted
</Directory>
CustomLog "logs/xyz_access_log" combined
ErrorLog "logs/xyz_Error_log" 错误日志
</VirtualHost>
安装httpd
~]# yum -y insatll httpd
1、修改站点目录
1、创建目录及测试文件。
~]# mkdir -pv /data/web/www
...
...
~]# vim /data/web/www/index.html
<h1> Hello World </h1>
2、修改配置文件的默认目录并赋权给目录
~]# vim /etc/httpd/conf/httpd.conf
...
...
ServerName www.example.com:80 第95行 启用本行.
...
...
赋权给目录访问权限
#DocumentRoot "/var/www/html"
DocumentRoot "/data/web/www" 第120行;修改目录.
...
...
...
#<Directory "/var/www/html">
<Directory "/data/web/www"> 第133行;授权目录权限.
...
...
</Directory>
3、重启服务浏览器测试
[root@VM_35_189_centos conf]# httpd -t
Syntax OK
[root@VM_35_189_centos conf]# systemctl start httpd.service
网页
2、IP站点授权访问
1、全部连接授权管理
<Directory "/data/web/www">
...
#Require all granted 全部允许
Require all denied 全部禁止
...
</Directory>
2、限制固定IP、网段访问,多个地址可用空格分开。
#IP禁止访问
<Directory "/data/web/www">
...
<RequireAll>
Require all granted
Require not ip 192.168.1.100 192.168.1.200
</RequireAll>
</Directory>
#网段禁止访问
<Directory>
<RequireAll>
Require not ip 192.168 172.16
</RequireAll>
</Directory>
3、仅允许IP、网段访问
#允许IP访问
<Directory>
<RequireAll>
Require ip 27.215.227.213
</RequireAll>
</Directory>
#允许网段访问
<Directory>
<RequireAll>
Require all granted
Require not ip 192.168 172.16
</RequireAll>
</Directory>
4、限制用户访问
<Directory>
<RequireAll>
Require all granted
Require not host DESKTOP-811RO48
</RequireAll>
</Directory>
5、仅允许用户访问
<Directory>
<RequireAll>
Require all granted
Require host DESKTOP-811RO48
</RequireAll>
</Directory>
Options :定义访问特性
- Indexes:允许索引,指明的URL路径不存在或没有与主页面资源相匹配的文件时,返回给用户索引列表。
- FollowSymLinks:允许跟踪符号链接文件所指向的源文件。
- None:禁止访问
- All:启用除了MultiViews所有选项
定义格式:
1、允许索引,允许跟踪符号链接文件
<Directory>
Options Indexes FollowSymLinks
</Directory>
测试
创建符号链接文件
[root@VM_35_189_centos conf]# ln -sv /etc/fstab /data/web/www/fstab.html
‘/data/web/www/fstab.html’ -> ‘/etc/fstab’
创建索引列表文件夹
[root@VM_35_189_centos www]# mkdir /data/web/www/images
[root@VM_35_189_centos www]# find /usr/share/ -iname "*.jpg" -exec cp {} /data/web/www/images/ \;
浏览器访问:IP/images 或 IP/fstab.html查看效果
2、禁止访问设置
<Directory>
Options None
</Directory>
定义站点主页面:默认资源优先访问
- DirectoryIndex 具有最高优先级;
- index.html 次级优先级;
- index.html.var 当以上两者不纯在时;
分别定义:
[root@VM_35_189_centos images]# vim data/web/www/iamges/DirectoryIndex
<h1> one </h1>
[root@VM_35_189_centos images]# vim data/web/www/iamges/index.html
<h1> two </h1>
[root@VM_35_189_centos images]# vim data/web/www/iamges/index.html.var
<h1> three </h1>
修改配置文件:
[root@VM_35_189_centos images]# vim /etc/
...
DirectoryIndex DirectoryIndex 后边的是文件名
...
浏览器输入 IP/images 显示为 one
自上而下屏蔽后查看效果。
定义路径别名
<IfModule alias_module>
Alias /usr/ "/PATH/TO/SOMEDIR/"
</IfModule>
测试
创建链接文件
[root@VM_35_189_centos images]# find /usr/share -iname "*.jpg"
修改配置文件
[root@VM_35_189_centos images]# vim /etc/httpd/conf/httpd.conf
辅助配置信息:
<Directory "/usr/share/backgrounds/"> 修改链接路径
AllowOverride None
Options Indexec FollowSymLinsk
Requirw all grented
</Directory>
<IfModule alias_module>
Alias /images/ "/usr/share/backgrounds/"
</IfModule>
1、进入浏览器打开IP/images,测试;
2、屏蔽别名打开浏览器IP/images,测试;
参考:马哥笔记 网络资料
基于用户的访问控制
1 、用户密码访问控制
生成账号密码文件:
[root@VM_35_189_centos conf.d]# htpasswd -c /data/web/www/admin/.htpasswd tom
New password:
Re-type new password:
Adding password for user tom
[root@VM_35_189_centos conf.d]# htpasswd /data/web/www/admin/.htpasswd jerry
New password:
Re-type new password:
Adding password for user jerry
[root@VM_35_189_centos conf.d]# cd /etc/httpd/cond.d/
[root@VM_35_189_centos conf.d]# vim admin.conf 配置一个用户管理配置文件
<Directory "/data/web/www/admin">
Options None
AllowOverride None
AuthType basic
AuthName "Admin Area,plz enter username and password."
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user jerry obama
</Directory>
浏览器打开:输入IP/amdin 访问测试
2、用户组访问控制:
[root@VM_35_189_centos conf.d]# cd /etc/httpd/cond.d/
[root@VM_35_189_centos conf.d]# vim .htgroup 添加组文件
adminals: tom jerry 增加组成员
[root@VM_35_189_centos conf.d]# vim admin.conf 修改刚刚添加的配置文件,
<Directory "/data/web/www/admin">
Options None
AllowOverride None
AuthType basic
AuthName "Admin Area,plz enter username and password."
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require group adminals
</Directory>
浏览器打开:输入IP/amdin 访问测试
htpasswd 账户密码文件生成工具
语法: htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE usernamed passwd
常用命令:
- -c:仅首次创建此处指定的文件,当文件存在时则会清空文件。
- -m: md5格式加密;
- -s:格式加密;
- -D: 删除指定用户
- -b: 批模式添加用户
批模式添加用户: htpasswd -b [options] /PATH/TO/HTTPD_PASSWD_FILE username passwd
定义服务配置文件:
- /etc/http/conf/
- /etc/httpd/conf.d/
<Directory"">
Options None
AllowOverride None
AuthType basic
AuthName "Admin Area,plz enter username and password."
AuthUserFile "/PATH/TO/HTTPD_PASSWD_FILE"
Require user Name1 Name2 ...
</Directory>
组账号进行认证: (1) 定义安全区域:
<Directory"">
Options None
AllowOverride None
AuthType Basic
AuthName "string"
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
AuthGroupFiel "/PAHT/TO/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
</Directory>
(2) 创建用户账号和组账号文件; 组文件:每一行定义一个组 GRP_NAME: username1 username2 …
持久连接配置
[root@localhost conf.d]# vim /etc/httpd/conf.d/kepalive.conf
keepAlive on | off 是否启用长连接
keepAliveTimeout 30 超时
maxkeepaliveRequests 100 可以保持多少个长连接
[root@localhost conf.d]# httpd -t
测试链接:
[root@localhost conf.d]# telnet 192.168.199.175 80 输入服务器ip port
Trying 192.168.199.175...
Connected to 192.168.199.175.
Escape character is '^]'.
GET /index.html HTTP/1.1 输入命令
HOST:192.168.199.175 连续按两次Enter
HTTP/1.1 200 OK
Date: Fri, 15 Jun 2018 04:05:25 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Fri, 15 Jun 2018 00:52:41 GMT
ETag: "1d-56ea3a211091a"
Accept-Ranges: bytes
Content-Length: 29
Content-Type: text/html; charset=UTF-8
<h1>Welcome www.abc.io</h1>
参考资料:马哥笔记
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/101168