阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

httpd-2.2 配置及用法完全攻略

30次阅读
没有评论

共计 9739 个字符,预计需要花费 25 分钟才能阅读完成。

导读 apache 是一款稳定的流行的 web 软件,是 linux 操作系统中默认的 web 管理软件。在 RHEL/Centos 系列中可以用 rpm 直接进行安装,服务名为 httpd。apache 有很多设置和调优 的注意事项,下面的文章将带你玩爆带你玩转 apache,玩转 httpd
1、监听的套接字
Listen [IP:]port

此指令可以出现多次, 用于指定监听多个不同的套接字:

Listen 80

Listen 192.168.1.116:8080
2、配置文件中使用的 keep alive

目前多数的浏览器都请求服务器保持持续连接,这种功能就称为“KeepAlive”,它是 HTTP1.1 中的标准规格,一般是用来强化服务器的性能。在使用保持连接功能时,设置客户一次请求连接能影响文件的最大上限,建议把默认值设为 ON,以便提高访问性能。但当使用负载均衡时,会影响负载均衡的效果,在未断开连接之前,同义客户端始终被定向到同一台服务器。

KeepAlive {On|Off}

    KeepAliveTimeout 2                  #超时时间

    MaxKeepAliveRequests 50       #长连接最大请求数
3、MPM
 <IfModule prefork.c>  #判定模块是否存在
        StartServers: 默认启动的工作进程数;#不包括主进程,主进程只是负责子进程的创建回收等
        MinSpareServers: 最少空闲进程数;MaxSpareServers: 最大空闲进程数;ServerLimit: 最大活动进程数;MaxClients: 并发请求的最大数;#请求连接进来不一定会活动,要小于等于 serverlimit
        MaxRequestsPerChild: 每个子进程在生命周期内所能够服务的最多请求个数;</IfModule prefork.c>  
 
 <IfModule prefork.c>  
        StartServers:启动的子进程的个数
        MaxClients: 并发请求的最大数;MinSpareThreads:最小空闲线程数;MaxSpareThreads:最大空闲线程数;ThreadsPerChild:每个子进程可生成的线程数;MaxRequestsPerChild:每个子进程在生命周期内所能够服务的最多请求个数,0 表示不限定;</IfModule prefork.c>  
4、DSO 模块加载方式
LoadModule module_name /path/to/module

如果使用相对路径,则对于 ServerRoot 所定义的位置而言;例如:

LoadModule php5_module /usr/lib64/httpd/modules/php5.so

让服务重载配置文件方能生效;

httpd -M: 列出已经装载的所有 DSO 及非 DSO 模块
httpd -l: 列出支持使用的非 DSO 模块

默认使用 prefork 模块,若想使用 worker,则修改脚本配置文件:

[root@localhost conf]# vim /etc/sysconfig/httpd 
 
#HTTPD=/usr/sbin/httpd.worker    #启用此项,修改所使用的二进制程序
5、配置站点根目录
DocumentRoot /path/to/somewhere

Apache 服务器存放网页的路径,默认所有要求提供 HTTP 服务的连接,都以这个目录为主目录,默认为 /var/www/html。

6、配置页面访问属性
<direcotry "/path/to/somewhere">
        Options:Indexes: 缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户,危险;FollowSymLinks: 允许跟随符号链接所指向的原始文件;None: 所有都不启用;All: 所有都启用;ExecCGI: 允许使用 mod_cgi 模块执行 CGI 脚本;Includes: 允许使用 mod_include 模块实现服务器端包含(SSI); 
         MultiViews:允许使用 mod_negotiation 实现内容协商;SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号链接所指向的原始文件;</Directory>

<Directory> 可以配置网站目录下的访问属性,使用 <Directory ~ "path"> 可以基于正则表达式的匹配,但是一般不建议使用,会耗费时间。类似的指令还有:<Location [~] "">:配置 URL 访问属性,与 <Directory> 相似(可以配置像内生的 status 页面或者定义了别名的路径等);<File [~] "">:限定单个文件的访问属性;<locationmatch "">:相当于 Location ~,但一般建议使用此配置进行正则匹配;

如果某要配置其属性的 URL 能映射到某具体文件系统路径,建议使用。

7、基于主机的访问控制
 <Direcotry "/path/to/somewhere">		
        Options
        AllowOverride None    #AllowOverride 表示以下基于 ip 的访问控制是否被禁用,none 表示不被禁用
        Order Deny,Allow        #后面的表示默认规则
        Allow
        Deny
 </Direcotry>

