目前世界主流使用的web服务器软件

  • apache ==>> linux
  • nginx ==>> linux
  • lis ==>> 微软
  • Lighttpd ==>> linux

    了解LAMP

    linux(操作系统) + apache(HTTP服务器) + MySQL(数据库) + PHP(编程语言)/python/pearl
    *之后的LNMP也是如此,只是运用了Nginx服务器,基本的架构框架大抵相同

简单理解架构思路:
我们浏览网页,apache会通过我们输入的格式,来判断是静态网页还是动态网页,如果是静态网页则会从本地寻找文件进行反馈,如果判断是静态网页,就会交给PHP/Python进行相应的处理并反馈,这一流程就形成了一个完整的网页浏览的处理架构

Apache

http服务器 apache 高度模块化的web服务器,apache支持多虚拟主机功能:基于端口的多虚拟主机、基于域名的多虚拟主机、基于ip的多虚拟主机

  1. 安装apache

    yum install httpd -y #注意自己当前的服务器能不能上网,也可以去官网获取源代码进行编译安装,自定义安装功能,额外扩展功能

  2. 检查linux是否启动了80端口

    netstat -tunlp | grep “80”

  3. 启动http服务,启动apache

    systemctl start httpd systemctl status httpd systemctl enable httpd systemctl disabale httpd

  4. 检查apache进程是否存在

    ps -ef | grep httpd

apache配置文件讲解

  1. 检查apache安装了哪些文件,通过yum安装的软件,我们可以通过以下方式检查安装信息

    rpm -ql httpd | grep “.conf”

  2. apache主配置文件在/etc/httpd目录中

    /etc/httpd/conf/httpd.conf #主配置文件绝对路径

  3. 查看主配置文件中的有益信息(排除空白+注释行)

    [root@localhost html]# grep -Ev “^[# ]|^$” /etc/httpd/conf/httpd.conf ServerRoot “/etc/httpd” #httpd主配置目录定义 Listen 80 #定义apache运行的端口 Include conf.modules.d/*.conf #通过include语法,把其他目录中的配置文件包含进来,实现配置文件简洁化 User apache #定义httpd运行的用户名 Group apache #定义httpd运行的用户组 ServerAdmin root@localhost #定义主机名 DocumentRoot “/var/www/html” #定义httpd的网页根目录

image.png

常见参数解析

image.png

apache常用功能

1.修改apache网页根目录

需要修改两个参数(可以查看配置文件具体了解)

  1. 修改httpd.conf

    DocumentRoot 代表网页根目录 Directory 定义该目录的属性

    修改如下参数

    DocumentRoot “/www/html”

    AllowOverride None #不允许其他配置文件,覆盖现有配置 # Allow open access: Require all granted #允许所有请求
  2. 创建新的站点目录

    mkdir -p /www/html

  3. 创建新的首页文件 index.html

    vim /www/html/index.html

    可以随意写入内容,也可以用网页的格式来写更多的格式

  4. 确保关闭防火墙

    getenforce ==>> Disabled #显示此内容说明防火墙已经关闭

  5. 重启apache

    systemctl restart httpd

2.修改apache默认运行端口

在http.conf配置文件中,我们可以看到一个Listen的配置信息

  • 默认是Listen 80,我们可以对80进行任意的修改

这个时候我们利用ip登陆网页的时候,默认是打不开的,因为默认是使用80端口,我们需要在ip地址后面加上 :新的端口号 才能正确的打开网页,即更改了他的运行端口

apache的工作模式(多进程工作模式)

  • prefor

在apache,hhtpd服务刚启动的时候,就预先fork一些进程,并且这些进程等待用户的请求,可以减少频繁的创建和销毁进程,带来额外的系统开销
prefork模式是一个进程,只有一个线程,一个时间内,只能处理一个请求
优点:成熟稳定,兼容所有的apache模块,并且不用担心线程冲突的问题
缺点:多个进程占用了较多的系统资源,消耗了较多的内容,并且该模式,不适合并发场景

  • worker

