Linux进阶之HTTP服务篇

HTTP简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

HTTP的基础配置

yum install httpd:安装http服务
yum start httpd:开启http服务

防火墙
端口封闭问题:默认情况下,防火墙可能会关闭或限制对HTTP服务所使用的端口(比如80端口)的访问。因此,如果要通过HTTP访问服务器,需要将防火墙的相关端口打开或者完全关闭防火墙。

systemctl stop firewalld临时关闭防火墙:为了简化测试或开发环境的设置,管理员可能会选择暂时关闭防火墙,以允许所有的网络流量通过,包括HTTP请求。

SELinux
SELinux是一个安全增强系统,它会对文件访问、网络访问等进行更严格的控制。默认情况下,它可能会限制HTTP服务器访问文件或网络资源,这可能导致HTTP服务无法正常运行。

setenforce=0一个临时解决方案,用于将SELinux设置为宽松模式(Permissive Mode),即允许所有操作但仍然会记录,而不是强制执行策略(Enforcing Mode)。这样可以在不完全禁用SELinux的情况下,暂时允许HTTP服务的访问和操作。

访问自己IP,出现下图
在这里插入图片描述
echo 123 > /var/www/html/index.html默认访问地址/var/www/html/index.html,此语句为网站创建内容,再次访问就会出现你所输入的内容

HTTP服务的默认配置文件 /etc/httpd/conf/httpd.conf

详解其中主要的指令
1
serverRoot "/etc/httpd":ServerRoot 指令用于指定服务器的根目录,即服务器程序(httpd)的基本安装路径。

2
Listen 80:监听IP和端口,可设置多个端口,但不可一个端口设置多次

3
Include conf.modules.d/*.confinclude指令允许将其他配置文件或代码片段包含到主配置文件中。此命令包含conf.modules.d目录下额外的配置文件供主配置文件使用

4
User apache系统用户
Group apache系统用户属组

5
ServerAdmin root@localhost用来指定 Apache 服务器管理员电子邮件地址的配置指令,确保在需要时可以通过邮件联系到管理员。root@localhost 是一个示例地址,通常指定为服务器的管理员联系方式。

6
<Directory />目录块的起始,配置将应用于/下子目录和文件
AllowOverride none规定了对于位于这个目录块中的 .htaccess 文件的处理方式。AllowOverride none 表示不允许在这个目录及其子目录中使用 .htaccess 文件来覆盖服务器的配置设置。

.htaccess 文件通常包含了用于配置 Apache 的特定指令

Require all denied对此目录的请求全部拒绝,若将denied改为granted则意思相反
Options Indexes FollowSymLinks

Options: 这个指令用于在Apache配置文件中设置目录或文件的各种选项。

Indexes: 当启用 (Indexes) 时,允许在没有默认索引文件(比如 index.html、index.php 等)的情况下显示目录列表。这意味着如果有人访问你的Web服务器上的某个目录,并且该目录中没有默认的索引文件,Apache会显示该目录中的文件和子目录列表。

FollowSymLinks: 当启用 (FollowSymLinks) 时,Apache允许跟随符号链接(symlinks)来访问文件。符号链接是一种特殊的文件,作为指向服务器上其他文件或目录的指针。启用 FollowSymLinks 允许Apache在提供文件时遍历符号链接。

</Directory>表示目录块的结束

HTTP服务用户自定义配置文件

/etc/httpd/conf/httpd.conf最后一行内容

IncludeOptional conf.d/*.conf

目录/etc/httpd/conf.d下的配置文件为主配置文件所用,也就是被包含
所以我们接下来的操作在其目录下操作
vim vhost.conf编写自定义的配置文件,以下为其配置文件内容

增加监听端口

#为配合基于不同端口而配置
listen 9000
listen 9001
listen 9002

目录块配置
若目录块中的目录包含以下配置的目录,则不需要多次重复写入

<directory  /www>
allowoverride none
require all granted
</directory>

基于不同 IP

<virtualhost 192.168.89.137:80>
documentroot /www
servername 192.168.89.137
</virtualhost>

<virtualhost 192.168.89.138:80>
documentroot /www/138
servername 192.168.89.138
</virtualhost>

<virtualhost 192.168.89.139:80>
documentroot /www/139
servername 192.168.89.139
</virtualhost>

DocumentRoot设置:指定了虚拟主机的根目录 ,这是服务器提供的网页文件的基础路径。所有在该虚拟主机下的网页文件都应该存放在这个目录中。比如第一个虚拟主机的根目录为 /www

ServerName 设置:指定了虚拟主机的主机名,比如第一个虚拟主机的为 192.168.89.137。当客户端请求的主机名匹配了这个设定的 ServerName 时,Apache 将使用这个虚拟主机的配置来处理请求。这里的 ServerName 可以是一个域名或者一个 IP 地址。

基于不同端口

<virtualhost 192.168.89.139:9000>
documentroot /www/9000
servername 192.168.89.139
</virtualhost>

<virtualhost 192.168.89.139:9001>
documentroot /www/9001
servername 192.168.89.139
</virtualhost>

<virtualhost 192.168.89.139:9002>
documentroot /www/9002
servername 192.168.89.139
</virtualhost>

基于不同域名

<virtualhost 192.168.89.140:80>
documentroot /www/haha
servername haha.com
</virtualhost>


<virtualhost 192.168.89.140:80>
documentroot /www/xixi
servername xixi.com
</virtualhost>

上述配置之后需systemctl restart httpd重启服务以生效

/etc/hosts文件中添加本地解析映射

192.168.89.140   xixi.com
192.168.89.140   haha.com

在测试的主机中的hosts文件中也添加以上DNS记录

Windows文件中hosts文件位于C://Windows/System32/drivers/etc/hosts

测试
以第一个虚拟主机的配置为例,其根目录为/www,故其网页内容可能在/www/index.html,可通过在其根目录下的index.html文件中写入不同内容,用浏览器访问验证。所以可以往指定目录中添加内容以测试

三种HTTP服务模式的应用场景

HTTP服务配置之用户认证

htpasswd -c /etc/httpd/zhanghao abc
htpasswd第一次创建需要添加-c,而之后再次添加用户不需要添加-c参数,之后输入密码,再次确认密码之后提示成功添加用户

makedir /usr/local/mysecret创建一个目录 且在其中添加一个index.html文件

vim /etc/httpd/conf.d/vhost.conf编译用户自定义配置文件添加以下内容:

<directory  /usr/local/mysecret>
authtype basic
authname "请输入密码:"
authuserfile /etc/httpd/zhanghao
require user abc tom
</directory>
<virtualhost 192.168.226.130:80>
servername hehe.com
alias /hehe /usr/local/mysecret
documentroot /www/hehe
/virtualhost>

alias:访问hehe.com/hehe时会追随到**/usr/local/mysecret**
systemctl restart httpd重启服务即可