基于 IP 控制:

Allow from
        Deny from
            IP, Network Address
            172.16
            172.16.0.0
            172.16.0.0/16
            172.16.0.0/255.255.0.0

二者都匹配或二者都无匹配项时,则以后者为准;否则,则以匹配到的为准;

8、定义默认主页面
DirectoryIndex index.php index.html home.html default.html  #自左而右依次找
9、用户主页

如果期望让每个用户都可以创建个人站点:http://Server_IP/~Username/

userdir disablied: 禁止
  userdir public_html:public_html 是用户家目录下的目录名称,所有位于此目录中的文件均可通过前述的访问路径进行访问

配置用户主页示例:

[root@localhost conf]# vim httpd.conf  #首先在配置文件中启用以下选项
 
 366     #UserDir disabled
 367 
 368     UserDir public_html
 
[root@localhost httpd]# service httpd reload
[root@localhost conf]# useradd feiyu
[root@localhost conf]# su -  feiyu
[feiyu@localhost ~]$ mkdir public_html
[feiyu@localhost ~]$ cd public_html/
[feiyu@localhost public_html]$ echo "hello feiyu"  > index.html

此时可以访问了。但 apache 用户没有权限读取文件,所以还得定义访问权限

[feiyu@localhost ~]$ ls -ld /home/feiyu/
drwx------. 6 feiyu feiyu 4096 Feb 15 20:42 /home/feiyu/
[feiyu@localhost ~]$ setfacl -m u:apache:x /home/feiyu/
[feiyu@localhost ~]$ getfacl /home/feiyu/
getfacl: Removing leading '/' from absolute path names
# file: home/feiyu/
# owner: feiyu
# group: feiyu
user::rwx
user:apache:--x
group::---
mask::--x
other::---
[feiyu@localhost ~]$ curl 192.168.1.117/~feiyu/
hello feiyu
10、配置日志功能

默认日志目录:/var/log/httpd/

access.log: 访问日志,其需要记录的内容需要自定义
 
 error.log: 错误日志

访问日志:CustomLog“/path/to/access_log_file”Format_Name #CustomLog 自定义访问日志路径 LogFormat Format_String Format_Name

%h: 客户端地址

%l: 远程登录名,通常为 -

%u: 认证时的远程用户名,没有认证时为 -

%t: 收到请求时的时间;%r: 请求报文的起始行;%>s: 响应状态码;%b: 响应报文的长度,单位为字节

%{Header_Name}i: 记录指定请求报文首部的内容(value);

详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

错误日志: ErrorLog

11、路径别名
Alias /alias/ "/path/to/somewhere/"

意味着访问 http://Server_IP/alias/ 时,其页面文件来自于 /path/to/somewhere 这个位置;
注意:前后路径要一致,结尾都有”/”或者都没有

12、设定默认字符集
AddDefaultCharset  UTF-8

定义 cgi 脚本路径别名:

CGI: Common Gateway Interface 协议(执行某些文件时要以管理员的权限执行, 已经很少被使用了)
13、CGI 脚本路径别名
CGI: Common Gateway Interface 协议(执行某些文件时要以管理员的权限执行, 已经很少被使用了)

定义 cgi 脚本路径别名:

ScriptAlias /URL/ "/path/to/somewhere/"   #使用此种方法定义文件则被使用 cgi 协议执行或者显式使用 execcgi
14、基于用户的访问控制

当你的网站或者站点的某个路径只想让你授权的用户访问时,就可以使用基于用户的访问控制。

虚拟用户:可以使用文件,SQL 数据库或者 ldap 等机制进行认证。认证类型(auth):basic: 基本认证,帐号和密码明文发送;

digest:摘要认证,hash 编程之后发送,大多浏览器不支持;

认证提供者(authentication provider):帐号和密码的存放位置

授权机制(authorization):根据什么进行授权

例:基于文件,做基本认证,根据用户和组进行授权

使用 htpasswd 命令生成认证库
htpasswd:-c #第一次使用 - c 创建新文件,不是第一次不要使用此选项
-m #用户密码使用 MD5 加密后存放
-s #用户密码使用 SHA 加密后存放
-p #用户密码不加密
-d #禁用一个账户
-e #启用一个账户