使用多进程+多线程的混合模式,也是预先打开了多个进程,每个子进程都会创建一些子进程,同时还会有一个监听线程,每个请求来了之后,会分配给一个线程去处理
线程单位比起进程单位,是消耗较少的内存。在高并发场景下,使用worker模式(银行多个窗口,窗口后多个工作人员)
优点:worker模式,占用更少的内存
缺点:需要考虑多线程的,资源抢夺问题

  • event

和worker模式还是比较相似,解决了tcp的keep-alived场链接问题,当请求来了之后,交给一个子线程去处理,如果该TCP长链接,长时间占用线程资源,对系统开销较大,event模式会默认开启一个监听线程,检测到当子线程处理完毕请求之后,会释放该线程,减轻服务器的压力

userdir功能

userdir模块可以很方便的和他人共享服务器的目录资料,相当于平时我们所说的共享文件
配置文件路径:/etc/httpd/conf.d/userdir.conf

  1. 编辑userdir配置文件,修改如下参数

vim /etc/httpd/conf.d/userdir.conf
image.png
image.png

  1. 创建网站资料,注意权限的问题

    useradd chuange su - chuange mkdir public_html #创建共享目录

  2. 创建共享的网页文件

    vim public_html/index.html #任意输入内容

  3. 设置该目录权限

    chmod -Rf 755 /home/chuange

  4. 创建apache的用户认证文件,这时候退回root用户

    htpasswd -c /etc/httpd/passwd chuan #输入指定用户后,跳出设置新密码

  5. 重启apache

    systemctl restart httpd

  6. 使用客户端访问该共享目录,方式如下

    ip/~chuan
    即:http://ip:80/~用户家目录名/

结果:能够进入网页,且能输入账号密码,输入对应账号密码后,能够看到我们设置的index.html文件内容即成功检测

虚拟主机

如果web server不支持多虚拟主机,用户用多个业务网站,就得购买多台服务器,造成资源浪费,成本较高
虚拟主机,也称作,网站空间,其实就是一台运行在互联网中的服务器,被划分为多个“虚拟”服务器,简单说明就是在一个linux机器上,通过不同的文件夹,管理不同的站点内容
如果每台linux服务器,只能运行一个网站,那么对于一些只有简单业务的网站,比如个人博客,小型论坛,对于服务器的硬件资源是很浪费的,且需要支付昂贵的服务器租赁费用,那么出现了多虚拟主机后,就让小型站点,更方便的使用互联网搭建技术,以及成本把控
apache是支持多虚拟主机功能,能够根据用户不同的ip地址,不同的域名,不同的端口,实现多个站点内容的响应

基于ip的多虚拟主机

在一台服务器,绑定多个ip地址,每个ip地址,部署一个网址,当用户请求不同的ip地址的时候,apache根据用户的请求信息,来响应不同的网站内容

  1. 给服务器添加ip地址

    ip address add 192.168.47.135/24 dev ens33 ip address add 192.168.47.136/24 dev ens33

  2. 创建站点目录,一个ip对应个文件目录

    mkdir -p /www/…

  3. 对所创建的文件目录建立首页文件

    vim /www/…/index.html #输入任意内容,作为测试使用

配置apache文件,定义多个虚拟主机

  1. 编辑主配置文件

    vim /etc/httpd/conf/httpd.conf

    VirtualHost 定义虚拟主机的配置参数

    以下这个阶段是第一个虚拟主机的配置

    #定义网页根目录 DocumentRoot “/www/…” #servername是定义虚拟主机匹配的域名 ServerName “www.xxx.cn” #允许所有访问的权限 AllowOverride None Require all granted

    配置第二个虚拟主机配置

    DocumentRoot “/www/…” ServerName “www.xxx.cn” AllowOverride None Require all granted
  2. 重启apache服务,加载配置

    systemctl restart httpd

