Linux基础服务6——Apache

news/2024/7/12 3:03:53 标签: linux, apache, 运维, https

文章目录

  • 一、基本了解
    • 1.1 自带工具
    • 1.2 服务配置文件
    • 1.3 访问控制法则
    • 1.4 web相关的命令
      • 1.4.1 curl命令
      • 1.4.2 httpd命令
  • 二、安装配置
    • 2.1 安装服务
    • 2.2 访问网页
    • 2.3 虚拟主机配置
      • 2.3.1 相同ip,不同端口
      • 2.3.2 相同端口,不同ip
      • 2.3.3 域名访问
  • 三、https
    • 3.1 生成证书
    • 3.2 启动ssl模块
    • 3.3 httpd-ssl.conf中指定证书位置
    • 3.4 访问网页验证

一、基本了解

httpd是什么?

  • httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
  • httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中作为服务运行。

httpd版本特性:

  1. CentOS6系列的版本默认提供的是httpd-2.2版本的rpm包。
    • 事先创建进程。
    • 按需维持适当的进程。
    • 模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块。
    • 支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等。
    • 支持https协议(通过mod_ssl模块实现)。
    • 支持用户认证。
    • 支持基于IP或域名的ACL访问控制机制。
    • 支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和密码)。
    • 支持URL重写。
    • 支持MPM(Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程)。
  2. CentOS7系列的版本默认提供的是httpd-2.4版本的rpm包。
    • MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载。
    • 支持event MPM,eventMPM模块生产环境可用。
    • 支持异步读写。
    • 支持每个模块及每个目录分别使用各自的日志级别。
    • 每个请求相关的专业配置,使用< If >来配置。
    • 增强版的表达式分析器。
    • 支持毫秒级的keepalive timeout。
    • 基于FQDN的虚拟主机不再需要NameVirtualHost指令。
    • 支持用户自定义变量。
    • 支持新的指令(AllowOverrideList)。
    • 降低对内存的消耗。

工作模型:

  1. prefork工作方式:
    • 多进程模型,预先生成进程,一个请求用一个进程响应。
    • 一个主进程负责生成n个子进程,子进程也称为工作进程。
    • 每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个
  2. worker工作方式:
    • 基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程)
  3. event工作方式:
    • 基于事件的驱动,一个进程处理多个请求

httpd-2.4新增的模块:

  • mod_proxy_fcgi模块:反向代理时支持apache服务器后端协议的模块。
  • mod_ratelimit模块:提供速率限制功能的模块。
  • mod_remoteip模块:基于ip的访问控制机制被改变,不再支持使用Order,Deny,Allow来做基于IP的访问控制。

1.1 自带工具

工具功能
htpasswdbasic认证基于文件实现时,用到的帐号密码生成工具
apachectlhttpd自带的服务控制脚本,支持start,stop,restart
apxs由httpd-devel包提供的,扩展httpd使用第三方模块的工具
rotatelogs日志滚动工具
suexec访问某些有特殊权限配置的资源时,临时切换至指定用户运行的工具
abapache benchmark,httpd的压力测试工具

1.2 服务配置文件

  • mpm:以DSO机制提供,配置文件为/etc/httpd/conf.modules.d/00-mpm.conf
