Linux自学笔记——httpd2.2基础配置

http服务器程序:

httpd(apache)

nginx

lighttpd

应用程序服务器:

IIS: .net

tomcat:.jsp

可访问网址:www.netcraft.com

httpd的安装和使用:

ASF:apache software foundation

httpd:apache

a patchy server =apache

httpd的特性:

高度模块化:core + modules

DSO:dynamic shared object

MPM:Multipath processing Modules(多路处理模块)

prefork:多进程模型,每个进程响应一个请求;

一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;

N个子进程:每个子进程处理一个请求;

工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;

Worker:多进程多线程模型,每线程处理一个用户请求;

一个主进程:负责生成子进程;负责创建套接字;负责接受请求,并将其派发给某子进程进行处理;

多个子进程:每个子进程负责生成多个线程;

每个线程:负责响应用户请求;

并发响应数量:m*n

m:子进程数量

n:每个子进程所能创建的最大线程数量;

event:时间驱动模型,多进程模型,每个进程响应多个请求;

一个主进程:负责生成子进程;负责创建套接字;负责接受请求,并将其派发给某子进程进行处理;

子进程:基于时间驱动机制直接响应多个请求;

httpd的程序版本;http://httpd.apache.org/

httpd 1.3:官方已经停止维护;

httpd 2.0:

httpd 2.2:一本centos6上httpd预装版本;

httpd 2.4:目前最新稳定版;

httpd的功能特性:

CGI:common gateway interface

虚拟主机:IP,PORT,FQDN

反向代理

负载均衡

路径别名

丰富的用户认证机制

basic

digest

支持第三方模块

……

安装httpd:

Rpm包:centos发行版中直接提供;

编译安装:定制新功能,或其他原因;

Centos6:httpd2.2

程序环境:

配置文件:

/etc/httpd/conf/httpd.conf

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

服务脚本:

/etc/rc.d/init.d/httpd

主程序文件:

/usr/sbin/httpd

/usr/sbin/httpd.event

/usr/sbin/httpd.worker

日志文件:

/var/log/httpd:

access_log:访问日志

error_log:错误日志

站点文档:

/var/www/html

模块文件路径:

/usr/lib64/httpd/modules

服务控制和启动:

chkconfig httpd  on|off

service  {start|stop|restart|status|configtest|reload}httpd

centos7:httpd2.4

程序环境:

配置文件:

/etc/httpd/conf/httpd.conf

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

模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf

systemd unit file:

/usr/lib/systemd/system/httpd.service

主程序文件:

/usr/sbin/httpd

httpd-2.4支持MPM的动态切换;

日志文件:

/var/log/httpd:

access_log:访问日志

error_log:错误日志

站点文档:

/var/www/html

模块文件路径:

/usr/lib64/httpd/modules

服务控制:

systemctl  enable|disable  httpd.service

systemctl  {start|stop|restart|status}  httpd.service

httpd-2.2的常用配置

主配置文件:/etc/httpd/conf/httpd.conf

### Section 1:Global Encronment(全局环境变量)

### Section 2:“Main”server configuration

### Section 3:Virtual Hosts;

配置格式:

directive value

directive:不区分字符大小写;

value:为路径时,是否区分大小写,取决于文件系统;

常用配置:

1.     修改监听的IP和PORT;

Listen[IP:]PORT

1)    省略IP表示为0.0.0.0;

2)    Listen指令可重复出现多次;

Listen 80

Listen 8080

3)    修改监听socket,重启服务进程方可生效;

2.     持久连续

PersistentConnection:tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它的资源请求的进行;

如何断开?

数量限制;

时间限制

副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常的响应;

折中:使用较短的持久连接时长,以及较少的请求数量;

KeepAlive On|Off

KeepAliveTimeout    15

MaxKeepAliveRequests    100

测试:

telnet WEB_SERVER_IP  PORT

GET /URL  HTTP/1.1

Host:WEB_SERVER_IP

Note:15s不请求将会自动退出;

3.     MPM

httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;centos6的rpm包为此专门提供了三个应用程序文件,httpd(prefork),httpd.worker,httpd.event,分别用于实现不同的MPM机制的支持;确认现在使用的是哪个程序文件的方法:

ps aux | grep httpd

可以看出现在使用的是prefork文件。

默认使用的为/usr/sbin/httpd,其为prefork的MPM模块;

查看httpd程序的模块列表:

查看静态编译的模块:

#httpd –l

