运维笔记22 (apache的基本配置,静态网页,动态cgi,论坛搭建,squid实现正向,反向代理,简易cdn加速)

概述:

今天说的这个服务可以说是重中之重,他是互联网时代使用最多的一个服务,就是为人们提供网页的服务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网段。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章