概述:
今天说的这个服务可以说是重中之重,他是互联网时代使用最多的一个服务,就是为人们提供网页的服务http。http服务器有很多比如apache,nginx,tomcat等。今天的主角是apache,也是使用最多的一个http服务器,也是著名的lamp中的一环。
1.http配置的帮助文件
我们可以下载httpd-manual来查看,也可以登陆apache的官网查看httpd的配置文件的配置方法。或者百度搜索apache帮助文档,会有中文的哦。
2.apache主配置文件
/etc/httpd/conf/httpd.conf
42 Listen 80
修改这里后可以修改监听的端口号
http://172.25.254.103:8080/
在浏览器输入上面的信息就可以访问我们开启的http服务了。
但是一般情况别人访问我们的http服务时都是默认端口号为80,如果修改成了别的,很多人就无法访问了,我们还是改过来比较好。
102 <Directory />
103 AllowOverride none
104 Require all denied
105 </Directory>
这是对http服务根目录的规定,这里表示/目录无论如何都不会成为http的/目录
119 DocumentRoot "/var/www/html"
124 <Directory "/var/www">
125 AllowOverride None
126 # Allow open access:
127 Require all granted
128 </Directory>
这里规定了谁是我们http的根目录,接下来我们对这个目录的权限进行一些设定
DocumentRoot "/var/www/html"
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
Order Allow,Deny
Allow from ALL
Deny from 172.25.254.4
</Directory>
AllowOverride None #是否读取.htaccess文件
Require all granted#允许所有请求访问资源
Order Allow,Deny #读取下面Allow和Deny的顺序
Allow from ALL #允许所有人登陆
Deny from 172.25.254.4 #拒绝172.25.254.4访问
登陆服务需要密码的设置
首先我们修改一下根目录,改为/www,所以要在/下创建www目录
现在需要在httpd.conf最后添加如下代码
DocumentRoot "/www"
<Directory "/www">
AllowOverride All
Authuserfile /etc/httpd/htpasswdfile
Authname "Please input username and password"
Authtype basic
Require valid-user
</Directory>
Authuserfile
#账户密码对应关系数据库目录
可以使用如下命令生成htpasswdfile,其中admin是登陆用户名
[root@mail conf]# htpasswd -cm htpasswdfile admin
Authname
#登陆时的提示信息
Authtype #验证的类型,这里我们选择基本
Require #表示验证的用户如果是user $username形式表示验证某个用户,如果是valid-user表示文件里面的所有用户
现在重新在浏览器输入刚才的ip
会提示你输入账号密码才能访问
最后提醒一点配置文件中一定要去掉require all granted,因为这是无论像谁都授权的意思,添加了你的密码验证就无效了。
2.http的虚拟用户
根据我们刚才所了解的http服务,我们想象一个场景,我们如果自己想建两个网站,但是只有一台电脑,是不是就没办法了呢?因为输入一个ip后进入的http服务根目录只有一个呀。我们的虚拟用户就是解决这个问题的,这次所讲的虚拟用户是根据域名的虚拟用户,也就是说输入的域名不同进入的主机的目录就不同。
既然需要域名,我们就要使用dns服务了,但是为了突出重点我们只对host文件进行编辑
172.25.254.103 www.momo.com
172.25.254.103 music.momo.com
刚才讲解http的主配置文件时,不知道大家有没有观察到下面这一行
IncludeOptional conf.d/*.conf
这行表示在conf.d下的所有以.conf结尾的文件都被包含进了配置文件中。
所以我们对虚拟用户的配置在单独的文件中进行。
分别是music.conf和www.conf
music.conf配置如下:
<Virtualhost *:80>
Servername music.momo.com
Documentroot /www/virtual/music
Customlog "logs/music.log" combined
</Virtualhost>
<Directory "/www/virtual/music">
Require all granted
</Directory>
www.conf配置如下
<Virtualhost *:80>
Servername www.momo.com
Documentroot /var/www/html
Customlog "logs/www.log" combined
</Virtualhost>
<Directory "/var/www/html">
Require all granted
</Directory>
这样根据域名的不同就可以访问不同的目录了。
3.由http升级为https
https是对http协议的加强版,具有更高的安全性,两个协议的端口号并不一样,一个是80端口,一个是443端口,想让apache支持https,首先要下载一个插件,插件的名字是mod_ssl,apache支持后,需要有一个生成密钥的软件,叫做crypto-utils,我们使用它来生成密钥,密钥生成过程如下:
选择生成密钥的位数
生成随机数过程记住要随机的敲击键盘或者移动鼠标,可以加快随机数的生成
你是否要把密钥给真正的CA呢,当然不要
你要给你的密钥加密码吗?
添加你的一些信息
密钥生成后我们要对apache的配置文件修改,使其可以启用ssl。
修改的配置文件是/etc/httpd/conf.d/ssl.conf,修改的行如下
100 SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
106 SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
保存后重启http服务即可生效
在浏览器输入https开头的url即可访问你的http服务器了,当然由于是自己制作的证书,浏览器是一定会提醒你有危险的。
4.http虚拟主机加ssl
这里就是让你服务器上的多个虚拟主机都具备https,而不是只有www.momo.com是安全加密的。和2中的一样,首先配置出两个虚拟主机,域名分别是www.momo.com music.momo.com。
我们首先给这两个站点都加上https的访问方式,这种配置方式的结果是同一个页面的http和https方式共存。
配置文件如下:
/etc/httpd/conf.d/default.conf
<Virtualhost _default_:80>
ServerName www.momo.com
Documentroot /www/virtual/www
Customlog logs/default.log combined
</Virtualhost>
<Directory "/www/virtual/www">
require all granted
</Directory>
<Virtualhost _default_:443>
ServerName www.momo.com
Documentroot /www/virtual/www
Customlog logs/default-443.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
</Virtualhost>
/etc/httpd/conf.d/music.conf
<Virtualhost *_:80>
ServerName music.momo.com
Documentroot /www/virtual/music
Customlog logs/music.log combined
</Virtualhost>
<Directory "/www/virtual/music">
require all granted
</Directory>
<Virtualhost *:443>
ServerName music.momo.com
Documentroot /www/virtual/music
Customlog logs/music-443.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
</Virtualhost>
浏览器访问结果
现在大家考虑一个问题,我们日常生活中访问的有些主页是不是会将你http的访问方式自动转换为https的安全访问,例子如下:
这是我在浏览器地址栏的输入
这是访问成功后地址栏的显示,自动将http转换为了https
这一共能我们通过apache也可以实现,就是网页重写。修改的配置文件仍然是上一步的那两个。
配置文件如下:
/etc/httpd/conf.d/default.conf
<Virtualhost _default_:80>
ServerName www.momo.com
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</Virtualhost>
<Directory "/www/virtual/www">
require all granted
</Directory>
<Virtualhost _default_:443>
ServerName www.momo.com
Documentroot /www/virtual/www
Customlog logs/default-443.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
</Virtualhost>
/etc/httpd/conf.d/music.conf
<Virtualhost *_:80>
ServerName music.momo.com
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</Virtualhost>
<Directory "/www/virtual/music">
require all granted
</Directory>
<Virtualhost *:443>
ServerName music.momo.com
Documentroot /www/virtual/music
Customlog logs/music-443.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
</Virtualhost>
当配置文件做如上修改后,即可将http请求自动变为https请求了。
5.apache上运行动态页面
大家一定听说过lamp,也就是linux+apache+mysql+php,可以说有了这四个部件我们就可以搭建自己的动态网站了,但是所讲的apache应用中,apache上面搭载的网页都是静态网页,也就是一两条简单的html语句,想让网页成为动态的,还需要有其他语言的支持,当然apache也要进行一定的扩展。
5.1apache+php
既然想让apache运行php,首先当然要有php的环境,我们选择从yum直接下载,之后将php页面放入规定的网页目录下即可访问。
<?php
phpinfo();
?>
index.php中简易的php语句
5.2apache的cgi
这里我们先下载一个apache的指导手册,来帮助我们找到如何运行cgi。
通过手册我们找到如何让我们的apache运行cgi
perl脚本
#!/usr/bin/perl
print "hello world";
<Virtualhost *:80>
Documentroot /var/www/cgi-bin
Customlog logs/cgi.log combined
</Virtualhost>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
在conf.d下创建一个cgi.conf配置文件,填写如上信息。
一切好像都没问题,但是当我运行的时候,却发现无论怎样都会出现500的错误,截图如下。
在后台查看http服务的错误日志发现
[Mon Dec 12 04:45:26.727583 2016] [cgi:error] [pid 7111] [client 172.25.254.3:45896] malformed header from script 'index.cgi': Bad header: hello world
看到这个后我才恍然大悟,原来perl脚本作为cgi的时候,脚本文件第一句一定要先定义类型,然后跟着是一个新空行,在下来就是主程序了,由于我在定义内型后没有输出文件头及换行,直接就是主程序,所以一才导致上面出现的错误。
将脚本修改为:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "hello world";
print `date`;
代码修改成上面后,就可以看到动态网页了!好激动
上面的代码使用perl写的,但是我们对perl不是很熟悉,我们看看可不可以用shell或者python写一个cgi动态页面呢?
下面就是一个用shell写的cgi
#!/bin/bash
#index.cgi
echo "Content-Type:text/html"
echo ""
echo ""
echo "hello world"
echo "<br>"
echo "<br>"
while : ;do
date
sleep 1
done
可以一直输出时间。切记,开头一定要定义格式!
6.搭建自己的论坛
如果理解上面的动态页面与静态页面的使用,我们可以来点激动人心的实验了,做一个自己的论坛,其实并不是很难,因为论坛的前端后台基本都写好了,我们只要配置就好啦,我们使用的模板就是Discuz论坛模板。
首先下载好Discuz的压缩包,然后解压
[root@mail mnt]# ls
config_virtual.sh default.conf Discuz_X3.2_SC_UTF8.zip readme upload utility
接下来将解压后的文件复制到你的apache根目录(因为咱们前面修改后,可能不是/var/www/html)
这时我们可以看下他的readme
1. 上传 upload 目录中的文件到服务器
2. 设置目录属性(windows 服务器可忽略这一步)
以下这些目录需要可读写权限
./config
./data 含子目录
3. 执行安装脚本 /install/
请在浏览器中运行 install 程序,即访问 http://您的域名/论坛目录/install/
4. 参照页面提示,进行安装,直至安装完毕
根据安装的步骤我们去做就可以啦!
上面的修改完成后,在网页上输入upload的路径即可进入安装向导
但是发现还有问题没有解决,uc_server目录需要加上可写权限,而且mysql也还没下载,但是uc_server权限加好后,mariadb下载好后,却发现mysqli_connect()的问题还没有解决,仔细想想才明白,这个论坛是php写的,需要mysql对php的支持才可以运行
[root@mail upload]# yum install php-mysql -y
重启服务器,因为服务器要重读与php,mysql连接的一些配置
再输入刚才的网址。
错误已经全部解决。直接下一步,填写一些管理员的信息,数据库的密码
安装成功后我们的论坛就搭建好了。
7.squid的应用
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。联想一下,比如我们的电脑A不能上网,但是另一台主机B可以上网,我们是不是可以将B作为我们的代理服务器,让B将访问的页面缓存下来,这样我们去访问B的缓存,是不是我们也可以上网了,换个思路,是不是也可以翻~呢,哈哈。
7.1http正向代理
也就是我们刚上来讲的,将页面缓存下来,作为其他不能上网的主机的代理服务器。因为这也是squid的主要功能,所以配置起来十分简单。
squid的配置文件为
/etc/squid/squid.conf
56 http_access allow all
62 cache_dir ufs /var/spool/squid 100 16 256
第一个选项是允许别人可以访问squid服务,原本是"http_access deny all"
第二个选项是缓存的目录,以前是注释掉的
这样就配置好一个缓存服务器
测试的方法是,一台真机开两台虚拟机,真机上搭建http服务且网段为172.25.254.0,虚拟机A配置双网卡网段分别为172.25.254.0 172.25.3.0,且配置squid缓存服务,虚拟机B网段在172.25.3.0。
现在虚拟机A可以访问真机的网页,但是B不可以,所以让B以A为http代理即可访问主机的网页。
现在在虚拟B的浏览器设置如下
原本无法访问172.25.254.0网段的虚拟机B可以访问172.25.254.3上的网页了。
7.2反向代理
正向代理是我们主动设置代理服务器,由代理服务器去请求客户需要的资源,这个过程需要我们手动设置。
反向代理是我们没有设置这个代理服务器,而是它自动让我们访问他,从而达到加速的目的,比如我们每次访问腾讯官网,不可能直接就到总服务器,而是每个省份都有一个空壳服务器,来帮我们缓存网页,这样不但加快了访问速度,还保护了主服务器。
试想一下刚才squid的端口号可是3128,而http是80,那客户到时候访问的时候难道还要修改端口号,才不要,多麻烦啊,所以我们需要在服务端设置好,让squid的端口号为80,所以,这台服务器上不能有http服务,要不就冲突了。
首先将http服务卸载干净,接下来对squid.conf做如下修改
59 http_port 80 vhost vport
60 cache_peer 172.25.254.3 parent 80 0 no-query
首先要虚拟端口,然后配置它向谁缓存网页即可,这些配置信息其实都可以在下面的文件找到
/usr/share/doc/squid-3.3.8/squid.conf.documented
重启服务器
现在只要我们输入虚拟机A的ip就可以访问主机172.25.254.3上的网页了。
最后简要介绍一下多台服务器切轮询访问,配置文件要如何写:
60 cache_peer 172.25.254.3 parent 80 0 no-query originserver round-robin name=web1
61 cache_peer 172.25.254.4 parent 80 0 no-query originserver round-robin name=web2
62 cache_peer_domain web1 web2 www.momo.com
这样就可以轮询访问了,就是第一次访问3网段第二次访问4网段。