结果:这个时候我们可以通过网页输入域名或者ip的方式,查看是否能够得到我们一开始输入的文件信息,如果都可以看到,且域名和ip两种方式都成功,则实验检测成功

apache设置站点访问权限

  1. 直接修改apche配置文件,针对一个虚拟主机去修改访问权限
    DocumentRoot “/www/…” ServerName “www.xxx.cn” #AllowOverride None
    #Require all granted Order allow,deny #控制所有用户不能登陆该服务器 Allow from 192.168.47.0/24 #指定ip地址允许访问

定义访客日志格式

针对日常需要,我们会定制apache默认显示的日志格式,增加或减少日志记录的内容,更好的让运维人员掌握用户访问信息,虽然关闭日志可以更好的提升性能,但是在生产环境中,日志是必不可少的,所以一般是调整日志的级别。

vim /etc/httpd/conf/httpd.conf 找到 ===>>> LogFormat

日志级别

  • emerg:紧急,系统无法使用
  • alert:必须立即采取措施
  • crit:致命情况
  • error:错误情况
  • warn:警告情况 #默认,且最常用的日志级别
  • notice:一般重要情况
  • info:普通信息
  • debug:出错级别信息

-从上至下,日志的级别越低,相对应的,日志产生量也会越大

status状态页

对于运维人员来说,需要实时监控httpd实时运行情况,负载情况,连接数等,能够更好的掌握服务器情况

apache状态检测功能

  1. 配置状态页配置信息

    vim /etc/httpd/conf/httpd.conf

    在最后添加如下参数

    SetHandler server-status Require ip 192.168.47.0/24 #我们的状态信息是不能对所有人公开的,所以设定我们指定的局域网可以查看
  2. 访问apache状态页面

    192.168.47.130/server-status

image.png
检测:

  1. 使用ab命令

    yum install httpd-tools -y

  2. 使用ab命令,给服务器并发的发送大量请求

    给服务器发送100000请求,100个并发数

    ab -c 100 -n 100000 http://192.168.47.131/

  3. 这个时候我们可以通过另一个窗口查看进程数,或者通过状态页

    查看到进程数由少变多,再慢慢减少的过程

    ps -ef | grep httpd | wc -l

curl命令

curl命令是基于URL语法,在命令行下工作的传输工作,支持诸多协议,比如FTP、HTTP、HTTPS
参数:
-o 指定保存文件的名字,网页内容输出到指定内容
-s 静默输出
-w 指定curl结束后输出的内容
-O 直接保存站点内容

  1. curl命令保存网页元素

    curl www.xxx.cn > xxx.html

2.利用参数,直接保存网页

与第一种结果相同

curl -o /tmp/test.html www.xxx.cn

  1. 测试网页是否存活

    得到网页的状态码

    curl -o /dev/null -s -w %{http_code} www.xxx.cn echo $? #我们也可以查看上一条命令是否正确执行,为0,表示正确,也就是网站正常运行

  2. 利用curl保存网页的cookie,也就是客户端的身份验证

    给网站发送http请求,并且获取cookie信息

    curl -o /dev/null -s -c ./mycookie.txt www.baidu.com

  3. 利用curl命令,进行身份伪装,分别获取网页的移动端页面,和pc端页面

    准备好移动端和pc端的user-agent,即请求头

    curl -A “ 对应请求头 “ www.xxx.com

  4. 利用curl下载资源

    curl -O http://下载文件的链接地址

PHP

PHP是一个服务端的脚本编程语言,后端编程语言,编写php脚本嵌入HTML网页文件中执行,相对应的,利用python、perl都是一样的道理

php连接mysql

  1. 准好php的代码文件,放入apache的站点目录

    vim /var/www/html/conn_mysql.php

  2. 编写php连接mysql的代码

    <?php $conn=mysql_connect(‘localhost’,’root’,’mima666’); if($conn) echo “php已经连接上了mysql” else echo “php没有连接上mysql” mysql_close() ?>