[root@localhost fin]# htpasswd -c -m /etc/httpd/conf/.htpasswd feiyu     #第一次需要使用 - c 选项创建文件
New password: 
Re-type new password: 
Adding password for user feiyu
[root@localhost fin]# htpasswd -m /etc/httpd/conf/.htpasswd feiyu1
New password: 
Re-type new password: 
Adding password for user feiyu1
配置认证机制
<directory "/www/htdocs/fin">
        Options None
        AllowOverride AuthConfig
        AuthType Basic
        AuthName "Private Area"
    #	AuthBasicProvider file                    #可以不用指,默认为文件
        AuthUserFile /etc/httpd/conf/.htpasswd     #所使用的认证文件
        Require valid-user      #允许文件中的所有合法账号

访问界面如下所示:

httpd-2.2 配置及用法完全攻略

基于组进行认证

先创建用户再创建组文件:

组文件格式:组名: 用户 1 用户 2 用户 3

    <directory "/www/htdocs/fin">
        Options None
        AllowOverride AuthConfig
        AuthType Basic
        AuthName "Private Area"
    #	AuthBasicProvider file
        AuthUserFile /etc/httpd/conf/.htpasswd
        AuthGroupFile /etc/httpd/conf/.htgroup      #所使用的组文件
        Require group GroupName
    </directory ">
15、虚拟主机

虚拟主机意即一个物理服务器提供多个站点,以前刚建站时使用的是阿里云的免费虚拟主机,我想应该就是基于此方法配置的。虚拟主机的实现方法有三种:

基于不同的 IP 实现不同的虚拟主机:变化 IP

基于不同的 port 实现不同的虚拟主机:变化 port

基于不同的 FQDN 实现不同的虚拟主机:变化 ServerName 的参数

配置使用虚拟主机:

(1)注释中心主机,并启用相关配置

[root@localhost http]# vim /etc/httpd/conf/httpd.conf
 
DocumentRoot "/var/www/html"     #注释中心主机
 
NameVirtualHost *:80    #使用基于域名的虚拟主机时需要启动此项,并且下面的配置与其保持一致,在 httpd-2.4 中不需要使用

(2)基于 ip 的虚拟主机:

<VirtualHost 192.168.1.117:80>   
        ServerName www.feiyu1.com
        DocumentRoot "/var/www/html/feiyu1"
</virtualhost>
 
<VirtualHost 192.168.1.117:80> 
        ServerName www.feiyu2.com
        DocumentRoot "/var/www/html/feiyu2"
</virtualhost>

(3)基于端口的虚拟主机:

<VirtualHost 192.168.1.117:80>
        ServerName www.feiyu1.com
        DocumentRoot "/var/www/html/feiyu1"
</VirtualHost>

<VirtualHost 192.168.1.117:8080> ServerName www.feiyu2.com DocumentRoot “/var/www/html/feiyu2”
</VirtualHost>
(4)基于域名的虚拟主机:

NameVirtualHost *:80
 
<VirtualHost *:80>
        ServerName www.feiyu1.com
        DocumentRoot "/var/www/html/feiyu1"
        CustomLog "/var/log/httpd/feiyu1-access_log" combined
</VirtualHost>
 
<VirtualHost *:80>
        ServerName www.feiyu2.com
        DocumentRoot "/var/www/html/feiyu2"
        CustomLog "/var/log/httpd/feiyu2-access_log" combined
</VirtualHost>
16、启用 https 协议

https 是在 http 的基础上进行 ssl/tls 加密实现的结果,启用 https 固然更安全,不会存在流量劫持等风险,但使用 https 就不再是三次握手了,它会增加建立连接的时间。

http 与 https 首次请求对比图:

httpd-2.2 配置及用法完全攻略

httpd-2.2 配置及用法完全攻略

http: 文本协议,80/tcphttps: 二进制格式的协议, 443/tcpSSL 握手要完成的工作:

交换协议版本号

选择双方都支持的加密方式

对两端实现身份验正

密钥交换

SSL 会话基于 IP 地址进行,不支持在基于 FQDN 的虚拟主机上实现,所以在只有一个公网 IP 的服务器上使用虚拟主机时,只能为一个站点使用 https。

配置支持 https:

(1)安装 httpd 支持 ssl 模块
[root@localhost ~]# yum install mod_ssl -y
(2)自建 CA
[root@localhost ~]# cd /etc/pki/CA
[root@localhost ~]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
[root@localhost ~]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
(3)生成私钥
[root@localhost ~]# cd /etc/httpd/conf/
[root@localhost ~]# mkdir ssl
[root@localhost ~]# cd ssl
[root@localhost ~]# (umask 077; openssl genrsa -out httpd.key 1024)
(4)生成证书申请
[root@localhost ~]# openssl req -new -key httpd.key -out httpd.csr
(5)CA 签署证书
[root@localhost ~]# openssl ca -in httpd.csr -out httpd.crt -days 365
(6)修改 httpd 的 ssl 配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/var/www/html/feiyu1"
ServerName www.feiyu.com
SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key
(7)验证导入浏览器

