首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTPD 基础篇

HTTPD 基础篇

作者头像
用户1456517
发布2019-03-05 16:01:56
7100
发布2019-03-05 16:01:56
举报
文章被收录于专栏:芝麻实验室芝麻实验室
安装Httpd
  • Httpd已被收录base仓库,直接通过YUM安装即可
# yum -y install httpd
  • 通过tree命令查看Httpd主体配置结构
# tree /etc/httpd/ 
/etc/httpd/          #httpd配置目录
├── conf             #主配置目录
│   ├── httpd.conf   #主配置文件
│   └── magic       
├── conf.d           #辅助配置目录
│   ├── autoindex.conf 
│   ├── README
│   ├── userdir.conf
│   └── welcome.conf     
├── conf.modules.d   #模块文件路径
│   ├── 00-base.conf
│   ├── 00-dav.conf
│   ├── 00-lua.conf
│   ├── 00-mpm.conf
│   ├── 00-proxy.conf
│   ├── 00-systemd.conf
│   └── 01-cgi.conf    
├── logs -> ../../var/log/httpd #日志存储目录(注: 这里软链到/var/log/httpd)
├── modules -> ../../usr/lib64/httpd/modules #模块存储目录
└── run -> /run/httpd #主进程文件目录(PID文件)

6 directories, 13 files
主配置文件详解
  • 获取我们需要的内容并做备份
# cp conf/httpd.conf{,.bak}
[root@Center httpd]# less conf/httpd.conf
# sed -i '/^[[:space:]]*#/d' conf/httpd.conf
  • 配置文件
