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

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

288次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7993240
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...