LAMP环境搭建

linux环境搭建

  1. 查看防火墙规则

    iptables -F #显示没有任何规则就可以

  2. 检查selinux状态

    getenforce #显示Disabled

  3. 停止防火墙服务

    systemctl stop firewalld systemctl disable firewalld

安装apache

yum install httpd -y systemctl start httpd #开启apache systemctl status httpd #查看apache开启情况

部署mariadb(mysql)

  1. 这里安装的是mariadb,并不是mysql软件包

    yum install mariadb-server mariadb -y

  2. 启动数据库

    systemctl start mariadb

  3. 检查数据库的启动状态

    查看端口号

    netstat -tunlp | grep mysql

    查看进程

    ps -ef | grep msyql

  4. 检查mariadb服务状态

    systemctl status mariadb

  5. 用数据库客户端命令,登录数据库,查看数据库信息

    mysql -u用户名 -p密码

    mysql -uroot -p #直接回车默认没有密码

  6. 登录mysql后,简单的sql使用(以下命令是在mysql交互式终端输入的,与linux命令不同)

    show databases; #查看所有数据库 ues mysql; #切换进mysql库 show tables; #查看所有数据表 desc user; #显示user表的结构 select user,host,password from user; #从指定的user表中读取指定的字段信息

    • 注意每个命令的结尾都需要一个 ; 否则是会报错的
  7. 修改密码

    mysqladmin -uroot password “xxxx” mysql -uroot -p #输入密码即可

PHP环境搭建

  1. 解决程序依赖关系

    yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devl gd-devel libcurl-devel libxslt-devel libtool-ltdl-devel pcre pcre-devel apr apr-devel gcc make -y

  2. 安装php解释器以及php连接mysql数据库的驱动

    yum install php php-mysql -y

  3. 配置apache,支持php代码

    vim /etc/httpd/conf/httpd.conf 找到 DocumentRoot “/var/www/html” #这里是原有的默认的apache网页根目录,网站资料放在这里,首页文件,我们也可以根据自己需求进行修改,不更改,将文件放入此文件夹即可

    在上述代码后添加如下信息,不添加注释进入配置文件中

    TypesConfig /etc/mime.types AddType application/x-httpd-php .php #让apache识别php的程序,以 .php .phps结尾的请求 AddType application/x-httpd-php-source .phps DirectoryIndex index.php index.html #返回默认的页面文件

  4. 手动编写php代码文件

    vim /var/www/html/index.php

    写入如下内容

    <?php phpinfo(); ?>

  5. 重启apache

    systemctl restart httpd

结果:访问lamp页面,出现php的信息内容,则检测成功

LAMP搭建Discuz论坛

前提是已经搭建了LAMP架构,确认安装好apache,mysql,php环境

  1. 下载该论坛的源代码

    wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip

  2. 确认安装zip格式的解压缩命令,且创建站点目录

    yum install unzip -y mkdir /opt/discuz #我们也可以进入这个文件目录才敲击第一条命令,让文件都保存在该目录下 unzip Discuz_x3.2_SC_UTF8.zip #解压文件

  3. 给论坛源代码进行授权,给与大权限

    chmod -R 777 /opt/discuz/*

  4. 移动该论坛代码,放入到Apache的站点目录下

    mv upload/* /var/www/html/ # upload 文件是,解压出来的其中一个文件

  5. 访问apache首页,就能够访问到discuz论坛的首页文件,我们进行对应的安装配置,我们就可以登录该论坛了,具体的论坛操作,可以百度进行搜索

    安装注意的问题:

    1. 其中安装时设置的数据库用户和密码,就是我们在配置mysql时设置的密码
    2. 设置时确定的用户名密码,也是最后在论坛是登录时的密码,两者搞清楚