文件目录释义
/var/log/httpd/access.log访问日志
/var/log/httpd/error_log错误日志
/var/www/html/站点文档目录
/usr/lib64/httpd/modules/模块文件路径
/etc/httpd/conf/httpd.conf主配置文件
/etc/httpd/conf.modules.d/*.conf模块配置文件
/etc/httpd/conf.d/*.conf辅助配置文件

1.3 访问控制法则

法则释义
Require all granted允许所有主机访问
Require all deny拒绝所有主机访问
Require ip IPADDR授权指定来源地址的主机访问
Require not ip IPADDR拒绝指定来源地址的主机访问
Require host HOSTNAME授权指定来源主机名的主机访问
Require not host HOSTNAME拒绝指定来源主机名的主机访问
IPADDR的类型HOSTNAME的类型
IP: 192.168.1.1
Network/mask:1921681.0/255.2552550
Network/Length:192.168.1.0/24
Net:192.168
FQDN:特定主机的全名
DOMAIN:指定域内的所有主机

1.注意,httpd-2.4版本默认是拒绝所有主机访问的,所以安装以后必须做显示授权访问,按照如下方式修改即可。

<Directory /var/www/html/www>
    <RequireAlI>
        Require not ip 192.168.1.20
        Require all granted
    </RequireAlI>
</Directory>

1.4 web相关的命令

1.4.1 curl命令

  • curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。
  • curl支持以下功能:
    1. https认证
    2. http的POST/PUT等方法
    3. ftp上传
    4. kerberos认证
    5. http上传
    6. 代理服务器
    7. cookies
    8. 用户名/密码认证
    9. 下载文件断点续传
    10. socks5代理服务器
    11. 通过http代理服务器上传文件到ftp服务器
//语法:curl [options] [URL ...]
//常用的options:
    -A/--user-agent <string>    //设置用户代理发送给服务器
    -basic              //使用Http基本认证
    --tcp-nodelay       //使用TCP_NODELAY选项
    -e/--referer <URL>      //来源网址
    --cacert <file>     //CA证书(SSL)
    --compressed        //要求返回时压缩的格式
    -H/--header <line>  //自定义请求首部信息传递给服务器
    -I/--head           //只显示响应报文首部信息
    --limit-rate <rate>     //设置传输速度
    -u/--user <user[:password]>     //设置服务器的用户和密码
    -0/--http1      //使用http 1.0版本,默认使用1.1版本。这个选项是数字0而不是字母o
    -o/--output     //把输出写到文件中
    -#/--progress-bar       //进度条显示当前的传送状态

1.4.2 httpd命令

//语法:httpd [options]
//常用的options:
    -l      //查看静态编译的模块,列出核心中编译了哪些模块。 \
            //它不会列出使用LoadModule指令动态加载的模块
    -M      //输出一个已经启用的模块列表,包括静态编译在服务 \
            //器中的模块和作为DSO动态加载的模块
    -v      //显示httpd的版本,然后退出
    -V      //显示httpd和apr/apr-util的版本和编译参数,然后退出
    -X      //以调试模式运行httpd。仅启动一个工作进程,并且 \
            //服务器不与控制台脱离
    -t      //检查配置文件是否有语法错误

二、安装配置

2.1 安装服务

1.安装httpd服务。

yum -y install httpd

https://img-blog.csdnimg.cn/329f2db4f1284de0b7f5545b67cd298c.png" alt="在这里插入图片描述" />

2.关闭防火墙和selinux,访问网页。
https://img-blog.csdnimg.cn/3f7ee2b7654e4c3fa3797b3ab77aeeb4.png" alt="在这里插入图片描述" />

2.2 访问网页

1.修改默认前端网页文件index.html内容,访问网页。
https://img-blog.csdnimg.cn/643da81d30c5497d8c3e9b1350d2db4a.png" alt="在这里插入图片描述" />
2.自定义前端文件名称,访问时需跟上文件名称。
https://img-blog.csdnimg.cn/86e6bf4550f447088ceacaae76012423.png" alt="在这里插入图片描述" />
3.也可以创建目录,将前端文件放入目录下访问。
https://img-blog.csdnimg.cn/03a8d0741a59445a91de8490b07c87a5.png" alt="在这里插入图片描述" />

2.3 虚拟主机配置

2.3.1 相同ip,不同端口

1.查找配置文件模板。

//查找配置文件模板,将其拷贝至/etc/httpd/conf.d目录下。
find / -name *vhosts.conf
cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf   /etc/httpd/conf.d

//一个虚拟主机的配置参数释义。
vim /etc/httpd/conf.d/httpd-vhosts.conf

<VirtualHost *:80>    //*表示IP,80表示端口号。
    ServerAdmin webmaster@dummy-host.example.com    //邮箱,可忽略不配置。
    DocumentRoot "/data"     //网站存放位置。
    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     //正确日志存放位置。
    <Directory /data>      //允许显示授权访问,不然网页访问不到上面配置的前端文件内容。
        <RequireAll>
            Require all granted
        </RequireAll>
    </Directory>
</VirtualHost>

2.在模板的基础上进行修改。

vim httpd-vhosts.conf
......
<VirtualHost *:80>
    DocumentRoot "/data/www.qingjun.com"
    ServerName www.qingjun.com
    ErrorLog "/var/log/httpd/www.qingjun.com-error_log"
    CustomLog "/var/log/httpd/www.qingjun.com-access_log" common
    <Directory /data/www.qingjun.com>
        <RequireAll>
            Require all granted
        </RequireAll>
    </Directory>
</VirtualHost>

Listen 81
<VirtualHost *:81>
    DocumentRoot "/data/www.baimu.com"
    ServerName www.baimu.com
    ErrorLog "/var/log/httpd/www.baimu.com-error_log"
    CustomLog "/var/log/httpd/www.baimu.com-access_log" common
    <Directory /data/www.baimu.com>
            Require all granted
    </Directory>
</VirtualHost>

3.创建刚自定义的前端文件。

mkdir -p /data/{www.qingjun.com,www.baimu.com}
echo '好好学习' > /data/www.qingjun.com/index.html
echo '大好河山' > /data/www.baimu.com/index.html

//检查配置文件是否错误。
httpd -t

//重启服务。
systemctl  restart httpd

4.访问网页。
https://img-blog.csdnimg.cn/60d374f7a8a24aa3b1b197fd3a4155ca.png" alt="在这里插入图片描述" />
https://img-blog.csdnimg.cn/901c00158161496fab46f9b8054682f5.png" alt="在这里插入图片描述" />

2.3.2 相同端口,不同ip

1.修改虚拟主机配置文件。

<VirtualHost 192.168.130.160:80>  //相同端口,不同ip,该Ip需要存在本地服务器上。
    DocumentRoot "/data/www.qingjun.com"
    ServerName www.qingjun.com
    ErrorLog "/var/log/httpd/www.qingjun.com-error_log"
    CustomLog "/var/log/httpd/www.qingjun.com-access_log" common
    <Directory /data/www.qingjun.com>
        <RequireAll>
            Require all granted
        </RequireAll>
    </Directory>
</VirtualHost>

<VirtualHost 192.168.130.120:80>    //相同端口,不同ip,该Ip需要存在本地服务器上。
    DocumentRoot "/data/www.baimu.com"
    ServerName www.baimu.com
    ErrorLog "/var/log/httpd/www.baimu.com-error_log"
    CustomLog "/var/log/httpd/www.baimu.com-access_log" common
    <Directory /data/www.baimu.com>
            Require all granted
    </Directory>
</VirtualHost>

//检查配置文件是否错误。
httpd -t

//重启服务。
systemctl  restart httpd

2.本地新增一个ip。

//添加ip。
ip addr add 192.168.130.120/24 dev ens33

//删除ip。
ip addr del 192.168.130.120/24 dev ens33

https://img-blog.csdnimg.cn/1e5fba6cb1f9434487135d92cff6c675.png" alt="在这里插入图片描述" />
3.访问网页。
https://img-blog.csdnimg.cn/d9dae069243749408ba9c817cfa3641f.png" alt="在这里插入图片描述" />
https://img-blog.csdnimg.cn/20f5f42bf6ba44d588b6ff21fcdfbae1.png" alt="在这里插入图片描述" />

2.3.3 域名访问

1.修改虚拟主机配置文件。

<VirtualHost *:80>  
    DocumentRoot "/data/www.qingjun.com"
    ServerName www.qingjun.com
    ErrorLog "/var/log/httpd/www.qingjun.com-error_log"
    CustomLog "/var/log/httpd/www.qingjun.com-access_log" common
    <Directory /data/www.qingjun.com>
        <RequireAll>
            Require all granted
        </RequireAll>
    </Directory>
</VirtualHost>

<VirtualHost *:80>   
    DocumentRoot "/data/www.baimu.com"
    ServerName www.baimu.com
    ErrorLog "/var/log/httpd/www.baimu.com-error_log"
    CustomLog "/var/log/httpd/www.baimu.com-access_log" common
    <Directory /data/www.baimu.com>
            Require all granted
    </Directory>
</VirtualHost>

//检查配置文件是否错误。
httpd -t

//重启服务。
systemctl  restart httpd

2.本机域名映射。
https://img-blog.csdnimg.cn/0f96eaf6d6bd4ca5b82426fde8d2db04.png" alt="在这里插入图片描述" />
3.访问网页。
https://img-blog.csdnimg.cn/f1601a2490e445baa906a1d16a67ad0e.png" alt="在这里插入图片描述" />
https://img-blog.csdnimg.cn/55a01be31f5044f18794f6cff633eccd.png" alt="在这里插入图片描述" />

https_313">三、https

配置思路:

  1. 生成证书
  2. 配置httpd.conf,取消以下内容的注释,新版本此步骤可以忽略。
    • LoadModule ssl_module modules/mod_ssl.so
    • Include /etc/httpd24/extra/httpd-vhosts.conf
    • Include /etc/httpd24/extra/httpd-ssl.conf
  3. 在httpd-vhosts.conf中配置虚拟主机。
  4. 在httpd-ssl.conf中配置证书的位置。
  5. 检查配置文件是否有语法错误。
  6. 启动或重启服务。
  7. 设置hosts以便用域名访问。

3.1 生成证书

1.CA生成一对密钥

cd /etc/pki/CA 
(umask 077;openssl genrsa -out private/cakey.pem 2048)    #生成密钥,括号必须要
openssl rsa -in private/cakey.pem -pubout    #提取公钥

2.CA生成自签署证书。

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365    #生成自签署证书
openssl x509 -text -in cacert.pem    #读出cacert.pem证书的内容
mkdir certs newcerts crl
touch index.txt && echo 01 > serial

https://img-blog.csdnimg.cn/6b63a667657a4b4fbdaca3ee2e4391b5.png" alt="在这里插入图片描述" />

3.客户端服务器生成密钥,哪个服务需要证书就在哪台服务器上生成,这里就是在httpd所在的服务器上生成。

cd /etc/httpd && mkdir ssl && cd ssl
(umask 077;openssl genrsa -out httpd.key 2048)

4.客户端生成证书签署请求。

openssl req -new -key httpd.key -days 365 -out httpd.csr

https://img-blog.csdnimg.cn/0ae584c59b25408ea0f524bfe2b3cd2c.png" alt="在这里插入图片描述" />
5.客户端把证书签署请求文件发送给CA服务器,CA签署客户端提交上来的证书。

[root@localhost httpd]# openssl ca -in httpd.csr -out httpd.crt -days 365

6.CA把签署好的证书httpd.crt发给客户端。

3.2 启动ssl模块

1.安装模块。

yum -y install mod_ssl

2.如下目录文件中存在此行,说明已启用。
https://img-blog.csdnimg.cn/74cbd944adaf4d77bdebaa79c32753ad.png" alt="在这里插入图片描述" />

3.3 httpd-ssl.conf中指定证书位置

1.在/etc/httpd/conf.d/00-ssl.conf文件中配置。

//取消注释,指定正确位置。
DocumentRoot "/data/www.qingjun.com"
ServerName www.qingjun.com:443

//指定证书正确位置。
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

2.重启服务。

httpd -t

systemctl  restart httpd

3.4 访问网页验证

1.查看/var/www/html/目录下定义的前端内容。
https://img-blog.csdnimg.cn/905d43d54eed43b29f299c7fb53adab9.png" alt="在这里插入图片描述" />
2.https访问。
https://img-blog.csdnimg.cn/6ced6eb2cc2444a7a7c899bb11f9f665.png" alt="在这里插入图片描述" />
3.http访问。
https://img-blog.csdnimg.cn/64456999f0c249b7843ba3b63d1cd314.png" alt="在这里插入图片描述" />


http://www.niftyadmin.cn/n/1009314.html

相关文章

第五课—大学英语四六级备考—听力专项

Key words 1.implement vt.实施 "Implement" 在中文中的意思是「实施」或「执行」。以下是一些示例用法和搭配&#xff1a; 中文意思&#xff1a;实施、执行 形近字&#xff1a;implicate&#xff08;牵连&#xff09; 1. 用英文造句&#xff1a;The government …

6.Mysql自连接

针对相同的表进行的连接被称为“自连接”&#xff08;self join&#xff09; 那么为什么要把相同的一张表连接起来呢&#xff1f;一开始还是挺难理解的。把它想象成连接两张不同的表&#xff0c;这样容易理解一些。事实上&#xff0c;自连接还是有很多用处的 1. 在同一张表内进…

Windows 使用Git使用Gitee仓库

1.本地创建文件夹。图中例子&#xff0c;我在桌面创建了文件夹。 2.打开 Git Bash Here. 3.Git Bash 的部分指令。 ls 查看当前文件夹 mkdir gittest01 创建文件夹 cd gittest01 进入文件夹 git init 创建本地仓库 git config --global user.name"chengqian" 创建者…

位运算符

Python中的位运算是对二进制数进行操作的运算符。以下是Python中常用的位运算符&#xff1a; 按位与&#xff08;&&#xff09;&#xff1a;对两个操作数的每个对应位执行与操作&#xff0c;只有两个位都为1时&#xff0c;结果才为1。示例&#xff1a;5 & 3 1 解释&am…

【手撕算法|动态规划系列No.3】leetcode746. 使用最小花费爬楼梯

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

Mybatis面试题--MyBatis执行流程

首先我们知道Mybatis是目前最流行的持久层框架&#xff0c;当我们了解了执行流程&#xff0c;可以让我们理解各个组件的关系&#xff0c;以及Sql的执行过程&#xff08;参数映射、sql解析、执行和结果处理&#xff09; 1首先我们需要读取框架的核心配置文件 2接下来我们就要去操…

Java 语言面向对象抽象类

抽象类是 Java 语言中的一种特殊类别&#xff0c;它不能被直接实例化。抽象类是一种用于表示概念性或模板性的类&#xff0c;通常用于定义通用的行为和属性&#xff0c;而不是实现它们的具体细节。 抽象类的定义 在 Java 中&#xff0c;抽象类是用 abstract 关键字修饰的类。…

E8-事关明细表里的控件事件绑定、日期的计算、明细表的求和等问题的处理办法

起因 下面的讲述的事情是从开发出差申请流程开始的。涉及的知识点偏多&#xff0c;且得容我慢慢梳理出来。以下篇幅可能会有点儿长&#xff0c;但内容我会争取写得精彩的。 图1 发起表单样式如图1&#xff0c;我想实现的是当修改出发日期或结束日期的时候&#xff0c;自动计算…