[root@Center httpd]# less conf/httpd.conf
ServerRoot "/etc/httpd" #服务器根目录(守护进程运行目录)
Listen 80 #服务监听端口
Include conf.modules.d/*.conf #引用模块配置文件
User apache #以指定用户运行httpd进程
Group apache #以指定组运行httpd进程
ServerAdmin root@localhost #指定服务管理员

<Directory /> #目录权限控制,下同
    AllowOverride none
    Require all denied #拒绝所有
</Directory>

DocumentRoot "/var/www/html" #Main站点根目录

<Directory "/var/www">
    AllowOverride None
    Require all granted #允许所有
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted #允许所有
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

#拒绝访问所有 .ht 后缀的文件(常用于拒绝非法访问 .htaccess 文件)
<Files ".ht*"> 
    Require all denied
</Files>

ErrorLog "logs/error_log" #错误日志存储路径
LogLevel warn #日志记录级别 

#日志模块配置段
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined #定义日志(access_log)格式,下同
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" combined #引用LogFormat,格式形如:CustomLog "LOGS_PATH" LogFormat_NAME
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8 #默认字符集

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>

EnableSendfile on #开启Sendfile
IncludeOptional conf.d/*.conf #引用辅助配置文件
Main主机
  • 安装完Httpd后,将默认启用Main主机,且该站点为默认响应站点,即Default_Web_Site,默认站点根目录为/var/www/html
[root@Center httpd]# echo "Hi, XiaoMu" > /var/www/html/index.html #写入自定义网页内容
[root@Center httpd]# curl localhost #访问本地Main主机
Hi, XiaoMu
虚拟主机
  • 简单来说,虚拟主机就是在一台物理主机上,实现多个站点的构建和部署;Httpd支持3种模式的虚拟主机构建实现,分别为:
  • 基于IP(网际协议地址)的虚拟主机
  • 基于PORT(端口)的虚拟主机
  • 基于FQDN(域名)的虚拟主机
  • 同时,尽量不要将虚拟主机同Main主机混合使用(即httpd.conf配置下的主机),建议使用虚拟主机时,禁用Main主机,即注释下面一行:
# DocumentRoot "/var/www/html"
基于IP的虚拟主机
  • 获取本机IP地址
# ifconfig | grep inet\
        inet 192.168.119.137  netmask 255.255.255.0  broadcast 192.168.119.255
        inet 192.168.1.128  netmask 255.255.255.0  broadcast 192.168.31.255
        inet 127.0.0.1  netmask 255.0.0.0
# cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/
  • 配置基于IP的虚拟主机。注: 自Httpd2.4开始,加强了访问控制,若站点根目录非/var/www/html,则必须显式授权,否则将跳转至默认页(即:"/usr/share/httpd/noindex/index.html")
# vim /etc/httpd/conf.d/httpd-vhosts.conf
# 同一端口,但不同地址
<VirtualHost 192.168.119.137:80>
#    ServerAdmin webmaster@dummy-host.example.com #管理员邮箱
     DocumentRoot "/www/web1" #当前虚拟主机站点根目录
#    ServerName dummy-host.example.com #域名
#    ServerAlias www.dummy-host.example.com #域名别名
#    ErrorLog "/var/log/httpd/dummy-host.example.com-error_log" #错误日志存储路径
#    CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common #访问日志存储路径,其格式默认继承自 httpd.conf ;允许在当前配置段自定义格式,但仅在当前配置段有效
     <Directory "/www/web1"> #显式授权
         Options Indexes FollowSymLinks
         AllowOverride None
         Require all granted
     </Directory>
</VirtualHost>

<VirtualHost 192.168.1.128:80>
#    ServerAdmin webmaster@dummy-host2.example.com
     DocumentRoot "/www/web2"
#    ServerName dummy-host2.example.com
#    ErrorLog "/var/log/httpd/dummy-host2.example.com-error_log"
#    CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common
     <Directory "/www/web2">
         Options Indexes FollowSymLinks
         AllowOverride None
         Require all granted
     </Directory>
</VirtualHost>
[root@Center httpd]# mkdir -pv /www/web{1..2}
mkdir: created directory ‘/www’
mkdir: created directory ‘/www/web1’
mkdir: created directory ‘/www/web2’
[root@Center httpd]# echo "This is web1" > /www/web
web1/ web2/
[root@Center httpd]# echo "This is web1" > /www/web1/index.html
[root@Center httpd]# echo "This is web2" > /www/web2/index.html
[root@Center httpd]# httpd -t #语法检查
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::727e:c9e:9edf:ff8d. Set the 'ServerName' directive globally to suppress this message
Syntax OK
  • 可以看到,httpd语法检查程序提示ServerName错误,解决上述错误只需去除下列行首注释即可:
[root@Center httpd]# vim conf/httpd.conf #注意,应该在主配置文件修改
ServerName www.example.com:80
  • 再次执行语法检查
[root@Center httpd]# httpd -t
Syntax OK
  • 重启服务,并查看端口监听情况
  • 浏览器访问站点,判断是否程序正确执行
基于PORT的虚拟主机
  • 配置基于PORT的虚拟主机
[root@Center httpd]# vim conf.d/httpd-vhosts.conf
# 同一地址,但不同端口(截取部分配置信息)
<VirtualHost 192.168.1.128:80> #注意,此处监听的是80/tcp
#    ServerAdmin webmaster@dummy-host2.example.com
     DocumentRoot "/www/web2"
#    ServerName dummy-host2.example.com
#    ErrorLog "/var/log/httpd/du     mmy-host2.example.com-error_log"
#    CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common
     <Directory "/www/web2">
         Options Indexes FollowSymLinks
         AllowOverride None
         Require all granted
     </Directory>
</VirtualHost>

Listen 8080 #必须显式声明监听8080/tcp
<VirtualHost 192.168.1.128:8080> #注意,此处监听的是8080/tcp
#    ServerAdmin webmaster@dummy-host2.example.com
     DocumentRoot "/www/web3"
#    ServerName dummy-host2.example.com
#    ErrorLog "/var/log/httpd/dummy-host2.example.com-error_log"
#    CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common
     <Directory "/www/web3">
         Options Indexes FollowSymLinks
         AllowOverride None
         Require all granted
     </Directory>
</VirtualHost>
[root@Center httpd]# mkdir -pv /www/web3
mkdir: created directory ‘/www/web3’
[root@Center httpd]# echo "This is web3" > /www/web3/index.html
  • 浏览器查验程序是否正确执行
基于FQDN的虚拟主机
  • 在配置给予FQDN的虚拟主机前,我们需要先完成域名解析,且有2种实现方式:
- 基于DNS域名解析系统
- 基于hosts文件此处为方便演示,采用hosts的方式,如想通过DNS解析,请参照
- Like Unix OS

echo "192.168.1.128 t1.zhimajihua.cn t2.zhimajihua.cn" >> /etc/hosts

- Windows NT X
    - `如果不是以Windows本地账户登录,你可能需要通过具有管理员权限的账号手动授权,默认只读`
    - 在 C:WindowsSystem32driversetchosts 中添加下述条目:

192.168.1.128 t1.zhimajihua.cn t2.zhimajihua.cn

  • 配置基于FQDN的虚拟主机
[root@Center httpd]# vim conf.d/httpd-vhosts.conf
<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
     DocumentRoot "/www/web1"
     ServerName t1.zhimajihua.cn
#    ServerAlias www.dummy-host.example.com
#    ErrorLog "/var/log/httpd/dummy-host.example.com-error_log"
#    CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common
     <Directory "/www/web1">
         Options Indexes FollowSymLinks
         AllowOverride None
         Require all granted
     </Directory>
</VirtualHost>

<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host2.example.com
     DocumentRoot "/www/web2"
     ServerName t2.zhimajihua.cn
#    ErrorLog "/var/log/httpd/dummy-host2.example.com-error_log"
#    CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common
     <Directory "/www/web2">
         Options Indexes FollowSymLinks
         AllowOverride None
         Require all granted
     </Directory>
</VirtualHost>
[root@Center httpd]# echo "This is t1.zhimajihua.cn" > /www/web1/index.html
[root@Center httpd]# echo "This is t2.zhimajihua.cn" > /www/web2/index.html
[root@Center httpd]# httpd -t
Syntax OK
[root@Center httpd]# systemctl restart httpd
  • 浏览器查验程序是否正确执行

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/02/10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • echo "192.168.1.128 t1.zhimajihua.cn t2.zhimajihua.cn" >> /etc/hosts
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档