验证, 可以使用以下命令进行验证或者将证书导入到浏览器并进行访问:

# openssl s_client -connect IP:port -CAfile /path/to/CA_certificate_file
17、服务器 status 页面

status 页面是 httpd 内生的,且此信息可以通过 web 予以显示,此信息是关于服务器的运行状态的所以不能对所有人都显示。

[root@localhost html]# vim /etc/httpd/conf/httpd.conf
<Location /server-status>
SetHandler server-status
AuthType Basic
AuthName "Server Status"
AuthUserFile "/etc/httpd/conf/.htpasswd"
Require valid-user
Order deny,allow
Allow from all

<Location /server-status>

SetHandler:显式的定义使用的处理器,是当文件被调用时,Apache 内部表示形式;一般每种文件类型都有其隐式处理器;

18、使用 mod_deflate 模块压缩页面优化传输速度

一般当 CPU 多空闲,带宽压力大时才会启用压缩,启用压缩不但能优化传输速度也能节约带宽,但是其一个弊端就是会使缓存的命中率下降。

[root@localhost html]# vim /etc/httpd/conf/httpd.conf
 
SetOutputFilter DEFLATE    #启用 deflate
 
 [root@localhost conf.d]# vim deflate.conf
 
    # Restrict compression to these MIME types    定义要压缩的文件类型 
    AddOutputFilterByType DEFLATE text/plain 
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
 
    # Level of compression (Highest 9 - Lowest 1)
    DeflateCompressionLevel 9                     #压缩比,默认为 6
     
    # Netscape 4.x has some problems.
    BrowserMatch ^Mozilla/4 gzip-only-text/html
     
    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
     
    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
19、资源限定

软限制:可以超出的限制,但仅超出一定时长;

硬限制:绝对不能超出的限制

使用 ulimit 可以修改软限制:

-n [N]: 显示或限定能打开的最大的文件句柄数;

-u [N]: 所能够运行的最多进程数;

其相对应的配置文件为:/etc/security/limits.conf,扩展配置:/etc/security/limits.d/*.conf

root@tianfeiyu # vim /etc/security/limits.conf #设定硬限制
apache hard nofile   65535  #设定能打开的最大文件数
apache hard nproc 30000# 设定能打开的最大进程数
20、httpd 程序包自带的工具介绍

httpd:Apache 服务器。

apachectl:Apache HTTP 服务器控制工具。ab:Apache HTTP 服务器性能基准工具。apxs:Apache 扩展工具。configure: 配置源代码。dbmmanage: 为基本认证创建和更新 DBM 格式的用户认证文件。htcacheclean: 清理磁盘缓存。htdigest: 为摘要认证创建和更新用户认证文件。htdbm: 操作 DBM 密码数据库。htpasswd: 为基本认证创建和更新用户认证文件。httxt2dbm: 为 RewriteMap 创建 dbm 文件。logresolve: 将 Apache 日志文件中的 IP 地址解析到主机名称。rotatelogs: 不关闭 Apache 而切换日志文件。suexec: 执行外部程序前切换用户。运行目录:/etc/httpd

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

扩展配置:/etc/httpd/conf.d/*.conf

Socket: 80/tcp, 443/tcp

文档根目录:/var/www/html

CGI 目录:/var/www/cgi-bin/
MPM(Multipath Processing Module):多道处理模块,非一个模块,而是对一种特性的称谓

多进程模型 prefork: 一个进程响应一个请求(主进程创建进程响应)多线程模型 worker: 一个主进程多个子进程,一个进程生成多个线程,一个线程响应一个请求, 一个进程生成的线程数有限

事件模型 event: 一个线程响应多个请求,基于事件驱动机制来维持多个用户请求;event-driven: 事件驱动,主要目的在于实现单线程响应多个请求;httpd 配置目录信息:服务脚本:/etc/rc.d/init.d/httpd 脚本配置文件:/etc/sysconfig/httpd
高度模块化:DSO(Dynamic Shared Object)动态化装饰模块

MPM(Multipath Processing Module):多道处理模块,非一个模块,而是对一种特性的称谓

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计9739字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中