web服务器的构建
1.apache服务的安装与启用
apache:企业中常用的web服务,用来提供http://(超文本传输协议)
apache的安装部署:
yum install httpd.x86_64 -y
systemctl start httpd ##开启apache服务
systemctl enable httpd ##设定apache服务开机启动
firewall-cmd --permanent --add-service=http ##火墙永久允许http
firewall-cmd --reload ##火墙重新加载策略
vim /var/www/html/index.html ##编辑apache默认发布文件
在文件中写入测试页hello westos
测试:
搜索对应的ip,就可以看到写的测试页内容 hello westos
2.apache的基本配置信息及部署优化方案
- 基本配置信息:
主配置目录: /etc/httpd/conf
主配置文件: /etc/httpd/conf/httpd.conf
子配置目录: /etc/httpd/conf.d
子配置文件: /etc/httpd/conf.d/.conf
默认发布目录: /var/www/html
默认发布文件: index.html
默认端口 : 80
默认安全上下文: httpd_sys_content_t
程序看其默认用户: apache
apache日志: /etc/httpd/logs/ - 修改默认端口:
修改配置文件- - ->>>重启- - ->>>修改火墙中端口- - ->>>在安全上下文中添加端口
vim /etc/httpd/conf/httpd.conf ##在其中修改下面的内容
43 Listen 8080 ##修改默认端口为8080
systemctl restart httpd ##重启apache
firewall-cmd --permanent --add-port=8080/tcp ##设置火墙中的端口
firewall-cmd --reload ##火墙重新加载策略
测试:
在修改端口之前,apache默认端口为80,搜索ip就可以看到hello westos测试页
修改端口后,直接搜索ip会显示无法连接,连接时需要加上对应端口搜索ip:8080
如果要修该端口为6666
在主配置文件中:
43 Listen 6666 ##修改默认端口为6666
systemctl restart httpd
firewall-cmd --permanent --add-port=6666/tcp ##设置火墙中的端口
firewall-cmd --reload
测试时搜索ip:6666,发现无法连接,是因为安全上下文中不包含6666端口
semanage port -a -t http_port_t -p tcp 6666 ##在安全上下文中添加6666端口
semanage port -l | grep http ##安全上下文查看http端口
systemctl restart httpd
再次测试就可以看到hello westos
- 修改默认发布目录:
创建目录- - ->>>修改配置文件- - ->>>修改安全上下文(授权)
创建目录:
mkdir -p /westos/html
touch index.html
vim index.html ##在其中写入测试页(我写的内容是hi westos!!)
修改配置文件中的内容如下:(前面的数字为行号)
vim /etc/httpd/conf/httpd.conf ##编辑配置文件
systemctl restart httpd ##重启apache
120 DocumentRoot “/westos/html”
121
122 <Directory “/westos”>
123 Require all granted
124 </Directory
修改安全上下文:
semanage fcontext -a -t httpd_sys_content_t 'westos(/.*)?' ##修改安全上下文
restorecon -RvvF /westos ##刷新
**测试:**搜索ip看到的不是默认发布目录中写的hello westos测试页,而是hi westos!!
- 修改默认发布文件:
默认发布文件就是访问apache时没有指定文件名称时访问的文件
这个文件可以指定多个,有访问顺序
新建发布文件:
cd /westos/html
vim westos.html ##写入测试页hey westos~~
修改主配置文件:
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
168 DirectoryIndex westos.html index.html ##当westos不存在时访问index
测试:搜索ip查看到的是文件westos.html的内容hey westos~~,而不是该目录中的默认发布文件index.html中的内容
3.apache的虚拟主机
在之前的操作中,我们访问apache服务器时只有一个主页,如果需要多个不同的主页,就可以设定apache的虚拟主机,它可以让我们的一台apache服务器在被访问不同域名的时候显示不同的主页
写配置文件,添加具体信息- - ->>>创建目录 添加文件内容- - ->>>添加解析
配置:
cd /etc/httpd/conf.d
vim vhost.conf
systemctl restart httpd
建立测试页:
mkdir -p /var/www/virtual/westos.org/{music,news}
touch /var/www/virtual/westos.org/{music,news}/index.html
vim music/index.html #写入music's page
vim news/index.html ##写入news's page
注意:把虚拟主机文件放在/var/www下是因为这个目录已经被授权过了
用哪台主机访问就在哪台主机中添加解析:
vim /etc/hosts
测试:
搜索www.westos.org看到hello westos ,news.westos.org 看到news’s page(搜索对应的内容就看到对应测试页)
4.apache基于ip的安全优化控制
针对主机ip设定访问的黑白名单
cd /etc/httpd/conf.d
vim vhost.conf
systemctl restart httpd
在其中写入:
- 白名单: 只允许250主机访问,其他ip都不允许访问
<Directory “/var/www/html”>
19 Order deny,allow
20 Allow from 172.25.70.250
21 Deny from all
22 </Directory
- 黑名单: 不允许250主机访问,其他ip都可以访问
18 <Directory “/var/www/html”>
19 Order allow,deny
20 Allow from all
21 Deny from 172.25.70.250
22 </Directory
order的意义:如果是设置白名单,应该先读取deny,再读取allow,如果先读取allow再读取deny,deny里面的all会把allow里面设定的主机覆盖
5.apache基于认证的访问控制
设定登陆用户,并且给用户授权。只有经过授权的用户输入正确的密码才可以访问apache主页,增加了安全性
cd /etc/httpd/
htpasswd -cm .htpassfile admin ##建立admin用户并给admin用户添加密码
htpasswd -m .htpassfile admin1 ##建立admin1用户并给admin1用户添加密码
cd /etc/httpd/conf.d
vim vhost.conf ##编辑配置文件
systemctl restart httpd ##重启apache
在其中写入:
18 <Directory “/var/www/html”>
22 AuthUserFile /etc/httpd/.htpassfile ##用户认证文件
23 Authtype basic ##认证类型
24 AuthName “Please input username and password” ##用户认证提示信息
25 Require user admin ##只允许认证文件中admin用户访问
26 Require valid-user ##认证用户,认证文件中所有用户都可以通过
27 </Directory
注意:25 26行不能同时存在,根据需要选择一行写入
测试:
- 当只允许admin用户通过时
- 当认证用户,认证文件中所有用户都可以通过时
6.apache的语言支持- - -php&per&python
在apache的主页中,一般我们默认看到的语言是html(超文本标记语言),而apache其实支持一些其他的语言,需要我们经过设定才能生效
-php
cd /var/www/html
vim index.php
在其中写入:
yum install php -y
systemctl restart httpd
测试:ip/index.php 看到测试页
-(per)cgi
cd /var/www/html
mkdir cgi
semanage fcontext -a -t httpd_sys_script_exec_t "/var/www/html/cgi(/.*)?" ##设定安全上下文
restorecon -RvvF /var/www/html/cgi ##刷新
ls -Zd /var/www/html/cgi
touch index.cgi
vim index.cgi
chmod +x index.cgi ##修改权限
在其中写入:
修改配置文件:
cd /etc/httpd/conf.d
vim vhost.conf ##编辑配置文件
在其中写入:
systemctl restart httpd
./index.cgi
测试:ip/cgi/index.cgi 可以看到date信息
-python
yum search wsgi
yum install mod_wsgi.x86_64 -y
cd /var/www/html ##要将script.wsgi下载到此目录中
chmod +x script.wsgi ##设定权限
修改配置文件:
cd /etc/httpd/conf.d
vim vhost.conf ##编辑配置文件
在其中写入:
systemctl restart httpd
测试:ip/WSGI 可以看到UNIX EPOCH time is now: 1573888673.95
7.https的证书设定
如何设定https证书:
yum install mod_ssl -y
netstat -antlupe | grep httpd ##查看http端口
firewall-cmd --permanent --add-port=443/tcp ##添加443端口
firewall-cmd --reload ##重新加载
systemctl restart httpd ##重启服务后搜索https://172.25.70.50发现时无法访问的,需要手动添加证书
yum install crypto-utils -y
genkey www.westos.org ##添加加密认证key
vim /etc/httpd/conf.d/ssl.conf ##在其中添加证书和密钥信息
101 SSLCertificateFile /etc/pki/tls/certs/www.westos.org.crt ##证书
109 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.org.key ##密钥
systemctl restart httpd
测试:
搜索htttps://172.25.70.50,无法访问,需要手动添加证书
获取完成后就可访问了
8.利用网页重写规则优化https的访问
vim /etc/httpd/conf.d/vhost.conf ##在其中写入:
30 <VirtualHost *:443>
31 ServerName login.westos.org
32 DocumentRoot /var/www/virtual/westos.org/login
33 CustomLog logs/login.log combined
34 SSLEngine on
35 SSLCertificateFile /etc/pki/tls/certs/www.westos.org.crt
36 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.org.key
37 </VirtualHost>
cd /var/www/virtual/
mkdir login
vim index.html ##在测试页中写login's page
vim /etc/httpd/conf.d/vhost.conf ##在其中写入:
24 <VirtualHost *:80>
25 ServerName login.westos.org
26 RewriteEngine on
27 RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1
28 </VirtualHost>
systemctl restart httpd ##重启apache
测试:
在客户主机中添加解析
vim /etc/hosts
172.25.70.50 login.westos.com
访问http://login.westos.com 会自动跳转到https://login.westos.com实现网页数据加密传输