持卡看静态编译及动态编译的模块:

#httpd –M

更换使用httpd程序,以支持其他的MPM机制:

/etc/sysconfig/httpd

HTTPD=/usr/sbin/httpd.{worker,event}

编辑图中红框部分,将#删掉,保存退出重启服务,进程使用了httpd.worker文件;

Note:必须重启服务,配置才能生效;

MPM配置:

prefork的配置:

<IfModule prefork.c>

StartServers       8      服务启动后默认开启的进程数;

MinSpareServers    5     最小空闲服务器进程,保存备用;

MaxSpareServers   20    最大空闲服务器进程,保存备用;

ServerLimit      256           最大活动进程数,一般此项会大于并发数;

MaxClients       256         最大并发数,最大数量的工作线程;

MaxRequestsPerChild  4000 每个子进程在生命周期内所能够服务的最大请求个数;

</IfModule>

Worker的配置:

<IfModule worker.c>

StartServers         4        服务启动后默认开启的进程数;

MaxClients         300      最大并发数,最大数量的工作线程;

MinSpareThreads     25     最小空闲进程,保存备用;

MaxSpareThreads     75    最大空闲进程,保存备用;

ThreadsPerChild     25 每个进程可生产的线程数;

MaxRequestsPerChild  0 每个子进程在生命周期内所能够服务的最大请求个数,0代表不限制;

</IfModule>

4.     DSO

配置指定实现模块加载;

LoadModule <mod_name> <mod_path>

模块文件路径可使用相对路径:

相对于ServerRoot(默认/etc/httpd)

5.     定义’Main’server的文档页面路径

DocumentRoot  “”

文档路径映射:

DocumentRoot指向的路径为URL路径的起始位置

其相当于站点URL的根路径;

(FileSystem)/web/host1/index.html  -->(URL)/index.html

我们可以自定义网页文件站点,并不一定把网页文件放在/var/www/html目录下;

1)    修改配置文件,把下图中路径都改为现在定义的路径;

2)    创建相关文件及目录;

3)    重新加载配置文件,测试;

6.     站点访问控制常见机制;

可基于两种机制指明对哪些资源进行何种访问控制;

文件系统路径:

<Directory  "">

...

</Directory>

<File "">

...

</File>

<FileMatch  "PATTERN">

...

</FileMatch>

URL路径:

<Location  "">

...

</Location>

<LocationMatch "">

...

</LocationMatch>

<Directory>中“基于源地址”实现访问控制;

1)    Options

后跟1个或多个以空白字符分隔的“选项”列表;

Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;

FollowSymLinks:允许跟踪符号链接文件所指向的源文件;

None:

All:

2)    AllowOverride

与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)中;

All:

None:

3)    order和allow、deny

order:定义生效次序;写在后面的表示默认法则;

order allow,deny(设置白名单)

order deny,allow(设置黑名单)

Allow from:

Deny from:

示例:

1)    设置白名单;

2)    测试,在192.168.19.134主机上测试,不能访问了;

7.     定义默认主页面;

DirectoryIndex   index.html   index.html.var

8.     定义路径别名;

格式:

Alias /URL/  “/PATH/TO/SOMEDIR/”

DocumentRoot“/www/htdocs”

http://www.magedu.ocm/download/bash-4.4.2-3.el6.x86_64.rpm

/www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm

Alias/download/  “/rpms/pub/”

http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm

/rpms/pub/bash-4.4.2-3.el6.x86_64.rpm

示例:

1)    编辑配置文件,定义别名;

2)    创建相关文件及目录

3)    测试;

9.     设定默认字符集;

AddDefaultCharset    UTF-8

10.日志设定

日志类型:访问日志 和 错误日志

错误日志:

ErrorLog   logs/error_log

LogLevel   warn

Possible values include: debug, info, notice,warn, error, crit, alert, emerg.

访问日志:

LogFormat “%h %l %u %t \”%r\”%>s  %b  \”%{Referer}i\” \”%{User-Agent}i\”” combined

CustomLog logs/access_log  combined

LogFormat  format  strings:

http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

%h:客户端ip地址;

%l:Remote User,通常为一个减号(“-”);

%u:Remote user(fromauth;may be bogus if return status(%s)is 401);非为登录访问时,其为一个“-”号

%t:服务器收到的请求时的时间;

%r:First line ofrequest,即表示请求报文的首行;记录了此次请求的方法,URL以及协议版本;

%>s:响应状态码;

