基于Linux下的apache(web服务器)

apache简介

         Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python解释器编译到服务器中。企业中常用的web服务,用来提供http://(超文本传输协议)。

Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache是自由软件,所以不断有人来为它开发新 的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美
  
Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,世界上很多著名的网站 都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、 Windows、Linux系统平台上)以及它的可移植性等方面。

Web服务器(Web Server)
Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求 (request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响 应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。

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/*

apache的安装部署

[root@shareserver ~]# yum install httpd -y                    ##安装apache软件

[root@shareserver ~]# yum install httpd-manual -y      ##安装apache手册

[root@shareserver ~]# systemctl start httpd                 ##开启服务

[root@shareserver ~]# systemctl enable httpd             ##设定服务开机自启

[root@shareserver ~]# firewall-cmd --list-all                 ##列出火墙信息,查看火墙允许的服务

[root@shareserver ~]# firewall-cmd --permanent --add-service=http  ##火墙永久允许http服务

[root@shareserver ~]# firewall-cmd --reload                    ##重新加载火墙服务

[root@shareserver ~]# netstat -antlupe | grep httpd         ##查看http的端口

添加防火墙永久允许的服务也可以通过在web界面可以对防火墙进行设置

[root@shareserver ~]# firewall-config     打开防火墙web管理工具

配置分为两种runtimepermanent
 runtime表示当前运行生效,当前设置的参数,当系统重启之后就会失效
 permanent表示永久生效,设置的参数永久生效,但是在完成设置之后,必须重新载入防火墙,

zone表示选择的区域
选择区域之后,选择这个区域的服务,可以添加协议和端口

选择完要添加的服务之后,点击页面左上角的Options-->Reload Firewalld设置就生效了。

编辑测试所用的默认发布文件:

[root@shareserver html]# vim /var/www/html/index.html

    <h1>hello westos</h1>

测试:

http://172.25.254.100                               ##访问apache发布文件

http://172.25.254.100/manual                 ##访问apache手册

修改apache的基础信息

(1)修改默认端口:

查看当前允许的httpd端口:

[root@shareserver ~]# semanage port -l | grep http

将apache默认端口改为当前允许的端口,如8080时,进行的配置如下:

[root@shareserver html]# vim /etc/httpd/conf/httpd.conf            ##编辑主配置文件

   42 Listen 8080                            ##将默认的80端口改为另一个允许的httpd端口8080

[root@shareserver html]# firewall-cmd --permanent --add-port=8080/tcp            ##防火墙永久开启该端口的服务

[root@shareserver html]# firewall-cmd --reload    

[root@shareserver html]# systemctl restart httpd                  ##重启apache服务

测试:

在浏览器中输入:http://172.25.254.100:8080         ###这里的端口已经不是默认的了,需要指定端口为8080

将apache默认端口改为非标准端口,需要进行如下配置:

[root@shareserver ~]# semanage port -a -t http_port_t -p tcp 6666    ##将非标准端口6666添加到当前允许的httpd端口中

[root@shareserver html]# vim /etc/httpd/conf/httpd.conf            ##编辑主配置文件

   42 Listen 6666                            ##将默认的80端口改为另一个允许的httpd端口6666

[root@shareserver ~]# firewall-cmd --permanent --add-port=6666/tcp           ##防火墙永久开启该端口的服务

[root@shareserver html]# firewall-cmd --reload    

[root@shareserver html]# systemctl restart httpd                  ##重启apache服务

测试:

在浏览器中输入:http://172.25.254.100:6666       ###指定端口为6666

实验完成后重新将默认端口改为80,以免影响之后的实验。

(2)修改默认发布文件:

默认发布文件就是访问apache时没有指定文件名称时默认访问的文件
这个文件可以指定多个,有访问顺序

root@shareserver html]# vim /var/www/html/westos.html        ##在默认发布目录下面重新建立一个发布文件westos.html

<h1>westos's page</h1>

[root@shareserver ~]# vim /etc/httpd/conf/httpd.conf                 ##修改主配置文件

163 <IfModule dir_module>
164     DirectoryIndex westos.html index.html         ##多个默认发布文件,有顺序之分,当westos.html不存在时,访问index.htmll

165 </IfModule>

 

测试:

在浏览器中输入:http://172.25.254.100,显示westos.html发布文件里面的内容

 

(3修改默认发布目录:

[root@shareserver /]# mkdir /myhtml/web/html -p            ##新建一个目录,修改此目录作为apache的默认发布目录

[root@shareserver /]# vim /myhtml/web/html/my.html      ##在此目录下面新建一个发布文件my.html 

<h1>myhtml's page</h1>                                      ##编辑发布文件的内容

[root@shareserver /]# semanage fcontext -a -t httpd_sys_content_t '/myhtml(/.*)?'       ##将该目录及其内容的安全上下文改为apache默认的安全上下文

[root@shareserver /]# restorecon -RvvF /myhtml/             ##刷新,使修改的默认上下文生效

[root@shareserver /]# vim /etc/httpd/conf/httpd.conf         ##修改主配置文件

119 #DocumentRoot "/var/www/html"                               ##注释原默认发布目录
120 DocumentRoot "/myhtml/web/html"                           ##指定新的默认发布目录
121 <Directory "/myhtml/web/html">                                 ##对该目录授权
122         Require all granted                                             ##任何人都可以访问该目录
123 </Directory>

167 <IfModule dir_module>
168     DirectoryIndex my.html westos.html index.html      ##将新建的发布文件my.html添加到默认发布文件里
169 </IfModule>

[root@shareserver /]# systemctl restart httpd            ##重启apache服务

测试:

在浏览器中输入:http://172.25.254.100,显示my.html发布文件里面的内容

apache的虚拟主机

从web概念上来讲,访问一个web服务,其实就是访问某个主机上的某个端口,这个端口默认是80,通常需要访问不同的端口,不同的域名,以便实现对不同网站的访问,这个时候就需要配置虚拟主机,也就是做到了一个服务器一个apache提供多个网站的服务。

在一个Apache服务器上可以配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。

实验环境:

清除前面对apache默认端口以及发布文件的所有实验设置:

如果不确定到底作了哪些改动或者不知道如何让恢复,可以进行以下操作还原:

[root@shareserver /]# rm -fr /etc/httpd/conf/httpd.conf                ##删除主配置文件

[root@shareserver /]# yum reinstall httpd -y                                 ##重装httpd服务

实验过程:

<1>为apache虚拟主机建立发布目录及发布文件

[root@shareserver /]# mkdir /var/www/westos.com/news/html -p         ##建立虚拟主机的发布目录

[root@shareserver /]# mkdir /var/www/westos.com/music/html -p     

[root@shareserver /]# vim /var/www/westos.com/news/html/index.html   ##编写虚拟主机的发布文件

<h1>虚拟主机news's page</h1>

[root@shareserver /]# vim /var/www/westos.com/music/html/index.html

<h1>虚拟主机music's page</h1>

<2>编写配置文件

[root@shareserver /]# cd /etc/httpd/conf.d/      ##切换到apache服务子配置目录下

[root@shareserver conf.d]# vim a_default.conf     ##该配置文件的作用是令非指定域名的访问默认跳转到/var/www/html发布目录下

<VirtualHost _default_:80>                   ##虚拟主机开启的端口
        DocumentRoot /var/www/html      ##虚拟主机默认发布目录
        CustomLog logs/default.log combined   ##虚拟主机日志,此处为相对路径,绝对路径为/etc/httpd/logs/default.log,combined表示日志的类型是4种混合类型日志
</VirtualHost>

[root@shareserver conf.d]# vim news.conf    ##指定域名news.westos.com的访问跳转到/var/www/westos.com/news/html发布目录下

<VirtualHost *:80>
        ServerName news.westos.com        ##指定站点名称
        DocumentRoot /var/www/westos.com/news/html    ##指定站点的默认发布目录
        CustomLog logs/news.log combined         ##站点日志
</VirtualHost>
<Directory "/var/www/westos.com/news/html">        ##对虚拟主机默认发布目录的授权
        Require all granted
</Directory>

[root@shareserver conf.d]# cp news.conf music.conf       ##将news.conf复制到music.conf中,节省对music.conf的修改

[root@shareserver conf.d]# vim music.conf                      ##编辑复制过来的文件,将其中的news全部换成music

[root@shareserver conf.d]# systemctl restart httpd               ##重启apache服务

<3>测试:

在测试主机中做好本地解析:

[root@foundation81 ~]# vim /etc/hosts

172.25.254.100  www.westos.com news.westos.com music.westos.com

浏览器中非指定域名的访问默认会跳转到apache的发布目录下:

指定域名会跳转到指定发布目录下,访问该目录下的默认发布文件

http://music.westos.com

http://news.westos.com

apache内部主机的访问控制

网站访问控制是可以基于客户端主机名IP地址客户端浏览器特征等信息元素进行的网页资源控制,通过Allow或Deny指令实现允许或禁止某个主机访问 服务器网站资源,其中Order指令用于定义Allow或Deny指令起作用的顺序,匹配原则是按顺序匹配规则并执行,若为匹配成功则执行后面的默 认指令,比如说Order Allow,Deny代表先将客户端与允许规则进行对比,若匹配成功则允许请求,反而则会直接拒绝访问请求。

为了更好地控制对网站资源的访问,可以为特定的网站目录添加访问授权。

以下实验针对默认发布目录/var/www/html进行访问控制。

1、针对主机的访问控制

通过配置项Order、Deny from 、Allow from,可以根据客户机的主机名或ip地址决定是否允许客户端访问。其中Order配置项用于设置限制顺序,Deny from和Allow from配置项用于设置具体限制内容。

[root@shareserver ~]# vim /etc/httpd/conf.d/a_default.conf                           

<Directory "/var/www/html">                   ##设置访问控制的目录
        Order Deny,Allow                            ##列表读取顺序,先读取Deny再读取Allow相当于限定部分主机可以访问该目录
        Allow from 172.25.254.81             ##允许ip为172.25.254.81的主机访问

        Deny from all                                   ##拒绝所有主机的访问
</Directory>

[root@shareserver ~]# systemctl restart httpd   ##重启服务

测试:

在172.25.254.81主机上的浏览器上输入http://172.25.254.100/index.html

在172.25.254.200主机上的浏览器上输入http://172.25.254.100/index.html(做好解析的情况下)

2、用户方式的访问控制

基于用户的访问控制包含认证和授权两个过程,认证是识别用户身份的过程,授权是允许特定用户访问特定目录区域的过程。下面以基本认证方式为例,添加用户授权限制。

(1)创建用户认证信息

使用专门的htpasswd工具创建授权用户数据文件,必须指定用户数据文件的位置。

htpasswd命令的参数:

-c:创建一个加密文件;
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
-m:默认采用MD5算法对密码进行加密;
-d:采用CRYPT算法对密码进行加密;
-p:不对密码进行进行加密,即明文密码;
-s:采用SHA算法对密码进行加密;
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
-D:删除指定的用户。

[root@shareserver conf.d]# htpasswd -cm /etc/httpd/conf.d/http_userlist admin     ##创建用户认证admin,首次创建用户,用参数c(create)创建加密文件,其文件的位置是/etc/httpd/conf.d/http_userlist

New password:                                     ##根据提示设定该用户认证的密码
Re-type new password:
Adding password for user admin

[root@shareserver conf.d]# htpasswd -m /etc/httpd/conf.d/http_userlist admin1   ##创建第二个用户admin1,该用户创建时不需要参数c,若加上参数c,则会覆盖掉之前的授权用户数据文件,只保留当前创建的 用户认证信息

New password:
Re-type new password:
Adding password for user admin1

(2)修改配置文件,使其能在特定的目录区域中添加授权配置,以启用基本认证等

[root@shareserver conf.d]# vim /etc/httpd/conf.d/a_default.conf    ##修改配置文件,注释掉前面基于ip的访问控制的配置

<Directory "/var/www/html">
        AuthUserFile /etc/httpd/conf.d/http_userlist                     ##用户认证文件的绝对路径
        AuthName  "Please input username and password!"    ##用户认证时网站的提示信息
        AuthType  basic                                                                  ##认证类型:基本类型
        #Require user admin                                                         ##只允许admin用户访问

        Require valid-user                                                              ##允许认证文件中的有效用户访问

</Directory>

[root@shareserver conf.d]# systemctl restart httpd

测试:

当输入了正常的用户认证信息及密码时便可正常访问。

当输入的用户名或密码有错时,系统将重复弹出此认证界面。

当点击界面上的cancel按钮时,将会显示401Unauthorized的页面,如下图所示:

apache支持的语言

apache支持html,php,cgi语言,不支持jsp,asp,如果要用需要翻译

1.默认支持html不需要更改设置

2.php

[root@shareserver conf.d]# yum install php -y

[root@shareserver conf.d]# vim /var/www/html/index.php

<?php
        phpinfo();
?>

[root@shareserver conf.d]# systemctl restart httpd

测试:

在客户端浏览器中输入http://172.25.254.100/index.php

3.cgi

通用网关接口Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。

CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据

设置支持cgi,访问cgi页面,一般用于用户注册

<1>创建cgi脚本(脚本:添加可执行权限)

[root@shareserver conf.d]# cd /var/www/html/

[root@shareserver html]# mkdir cgi

[root@shareserver html]# vim cgi/index.cgi

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print `date`;

[root@shareserver html]# chmod +x cgi/index.cgi              ##给脚本添加执行权限

 

[root@shareserver html]# ./cgi/index.cgi    ##执行脚本查看结果

([root@shareserver conf.d]# /var/www/html/cgi/index.cgi   ##该语句也可以实现执行的功能)

<2>转译文件

[root@shareserver html]# cd /etc/httpd/conf.d

[root@shareserver conf.d]# vim a_default.conf

<Directory "/var/www/html/cgi">       ##在配置文件中加入该语句段
        Options +ExecCGI
        AddHandler cgi-script .cgi
</Directory>

<3>更改安全上下文

[root@shareserver conf.d]# semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html/cgi(/.*)?'   ##更改安全上下文

[root@shareserver conf.d]# restorecon -RvvF /var/www/html/cgi/       ##刷新,使更改的安全上下文生效

<4>测试

在客户端浏览器中输入http://172.25.254.100/cgi/index.cgi

注:如果在/var/www/cgi-bin下直接创建一个.cgi文件,则不需要进行文件的转译,在浏览器上访问.cgi脚本就可以出现结果

测试:在客户端浏览器中输入http://172.25.254.100/cgi-bin/index.cgi

4.wsgi

WSGI是Python应用程序或框架和Web服务器之间的一种接口。WSGI是Web Server Gateway Interface的缩写。以层的角度来看,WSGI所在层的位置低于CGI。但与CGI不同的是WSGI具有很强的伸缩性且能运行于多线程或多进程的环境下,这是因为WSGI只是一份标准并没有定义如何去实现。

PythonWeb服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受, 它已基本达成它的可移植性方面的目标。

WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。

<1>创建wsgi脚本

[root@shareserver html]# cd /var/www/cgi-bin

[root@shareserver cgi-bin]# vim webapp.wsgi

#!/usr/bin/env python
import time

def application (environ,start_response):
        response_body = 'UNIX EPOCH time is now: %s\n' % time.time()
        status = '200 OK'
        response_headers = [('Content-Type', 'text/plain'),
                            ('Content-Length', '1'),
                            ('Content-Length', str(len(response_body)))]
        start_response(status, response_headers)
        return [response_body]

[root@shareserver cgi-bin]# chmod +x webapp.wsgi
[root@shareserver cgi-bin]# yum install mod_wsgi.x86_64 -y

<2>编写配置文件

[root@shareserver cgi-bin]# cd /etc/httpd/conf.d
[root@shareserver conf.d]# vim webapp.conf

<VirtualHost *:80>
        ServerName webapp.westos.com
        DocumentRoot /var/www/cgi-bin
        CustomLog  logs/webapp.log combined
        WSGIScriptAlias / /var/www/cgi-bin/webapp.wsgi
</VirtualHost>

[root@shareserver conf.d]# systemctl restart httpd

<3>测试

在客户端浏览器中输入http://webapp.westos.com

配置https证书验证

实验环境:

[root@shareserver ~]# firewall-cmd --permanent --add-service=https    ##火墙永久允许http服务

[root@shareserver ~]# firewall-cmd --reload                                            ##重新加载火墙服务

1.端口介绍:

http:80端口
https:443端口

2.HTTPS

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是 SSL,因此加密的详细内容就需要SSL。

http+ssl,在http应用层多了一层SSL,通俗的讲,就是客户端和服务端拥有一串没有第三者知道的密钥,通信时:用密钥解密得到的内容或者将内容加密发送给对方。

3.配置过程

<1>安装

[root@shareserver html]# yum install mod_ssl.x86_64 -y           ##安装mod_ssl 在目录/etc/httpd/conf.d下面生成ssl.conf文件

[root@shareserver html]# yum install crypto-utils-2.4.1-42.el7.x86_64   ##安装此软件,制作证书

<2>配置钥匙和证书 genkey 域名

[root@shareserver conf.d]# genkey www.westos.com

【1】选择next,进入下一步 

【2】选择1024那行,NEXT继续

【3】等待大约十秒

【4】接下来的这一进度条,需要配置证书本机的键盘随意输入完成

【5】假如暂时不想付费只是实验,选择NO

【6】选择Next

【7】下图填写的信息,在下载证书的时候均可以查到

【8】完成上述步骤后,如下显示包含两条重要信息

/etc/pki/tls/certs/www.westos.com.crt      ##生成的安全证书
/etc/pki/tls/private/www.westos.com.key    ##生成的钥匙

<3>配置文件

[root@shareserver conf.d]# cd /etc/httpd/conf.d

[root@shareserver conf.d]# vim ssl.conf

100 #SSLCertificateFile /etc/pki/tls/certs/localhost.crt               ##注释掉原来文件里的安全证书
101 SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt   ##写上生成的安全证书

108 #SSLCertificateKeyFile /etc/pki/tls/private/localhost.key               ##注释掉原来文件里的钥匙
109 SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key  ##写上生成的钥匙

[root@shareserver conf.d]# systemctl restart httpd

<4>查看安全证书

客户机浏览器访问:https://172.25.254.100/  或者   https://www.westos.com/

选择Add Exception…

验证:如果访问到刚写入的内容并且有加密协议(地址栏前面有个锁)说明配置生效

 查看证书的详细信息

网页重写

把所有 80 端口的请求全部重定向由 https 来处理。强制转换 http://———>https://

  • http默认端口80,https默认端口443
  • 301永久转换 302临时转换

页面永久性移走(301重定向)是一种非常重要的“自动转向”技术。网址重定向最为可行的一种办法。当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。

302重定向又称之为302代表暂时性转移(Temporarily Moved ),英文名称:302 redirect。 也被认为是暂时重定向(temporary redirect),一条对网站浏览器的指令来显示浏览器被要求显示的不同的URL,当一个网页经历过短期的URL的变化时使用。一个暂时重定向是一种服务器端的重定向,能够被搜索引擎蜘蛛正确地处理。


<1>新建apache虚拟主机

[root@shareserver conf.d]# mkdir /var/www/westos.com/login/html -p

[root@shareserver conf.d]# vim /var/www/westos.com/login/html/index.html

<h1>login's page</h1>

 <2>配置文件

[root@shareserver conf.d]# cd /etc/httpd/conf.d

[root@shareserver conf.d]# vim login.conf

<VirtualHost *:443>
        SSLEngine on
        ServerName login.westos.com
        DocumentRoot /var/www/westos.com/login/html
        CustomLog logs/login.log combined
        SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
        SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
</VirtualHost>
<Directory "/var/www/westos.com/login/html">
        Require all granted
</Directory>

<VirtualHost *:80>
        ServerName login.westos.com
        RewriteEngine on
        RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</VirtualHost>

 ^(/.*)$                          ##客户在浏览器地址栏中输入的所有字符

https://                          ##强制客户加密访问

%{HTTP_HOST}        ##客户请求主机

$1                                 ##“$1”表示^(/.*)$的值

[redirect=301]             ##永久转换 302临时转换

<3>测试

在做好地址解析的客户主机上访问 http://login.westos.com 或者 login.westos.com 自动跳转 https://login.westos.com

LAMP(Web应用软件组合)

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的免费和开源,这个组合开始流行(大多数Linux发行版本捆绑了这些软件)。当一起使用的时候,它们表现的像一个具有活力的解决方案包。

软件组件

Linux

Linux 是免费开源软件,这意味着源代码可用的操作系统。

Apache

Apache 是使用中最受欢迎的一个开放源码WEB服务器软件。

MySQL

MySQL 是多线程、多用户的SQL数据库管理系统

MySQL 已由Oracle公司自 2010 年 1 月 27 日通过SUN购买。SUN 最初于 2008 年 2 月 26 日收购 MySQL。

PHP,Perl 或 Python

PHP 是一种编程语言最初设计生产动态网站。PHP 是主要用于服务器端的应用程序软件。Perl 和 Python 类似。

linux+nginx+mariadb+php/perl/python=LNMP

制作一个论坛

搭建BBS Discuz_X3.2的环境需求:

[root@shareserver ~]# setenforce 0             ##为了避免网络问题,此实验中我们把防火墙设为Permissive模式

<1>安装服务

1. Apache 服务

[root@shareserver ~]# systemctl start httpd             ##开启apache服务

2. Mysql 安装

[root@shareserver ~]# yum install mariadb-server -y

[root@shareserver ~]# systemctl start mariadb

[root@shareserver ~]# vim /etc/my.cnf      ##修改主配置文件,关闭mysql检测端口

skip-networking=1                 ##添加此语句,设置检测时略过mysql,使监听端口无法监测到mysql的端口

[root@shareserver ~]# mysql_secure_installation            ##安全初始化

3. Php 安装

查看 php 扩展: php -m

[root@shareserver ~]# yum install php php-mysql -y

4. Discuz! 安装(下载论坛模板)

[root@shareserver html]# mkdir /var/www/westos.com/bbs/html/ -p            ##创建虚拟主机的发布目录

[root@shareserver ~]# cd /var/www/westos.com/bbs/html/

[root@shareserver html]# scp [email protected]:/home/kiosk/Desktop/Discuz_X3.2_SC_UTF8.zip .   ##将该论坛模板压缩包复制到server服务器主机上

[root@shareserver html]# unzip  Discuz_X3.2_SC_UTF8.zip    ##解压

<2>服务配置

虚拟主机配置文件:

[root@shareserver html]# cd /etc/httpd/conf.d

[root@shareserver conf.d]# vim bbs.conf

<VirtualHost *:80>
        ServerName bbs.westos.com
        DocumentRoot /var/www/westos.com/bbs/html
        CustomLog logs/bbs.log combined
</VirtualHost>
<Directory "/var/www/westos.com/bbs/html">
        Require all granted
</Directory>

 

将目录赋予相应权限:

[root@shareserver ~]# cd /var/www/westos.com/bbs/html/

[root@shareserver html]# ls
readme  upload  utility

[root@shareserver html]# cd upload/

[root@shareserver upload]# chmod -R 777 config

[root@shareserver upload]# chmod -R 777 data

[root@shareserver upload]# chmod -R 777 uc_client

[root@shareserver upload]# chmod -R 777 uc_server

 

<3>重启服务

[root@shareserver upload]# systemctl restart httpd

[root@shareserver upload]# systemctl restart mariadb

<4>安装论坛

至此,论坛已经完全搭建完毕,可以在做好解析的主机浏览器中访问bbs.westos.com/upload去进行安装了。

点击同意按钮

 进入开始安装界面,点击下一步进行安装

进入设置运行环境界面,点击下一步进行安装

进入安装数据库界面,填写数据库相关信息,主要是数据库密码,点击下一步

开始安装

安装完成后,就可以进入该论坛进行操作了。

Squid代理

Squid cache(简称为Squid)是流行最广的,使用最普遍的开源缓存代理服务器。Squid 是一个缓存 Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向 Squid 发出一个申请,要 Squid 代替其进行下载,然后 Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid 把保存的备份立即传给用户。

按照代理类型的不同,可以将 Squid 代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。

正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替请求。我们常说的代理也就是正向代理,正向代理代理的是请求方,也就是客户端;

反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;

squid的作用和应用场景:

  • 用来做前置的Web缓存,加快用户访问Web的速度

  • 代理内网用户访问互联网资源

  • 设置访问控制策略,控制用户的上网行为
  • 主要支持http、ftp等应用协议
  • 官网地址:http://www.squid-cache.org/应用场景

正向和透明代理:一般用于公司内网用户访问互联网,根据需求进行访问控制

反向代理:一般用于公司服务器集群前做web缓存,提高用户访问效率,同时可以起到负载均衡作用,为互联网提供可持续的web服务

squid的正向代理配置

需求:内网用户通过浏览器指定代理服务器的IP和端口访问互联网中的web服务

实验环境:两台虚拟机:确保有一台squid(172.25.254.200)可以上网,另一台主机shareserver(172.25.254.100)想要上网必须通过有网的主机缓存

两台虚拟机都需要关闭防火墙服务

squid主机配置:

[root@squid ~]# yum install squid -y                            ##安装squid

[root@squid ~]# vim /etc/squid/squid.conf                  ##配置主配置文件

 56 http_access allow all                                              ##将deny改为allow

 62 cache_dir ufs /var/spool/squid 100 16 256          ##取消该行的注释 ufs /var/spool/squid是squid的cache存放路径 、100表示cache目录容量(单位M)、16表示一级缓存目录数量、256表示二级缓存目录数量

[root@squid ~]# systemctl restart squid                      ##重启服务

shareserver主机测试:

浏览器设置网络代理:

preferences–>Advanced–>Network–>Settings–>Manual proxy configuration
HTTP Proxy: 172.25.254.74 (可以上网的主机) Port:3128
选中 use this proxy server for all protocols 这一项;

输入百度的网址,测试可以看到网页,但是真实访问的不是真实的网页,而是172.25.254.200这台主机的缓存;

squid的反向代理配置

Squid 反向代理常用于服务器端,客户端访问 Squid 代理服务器的 80 端口,Squid 代理服务器根据配置去请求后端的 web 服务器,实现了两次加速;

实验环境

客户端:squid(172.25.254.200)没有开启apache服务,

服务端:两台主机:shareserver(172.25.254.100)开启apache服务,真机(172.25.254.81)开启apache服务。

三台主机都关闭防火墙服务

实验一:

squid主机的配置(172.25.254.200):

[root@squid ~]# vim /etc/squid/squid.conf

 56 http_access allow all

 59 #http_port 3128                         ##注释掉原有的端口3128
 60 http_port 80 vhost vport            ##虚拟主机和虚拟端口

61 cache_peer 172.25.254.100 parent 80 0 proxy-only   ##通过80端口缓存自己没有的东西

cache_peer:做反向代理的关键字
172.25.254.100:代表后台真正的web服务器
parent:代表代理服务器的类型,有PARENT和SIBLING两种;parent代表父亲,sibling代表兄弟伙伴
80:后台web服务的端口
0:代表代理服务器之间通讯的端口(用于查询兄弟缓存的端口)
proxy-only:代表只做代理
weight=2:代表权重 

[root@squid ~]# systemctl restart squid             ##重启服务

测试:

在真机上测试:解析地址为squid主机的ip(172.25.254.200),不是apache服务主机

[root@foundation81 html]# vim /etc/hosts

 在真机浏览器上进行测试:输入的是squid主机的ip(172.25.254.200),显示的内容却是apache主机 (172.25.254.100)的内容,此时反向解析就宣告成功了

实验二:

squid主机的配置(172.25.254.200):

[root@squid ~]# vim /etc/squid/squid.conf

 56 http_access allow all

 59 #http_port 3128                         ##注释掉原有的端口3128
 60 http_port 80 vhost vport            ##虚拟主机和虚拟端口
 61 cache_peer 172.25.254.100 parent 80 0 proxy-only name=web1 round-robin weight=2  ##通过80端口缓存自己没有的东西 weight是轮询的权重,表示访问两次172.25.254.100的内容再访问一次172.25.254.100的内容
 62 cache_peer 172.25.254.81 parent 80 0 proxy-only name=web2 round-robin
 63 cache_peer_domain web1 web2 www.westos.com

 65 cache_dir ufs /var/spool/squid 100 16 256

[root@squid ~]# systemctl restart squid             ##重启服务

测试:

在真机上测试:解析地址为squid主机的ip(172.25.254.200),不是apache服务主机

[root@foundation81 html]# vim /etc/hosts

在真机浏览器上进行测试:输入的是www.westos.com,第一次显示apache服务主机(172.25.254.100)的内容

刷新一次仍然显示apache服务主机(172.25.254.100)的内容

再刷新一次显示apache服务主机(172.25.254.81)的内容

 注:squid服务启动不了时的解决办法:

1.查看报错:

2.以上报错的解决:

[root@squid ~]# vim /etc/squid/squid.conf

visible_hostname squid.packet-pushers.net              ##配置文件中加入此语句

[root@squid ~]# systemctl restart squid                     ##重启成功


CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模 块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。


猜你喜欢

转载自blog.csdn.net/weixin_40172997/article/details/84677735