HTTPS服务的配置

yum install mod_ssl安装mod_ssl
之后会在/etc/httpd/conf.d目录下找到ssl.conf(TLS/SSL),systemctl restart httpd重启服务即可完成

创建密钥证书,生成jiami.key(私钥)和jiami.crt(公钥钥)
私钥在/etc/pki/tls/private/目录下
openssl genrsa > jiami.key生成私钥

crt文件是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含
证书持有人的信息,持有人的公钥,以及签署者的签名等信息

公钥在/etc/pki/tls/certs目录下
openssl req -utf8 -new -key jiami.key -x509 -days 100 -out jiami,crt 生成公钥

编辑/etc/httpd/conf.d/ssl.conf文件,修改下图两项
在这里插入图片描述
systemctl restart httpd重启服务即可
测试主机访问网站,查看证书,可显示的信息为我们自定义的证书信息

为特定网页配置https服务
vim /etc/httpd/conf.d/vhost.conf编辑用户自定义httpd服务配置文件

<virtualhost 192.168.89.140:443>
documentroot /www/hehe
alias /hehe /usr/local/mysecret
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/jiami.crt
SSLCertificateKeyFile /etc/pki/tls/private/jiami.key
servername hehe.com
</virtualhost>

注意
与其他不同的只是有了以下改变
443端口,https默认端口
添加SSLEngine on
SSLCertificateFile CA.crt_path
SSLCertificateKeyFile K.key.path

基于python的动态HTTP服务

yum install python3-mod_wsgi -y安装python模块
/var/www/cgi-bin/目录下创建helloworld.wsgi文件
文件内容如下

def application(environ, start_response):
	status = '200 OK'
	output = b'Hello World'
	response_headers = [('Content-type', 'text/plain'),
						('Content-Length', str(len(output)))]
	start_response(status, response_headers)
	
	return [output][root@192 cgi-bin]# 

接着编辑用户自定义配置文件/etc/httpd/conf.d/vhost.conf
添加以下内容

<virtualhost 192.168.89.140:80>
servername heihei.com
WSGIScriptAlias / /var/www/cgi-bin/helloworld.wsgi
</virtualhost>

cgi-bin cgi-bin
curl http://heihei.com
回显程序生成的Hello World。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值