%b:响应报文的大小,单位是字节;不包括响应报文的http首部;

%{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的;

%{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序;

示例:在192.168.19.134主机上访问192.168.19.128,在19.128主机上查看日志;

11.基于用户的访问控制;

认证质询:

www-authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码;

认证:

Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源;

认证方式有两种;

Basic:明文

Digest:消息摘要认证;

安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因;

用户的账号和密码存放在何处?

虚拟账号:仅用于访问某服务时用到的认证标识;

存储:

文本文件;

SQL数据库;

ldap目录存储;

basic认证配置示例:

1)    定义安全域

<Directory “”>

Options None

AllowOverride   None

AuthType  Basic

AuthName “String”

AuthUserFile  “PATH/TO/HTTPD_USER_PASSWD_FILE”

Require user  username1  username2 …

</Directory>

允许账号文件中的所有用户登录访问:

Require valid-user

2)    提供账号和密码存储(文本文件)

使用专用命令完成此类文件的创建及用户管理

htpasswd  [options] /PATH/TO/HTTPD_PASSWD_FILE  username

-c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;

-m:md5格式加密;

-s:sha格式加密;

-D:删除指定用户

另外:基于组账号进行认证;

  • 定义安全域

<Directory "">

Options None

AllowOverride None

AuthType Basic

AuthName "String“

AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"

AuthGroupFile"/PATH/TO/HTTPD_GROUP_FILE"

Require  group grpname1  grpname2 ...

</Directory>

  • 创建用户账号和组账号文件;

组文件:每一行定义一个组

GRP_NAME: username1  username2 ...

示例:基于用户认证;

1)    创建用户账号文件,添加用户;

2)    编辑配置文件,添加安全域;

3)    测试,要求输入密码;

4)    输入用户名及密码,能进入;

示例2:基于组认证;

1)    在上面示例的基础上再创建个用户;

2)    创建组文件,将tom和obama为一个组;

3)    在上一示例的基础上修改配置文件;

4)    检查错误并测试;

浏览器访问测试如下,输入jerry账号不能访问:

输入tom或obama账号可以访问;

12.虚拟主机

站点标识:socket

IP相同,但端口不同;

IP不同,但端口均为默认端口;

FQDN不同:

请求报文中首部;

Host:www.cladue.com

有三种实现方案:

基于ip:

为每个虚拟主机准备至少一个ip地址;

基于port:

为每个虚拟主机使用至少一个独立的port;

基于FQDN:

为每个虚拟主机使用至少一个FQDN;

注意:一般虚拟机不要与中心主机混用;因此,要使用虚拟主机,得先禁用“main”主机;

禁用方法:注释中心主机的DocumentRoot指令即可;

虚拟主机的配置方法;

<VirtualHost  IP:PORT>

ServerName  FQDN

DocumentRoot  “”

</VirtualHost>

其它可用指令:

ServerAlias:虚拟主机的别名:可多次使用;

ErrorLog:

CustomLog:

<Directory “”>

</Directory>

Alias

基于IP虚拟主机示例:

1)    注释DocumentRoot指令选项;

2)    编辑虚拟主机配置文件;

3)    创建相关目录及文件;

创建相关文件;

4)    添加ip地址;

5)    测试;

测试192.168.19.128;

测试192.168.19.129;

测试192.168.19.131;

基于端口的虚拟主机:以下在以上配置的基础上进行修改;

1)    修改监听端口;

2)    修改虚拟主机配置文件;

3)    配置文件保存退出后,重启服务;

4)    在192.168.19.134主机上测试;

测试192.168.19.128:80端口(默认80);

测试192.168.19.128:808端口;

测试192.168.19.128:8080端口;

Note:修改完配置文件后必须保存退出,然后重启服务;这样测试才会有效;

基于FQDN的虚拟主机:

1)    修改配置文件;

2)    重载服务

3)    在测试主机上修改添加hosts文件;

4)    测试;

访问www.a.com

访问www.b.com

访问www.c.com

13.Status页面;

LoadModule  status_module modules/mod_status.so

<Location  /server-status>

SetHandler server-status

Order allow,deny

Allow from 192.168.19

</Location>

1)    编辑配置文件;

2)    重启服务;

3)    测试;

时间: 2024-08-29 01:30:18

Linux自学笔记——httpd2.2基础配置的相关文章

Linux学习笔记:Nagios的配置

