1.环境部署
服务端:软件包httpd 服务名:httpd 默认端口:80
已安装:
httpd.x86_64 0:2.4.6-17.el7
作为依赖被安装:
apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7
httpd-tools.x86_64 0:2.4.6-17.el7 mailcap.noarch 0:2.1.41-2.el7
安装好服务软件后,检查默认根目录 /var/www/html/ 查看配置文件 /etc/http/conf/httpd.conf
# ls /var/www/
cgi-bin html
vim /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80 ###修改域名
DocumentRoot "/var/www/html" ###修改根目录
2.默认配置下访问
[root@server0 ~]# touch /var/www/html/index.html ##创建默认访问页面
# echo '<h1>test' > /var/www/html/index.html ##给页面添加内容
vim /etc/http/conf/httpd.conf
ServerName www.example.com:80 ##去掉注释,启用域名
# systemctl restart httpd ##修改配置后需要重起服务
#firefox 127.0.0.1 ####在浏览器中验证
#firefox www.example.com ####在浏览器中验证
注: 网络路径与服务器实际路径
网络路径:在浏览器输入的路径
firefox server0.example.com---》DNS
firefox 172.25.0.11---->服务端 80---->httpd
-->主配置文件----->DocumentRoot /var/www/myweb
ex:
浏览器: server0.example.com
服务端:/var/www/myweb
浏览器: server0.example.com/abc
服务端:/var/www/myweb/abc
3.配置虚拟web主机 (作用:一台服务器,提供多个不同的Web页面)
• 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于IP地址的虚拟主机
a.创建要访问的文件
# mkdir /var/www/nsd01 /var/www/nsd02 /var/www/nsd03
# touch /var/www/nsd02/index.html /var/www/nsd01/index.html /var/www/nsd03/index.html
# echo '<h1>test01' > /var/www/nsd01/index.html
# echo '<h1>test02' > /var/www/nsd02/index.html
# echo '<h1>test03' > /var/www/nsd03/index.html
b. 配置文件路径
– /etc/httpd/conf/httpd.conf (主配置文件) – /etc/httpd/conf.d/*.conf(调用配置文件)
注意配置文件中不能多写符号和少符号以及空格,多或少都会引起服务重起报错,可使用报错提示中的命令排错
# systemctl restart httpd
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
# journalctl -xn #使用报错提示中的命令排错
以下构建基于域名的虚拟主机
# vim /etc/httpd/conf.d/nsd.conf #####创建副配置文件
<VirtualHost *:80> ### *代表任意ip地址
ServerName server0.example.com ### 域名
DocumentRoot /var/www/nsd01 #### 根目录
</VirtualHost>
<VirtualHost *:80>
ServerName www0.example.com
DocumentRoot /var/www/nsd02
</VirtualHost>
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/nsd03
</VirtualHost>
# systemctl restart httpd
c.打开浏览器验证访问
注: 一旦使用虚拟Web主机功能,所有网站都必须用虚拟Web主机完成
4.Web访问控制(DocumentRoot)
针对 DocumentRoot 网页目录的权限控制 – httpd 运行身份(用户/组):apache
服务配置
• 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的访问权限
– 除非针对子目录有明确设置
格式:<Directory 目录的绝对路径>
.. ..
Require all denied|granted
Require ip IP或网段地址 .. ..
</Directory>
# mkdir /var/www/web
# echo 'this is web' > /var/www/web/index.html
# vim /etc/httpd/conf.d/nsd.conf
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /var/www/nsd02
</VirtualHost>
# systemctl restart httpd ###重起服务
####测试访问--正常
#vim /etc/httpd/conf.d/nsd.conf ###更改webapp0.example.com的根目录
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /webroot
</VirtualHost>
# systemctl restart httpd ###重起服务
####测试访问--服务正常,但三首页面不能访问
创建权限控制子配置文件
#vim /etc/httpd/conf.d/web.conf
<Directory /webroot>
Require all granted ####允许所有访问
</Directory>
# systemctl restart httpd ###重起服务
####测试访问- -页面不能访问
5.SELinux的安全上下文(标签起到标识作用)
格式: – chcon [-R] --reference=模板目录 新目录 参照标准目录,重设新目录的属性
# ls -Zd /webroot ###查看webroot目录的默认上下文权限
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /webroot/
# ls -Zd /var/www ###查看默认根目录的上下文权限
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www
# chcon -R --reference=/var/www /webroot ###修改webroot的上下文权限和默认根目录一样
# ls -Zd /webroot
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /webroot/
##########测试访问成功
6.部署动态网站
动态网站的运行
• 服务端的原始网页 ≠ 浏览器访问到的网页
– 由Web服务软件接受请求,动态程序转后端模块处理
– PHP网页、Python网页、JSP网页 等
#####安装好相关的动态语言翻译软件mod_wsgi
方便用户的访问,网页跳转
配置字段格式: Alias 网络路径 实际本地路径
[root@server0 ~]# ls /webroot/
index.html webinfo.wsgi
# vim /etc/httpd/conf.d/nsd.conf
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /webroot
Alias / /webroot/webinfo.wsgi ###添加别名访问,第一个‘/’代表网络路径 后面的路径为根目录
</VirtualHost>
# systemctl restart httpd
######测试访问,可以访问,但是网站读出来的为代码,并没有翻译出来应该显示的
# vim /etc/httpd/conf.d/nsd.conf
<VirtualHost *:80>
ServerName webapp0.example.com
DocumentRoot /webroot
WsgiScriptAlias / /webroot/webinfo.wsgi ###启用翻译
</VirtualHost>
# systemctl restart httpd
######测试访问正常
7 .虚拟主机侦听端口
虚拟Web主机匹配优先级:由上到下,匹配及停止 端口的优先级大于域名
vim /etc/httpd/conf.d/nsd.conf
Listen 8909 ####监听端口
<VirtualHost *:8909>
ServerName webapp0.example.com
DocumentRoot /webroot
WsgiScriptAlias / /webroot/webinfo.wsgi
</VirtualHost>
# systemctl restart httpd
#########重起服务后发现报错,根据报错命令排错
If you want to allow /usr/sbin/httpd to bind to network port 8909
Then you need to modify the port type.
Do
# semanage port -a -t PORT_TYPE -p tcp 8909
SELinux非默认端口的开放
格式: semanage port -a -t http_port_t -p tcp 8909 (-a:添加 -t:类型 -p:协议)
# semanage port -l | grep http ####查看SElinux默认对于HTTP开放的端口
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
# semanage port -a -t http_port_t -p tcp 8909 ###SElinux放行8909端口,另此命令执行后需要等一段时间才能生效,设备内存小的话有可能会引起死机
#systemctl restart httpd
########测试访问成功
8.Web安全
• Public Key Infrastructure,公钥基础设施
– 公钥:主要用来加密数据
– 私钥:主要用来解密数据(与相应的公钥匹配)
– 数字证书:证明拥有者的合法性/权威性(单位名称、
有效期、公钥、颁发机构及签名、......)
– Certificate Authority,数字证书授权中心:负责证书
的申请/审核/颁发/鉴定/撤销等管理工作
a.部署网站证书(营业执照)
# cd /etc/pki/tls/certs
# wget http://classroom.example.com/pub/tls/certs/server0.crt
# ls
b.部署根证书(公安局信息)
# cd /etc/pki/tls/certs
# wget http://classroom.example.com/pub/example-ca.crt
# ls
c.部署私钥(用于解密)
# cd /etc/pki/tls/private/
# wget http://classroom.example.com/pub/tls/private/server0.key
d.安装支持安全https的软件
# yum -y install mod_ssl
e.修改配置文件
# vim /etc/httpd/conf.d/ssl.conf
vim /etc/httpd/conf.d/ssl.conf
59 DocumentRoot "/var/www/html"
60 ServerName www0.example.com:443
#指定网站证书
100 SSLCertificateFile /etc/pki/tls/certs/server0.crt
#指定解密的密钥
107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key
#指定根证书
122 SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt
#systemctl restart httpd
######测试访问