Linux部署Apache 网站服务器(httpd服务)
作者:@郑琰
本文转载请注明出处!:https://www.cnblogs.com/zhengyan6/p/16974187.html
一、项目导入:
某学院组建了校园网,建设了学院网站。现需要架设Web服务器来为学院网站安家,同时在网站上传和更新时,需要用到文件上传和下载,因此还要架设FTP服务器,为学院内部和互联网用户提供WWW、FTP等服务。本项目先实践配置与管理Apache服务器。
二、职业能力目标要求(即学习目标):
认识Apache重点
掌握Apache服务的安装和启动方法重点
掌握Apache服务的主配置文件重点
学会创建基于用户的个人网站难点
学会创建基于域名访问的虚拟主机难点
学会创建基于端口访问的虚拟主机难点
学会创建基于TLS加密的虚拟主机(443/TCP)难点
三、理论学习:
Apache(或httpd)是Internet上使用最多的Web服务器技术之一,使用的传输协议是http(Hypertext Transfer Protocol),超文本传输协议,这是一个基于超文本的协议,用于通过网络连接来发送和接受对象。http通过线路以明文形式发送,默认情况下使用80/TCP(也可以使用其他端口),此协议还有一个加密的版本,称为https,默认情况下使用端口443/TCP。同学们在学习服务配置之前,需要记住以下三个重要知识点:
- http -> 超文本传输协议 -> 80/TCP
- https -> 经TLS/SSL安全加密的超文本传输协议 -> 443/TCP
- 网站内容默认存放路径 -> /var/www/html
四、Apache服务搭建流程分析:
c/s架构
五、任务一:配置简单的默认的httpd服务
#子任务1——安装httpd服务 yum -y install httpd #子任务2——启动httpd服务 systemctl restart httpd systemctl enable httpd #子任务3——配置防火墙 firewall-cmd --permanent --add-service=http #子任务4——测试默认的httpd服务 客户端firefox http://server 或者 curl http://server
六、任务二:学习Apache主配置文件
子任务3——学习Directory标签
<Directory "/var/www/html"> AllowOverride None -> 设置.htaccess文件中的指令类型,None表示禁止使用.htaccess,该参数一般不改 Require all granted -> 设置权限,默认开启所有客户机访问权限 </Directory>
七、任务三:配置基于用户的个人网站
#子任务1——修改基于用户的httpd配置文件 vim /etc/httpd/conf.d/userdir.conf -> UserDir enabled -> 开启 -> UserDir public_html -> 去#注释 #子任务2——新建一个用户(网站基于该用户) useradd user0 #子任务3——做user0的网页文件 cd /home/user0/ mkdir public_html echo "this is website for user0">>index.html #子任务4——修改用户网页文件的访问权限 chmod o+x /home/user0 #子任务5——重启服务 systemctl restart httpd #子任务6——客户端测试 firefox http://server/~user0 或者 curl http://server/~user0 # 请思考:为什么会出现访问错误的页面?尝试排错方法如下: #子任务7——修改selinux权限: getsebool -a|grep home setsebool httpd_enable_homedirs
小插曲:实现个人主页密码认证
(一)生成密码
有时,我们在配置完成个人主页功能后,还希望能够对个人主页在登录时进行密码认证。
我们使用htpasswd命令生成密码,具体命令如下:
htpasswd -c /etc/httpd/passwd user0
如果我们是第一次生成密码,则需要按照如上要求加上-c参数,如果我们想要修改已经配置过的密码,则不需要加上面的-c参数,后面的/etc/httpd/passwd是生成密码文件的存放位置,最后的user0是指定用户。
(二)配置文件修改
在生成密码后,我们需要修改/etc/httpd/conf.d/userdir.conf的配置文件,打开该文件后,在
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS
然后添加下面行:
<Directory /home/*/public_html> AllowOverride AuthConfig AuthName "My privately website" AuthUserFile /etc/httpd/passwd Authtype basic Require user user0 </Directory>
然后保存退出并重启httpd
systemctl restart httpd
(三)效果验证
在我们完成上述配置后,重启服务,发现再次访问时会出现提示输入密码的框,此时表示我们已经配置成功!
八、任务四:配置基于域名访问的虚拟主机
#搭建的虚拟主机域名如下: www.one.com www.two.com #子任务1——新建虚拟主机的网页文件 mkdir /www/ chmod o+x /www cd /www mkdir one two cd one echo "this is a web for virtual host www.one.com">>index.html cd two echo "this is a web for virtual host www.two.com">>index.html #子任务2——配置虚拟主机的文件 cd /etc/httpd/conf.d vim one.conf -> <Directory /www/one> Require all granted </Directory> <VirtualHost 192.168.100.10> ServerName www.one.com DocumentRoot /www/one/ </VirtualHost> vim two.conf <Directory /www/two> Require all granted </Directory> <VirtualHost 192.168.100.11> ServerName www.two.com DocumentRoot /www/two/ </VirtualHost> #子任务3——做域名解析文件 server/client -> vim /etc/hosts -> 192.168.100.10 www.one.com 192.168.100.11 www.two.com #子任务4——重启服务 systemctl restart httpd #子任务5——使用浏览器访问 http://www.one.com http://www.two.com # 请思考:为什么会出现访问错误的页面?尝试排错方法如下: #子任务6——修改虚拟主机网页文件的selinux上下文类型: semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?' restorecon -RFv /www
九、任务五:配置基于端口访问的虚拟主机
#搭建的虚拟主机域名和端口如下: www.z.com:8088 www.z.com:8089 #子任务1——新建虚拟主机的网页文件 mkdir /www/8088 echo "this is port 8088 for website www.z.com">>index.html mkdir /www/8089 echo "this is port 8089 for website www.z.com">>index.html #子任务2——配置虚拟主机的文件 cd /etc/httpd/conf.d vim 8088.conf -> <Directory /www/8088/> Require all granted </Directory> <virtualHost 192.168.100.10:8088> DocumentRoot /www/8088/ </virtualHost> vim 8089.conf <Directory /www/8089/> Require all granted </Directory> <virtualHost 192.168.100.10:8089> DocumentRoot /www/8089/ </virtualHost> cd /etc/httpd/conf/ vim httpd.conf -> 在Listen 80后添加以下两行: Listen 8088 Listen 8089 #子任务3——重启服务 systemctl restart httpd #子任务4——使用浏览器访问 http://192.168.100.10:8088 http://192.168.100.10:8089 # 请思考: 1)为什么会出现访问错误的页面?是因为selinux设置的问题吗?尝试排错方法如下: #子任务5——将8088和8089加入httpd服务端口类型 semanage port -a 8088 -t http_port_t -p tcp semanage port -a 8089 -t http_port_t -p tcp semanage port -l | grep http 进入客户端浏览器测试 2)为什么还是会出现访问错误的页面?是因为防火墙设置的问题吗?尝试排错方法如下: #子任务6——将8088和8089加入firewalld端口放行列表中 firewall-cmd --permanent --add-port=8088 firewall-cmd --permanent --add-port=8089 firewall-cmd --reload firewall-cmd --list-all 进入客户端浏览器测试
十、任务五:配置基于TLS加密的虚拟主机(443/TCP)
#子任务1——安装TLS加密软件,网站内容不用明文传输 yum -y install mod_ssl #子任务2——生成密钥 openssl genrsa >tlsweb.key #子任务3——生成证书请求文件 openssl req -new -key tlsweb.key > tlsweb.csr #子任务4——生成证书文件 openssl req -x509 -days 365 -key tlsweb.key -in tlsweb.csr >tlsweb.crt #子任务5——修改ssl.conf配置文件 vim /etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/pki/tls/certs/tlsweb.crt SSLCertificateKeyFile /etc/pki/tls/private/tlsweb.key #子任务6——把证书文件拷贝到ssl.conf配置文件里的对应路径下面 cp tlsweb.crt /etc/pki/tls/certs/ #子任务7——把秘钥文件拷贝到ssl.conf配置文件里的对应路径下面 cp tlsweb.key /etc/pki/tls/private/ #子任务8——重启服务 systemctl restart httpd #子任务9——使用浏览器访问 https://192.168.100.10
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)