安装方法请参考 Linux学习笔记:Nagios的安装 客户端 由于我的安装是使用xinetd这个daemon的,所以需要调整相关的配置文件 [[email protected] ~]# vi /etc/xinetd.d/nrpe  service nrpe {         flags           = IPv4         socket_type     = stream         port            = 5666         wait           

【苏勇老师Linux 入门笔记】网络基础

IP 地址 IP 编制时一个双层编制方案,一个 IP 地址标示一个主机 (或一个网卡接口). 一个 IP 地址分为两个部分:网络部分(所属区域)和主机部分(标示区域中的哪个主机).IPv4 共32位,通常用点分十进制表示. 子网掩码用于将网络部分和主机部分区分开来,子网掩码为1(二进制)的部分为网络部分. MAC地址主要用于同网络间主机的通信,通过ARP协议(同网络中使用)获取同网路其他主机的MAC地址.同网络的主机一般直接相连或通过交换机. 不同网段间通过路由器/网关连接.路由器一般有多个接口

linux自学笔记--memcache和varnish缓存服务器

1.memcached: kv结构,存储于内存之中,可减小数据库访问压力,也可做为session服务器使用 (1)常用命令 -u 指定用户    -m 指定内存大小 -d start|restart|stop    -p 指定端口,默认11211 -n 最小分配空间    -f 增长因子,按最小分配空间为      基数计算,默认为1.25倍 -vv 查看具体启动过程 (2)连接memcached telnet x.x.x.x 11211 quit 退出 查看 stats items 保存 se

Linux自学笔记——Linux网络基础、命令及属性配置

网络对于Linux来说不可或缺的一部分,本文主要对linux网络的基础知识,常用配置命令以及linux配置文件的属性等等作一个总结. 计算机网络: TCP/IP协议栈: TCP/IP分为4层,分别为应用层,传输层,网络互连层,主机到网络层,不同于OSI,他将OSI中的会话层.表示层规划到应用层,把数据链路层和物理层划分给主机到网络层. OSI,Open System Interconnection,开放式系统互联,国际化标准组织ISO制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描

linux自学笔记--linux网络配置、基础网络命令

1.网络配置 /etc/sysconfig/net-script/ifcfg-* DEVICE:接口名 UUID:设备唯一标示 HWADDR:网卡地址 ONBOOT:是否开机自启 BOOTPROTO:static|none|dhcp TYPE:Ethernet|Bridge DNS1:dns地址 PEERDNS:如果为dhcp模式,是否自动分配dns地址,覆盖手动 IPADDR:ip地址 NETMASK:子网掩码 GATEWAY:网关地址 2.常用网络命令 ip: ip link show ip

Linux自学笔记——计算机基础以及命令帮助的获取

计算机基础知识: 计算机的主要组成部分: 运算器.控制器.存储器.输入设备.输出设备 CPU:运算器,控制器 bus:总线 memory: 编址存储设备 IO:与外部部件交互 程序的运行模式: 用户空间:user space,us 内核空间:system space POS:Portable OperationSystem POSIX API:编程接口: 运行程序格式: Windows:EXE,dll(dynamic link library) Linux:ELF,so(shared objec

Linux自学笔记(5):Linux基础命令

基础命令:date:date --help用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][-ss]]date [MMDDhhmm[[cc]yy][-ss]]:设置MM:月DD:日hh:时mm:分YY:两位年份CCYY:四位年份-ss:秒钟 Linux的两种时钟系统时钟:由Linux内核通过CPU的工作频率进行的计时:硬件时钟:huclock:显示硬件时钟-s,--hctosys-w,--systohc c

linux自学笔记--nginx基本配置

1.基本配置 worker_processes auto|3; 指定使用的核数,默认auto,也可指定  一般为自身核数-1,可用lscpu查看 events { worker_connections 1024; 最大并发连接数,最大并发响应  数 worker_processes * worker_connections } http { keepalived_timeout 65 0表示禁止长连接 keepalived_request 长连接最大资源数,默认100 keepalived_di

Linux自学笔记--基础命令date,cal等

逆水行舟,不进则退: date命令: 我们可以来man一下date命令,可以在上面看出 date的含义为 - print or set the system date and time,我们从以下几方面对date命令进行阐述. 1.   显示时间 date[OPTION]... [+FORMAT] format:格式符号 %D: %F: %T: 在屏幕中输入单独的date命令可以显示系统的时间: 同时我们也可以显示自己想要的时间显示格式: 2.   设置时间 date[-u|--utc|--un