LAMP/LNMP源码安装,配置详解,nginx与php工作详解,不一定全网最全,但一定满足大部分需要

目录

1. LAMP/LNMP是什么,为什么要使用?

2. Linux系统安装与虚拟机配置

3. 配置虚拟机网络属性及静态IP

4. 在linux中搭建LAMP/LNMP环境

5. PHP-fpm 相关知识

6. nginx配合php工作的相关配置以及自身的一些配置解析


本篇博客详细讲解了LAMP/LNMP的环境搭建,附带了一些自身搭建时产生的报错,并且有虚拟机静态ip的相关配置,重点讲解了nginx和php相关的工作原理和相关配置。

1. LAMP/LNMP是什么,为什么要使用?

是指Linux(操作系统)+ Apache / Nginx(HTTP 服务器)+ MySQL(数据库)和 PHP(网络编程语言),一般用来建立 web 应用平台。

  • 他们组合起来以后涵盖了整个的web开发流程
  • 流行,免费,开源,轻量
  • 全球有超过70%的企业在使用

接下来我们按照顺序依次讲解一下它们的具体内容

1.     Linux:它是开源的类unix操作系统,支持免费试用和传播,他有很多发行版本:CentOS,RedHat(红帽),Ubuntu以及国内的红旗。那么既然是操作系统,他与我们使用的windows又有那些区别呢?首先,两者的用户假设不同,也就是面向的群体不同,通俗一点来讲,就是说linux的用户呢,在做操作时时会有目的有思路去做的,而windows用户的目的性和思路不是很强。然后在软件哲学方面也有一定的不同,感兴趣的可以深入了解,这里不过多介绍。并且使用windows系统的用户都知道,windows的系统是需要购买的,而且windows系统使用起来需要注意关机问题,如果持续性使用时间太长,就会出现卡顿等现象。但linux则不同,linux完全免费而且稳定高效,它可以做到连续24小时不间断运行,并且数年不需要重启。

2.     Mysql:是一款开源免费的高性能关系型数据库。

3.     Apache:是一款web服务器软件,用来监听端口,接受请求,解析HTTP协议,然后将内容转发给php。

4.     Nginx:与Apache一样,是一款web服务器软件,但相比之下,nginx的前景更好,配置更轻松,性能更加优秀

5.     PHP:是世界上最优秀的语言,如果你不知道这门语言,可以先收藏本片博客,然后去翻阅资料了解一下php后再来浏览。

这里我们提到了两款web服务器软件:Apache和Nginx,这两者究竟有怎样的区别呢,接下来跟大家简单介绍一下:

  • Apache:采用select轮询机制来监听端口,当有端口发生变化时,来进行处理,这种方式有点类似于编程语言里的for循环,而且是一个死循环。apache出代的时间长,所以更加稳定,有更多的扩展库,如果你的网站不要求有高并发请求处理,更偏向于趋于稳定,那么更适合使用apache。
  • Nginx:采用了epoll事件监听机制,不会主动的轮询,而是有端口变化时,会第一时间感知,然后进行处理。nginx可以完成反向代理以及负载均衡,在高并发场景下有更好的优势。但nginx并没有apache那么稳定,可能会有异常的发生。

2. Linux系统安装与虚拟机配置

这里带大家系统的安装一下这个linux以及虚拟机的一些配置等,使用购买的服务器的可以跳过。

首先我们需要下载一个虚拟机软件,这种软件有很多,vmware,virtualBox等,这里大家可以根据自己的喜好自行下载,我这里用vmware来举例说明。

下载好虚拟机后,我们打开,来到主页,来配置我们第一个虚拟机

点击新建虚拟机开始虚拟机的配置

选择自定义(高级),点击下一步

 一直下一步到这个页面,给自己的虚拟机起一个名字,选择虚拟机的安装位置,推荐D盘

 点击下一步来到虚拟机配置页面

 点击下一步选择虚拟机内存,一般默认即可

再次一直下一步到选择磁盘页面,默认8GB,我这里设置了20GB,剩下的全部默认下一步就好,最后点击完成

 然后我们会返回到首页,看到我们所创建的虚拟机,然后我们还要给虚拟机做一些配置

 在这里我们需要一个镜像的包,这个包大概9G左右,我们打开centos的官网:CentOS官网,点击download,点击×86_64,优先原则选择第一个,然后找到everything-2009,点击下载

 

 然后我们回到虚拟机,将我们下载好的centos镜像配置给我们的虚拟机,点击确定然后开启我们的虚拟机

 

  •  第一次开启虚拟机可能会慢一点,这里我们来讲一下为什么要选择centos7。因为centos7以及RedHat(红帽)的生命周期为10年,也就是说十年内他都会自动生成补丁来维护保障安全,而Ubuntu的生命周期只有5年。

出现这个页面时,我们选择第一个,然后回车

  •  这里我们再来讲一下linux的软件安装方式,linux有两种安装方式,一种是源安装,相当于centos里的yum安装,这里我们不细说,因为我并不很喜欢这种安装方式。另一种是编译安装方式,所谓编译安装就是将软件源代码进行编译然后安装,个人更喜欢后者,后面的内容也都会使用编译安装的方式来进行讲解。

加载完成后会出现选择语言的页面,这里我们下拉找到中文,然后右边选择简体中文即可

 接下来会出现这个页面,这就相当于我们买新电脑回来时的设置一样,这里注意时区要选择亚洲 上海,然后我们点击这个带黄色三角的,点击自动分区,点击完成

 

下拉找到网络与主机名,点击进入将我们的网络打开 ,然后点击完成即可

 然后我们点击开始安装,会出现这个页面,这里是让我们设置登录管理员用户的密码的,我们点击root密码来设置,点击完成

 

可以选择创建用户,在创建用户时也可以选择是否给该用户管理员权限,当我们给了管理员权限后,该用户就可以做一些管理员可以做的事情

 然后我们等待安装,完成后会提示我们重启,重启即可

 重启完成后会提示我们登录,这里我们账号输入root,密码输入我们刚刚设置过的,出现这样的页面就是登录成功了。

  • 这里我们要注意,linux不会像windows一样输入密码时提示小圆点,它的密码是看不到的,输完回车就好了
  • 当我们想要退出当前登录更换账号是可以输入exit,然后输入另一个号就可以

3. 配置虚拟机网络属性及静态IP

我们安装好虚拟机后第一件事当然就是试一试网络是否通畅,在linux中我们可以通过ping的方式来测试网络是否通畅

ping www.baidu.com

如果出现ping不通的情况那么我们需要到设置中更改一下配置

cd /etc/sysconfig/network-scripts/
#切换到配置文件目录
ls
#查看文件,一般来说是第一个文件
vi ifcfg-ens33
#打开网络配置

找到ONBOOT这一行,如果为no,改为yes后:wq保存退出

重启网络服务

systemctl restart network.service

 然后重新尝试ping网络,这样时就是网络通畅了

然后我们开始为我们的虚拟机设置一个静态的IP,这样我们就可以在任意一台机子上访问我们的虚拟机了,首先我们需要在vmware页面中找到相关的IP配置信息,我们打开vmware首页,点击编辑,点击虚拟网络编辑器

点击选择NAT模式,然后点击NAT设置

 这里我们可以看到这些配置,然后我们回到虚拟机,重新打开网络配置文件

找到BOOTPROTO这一行,将等号右边改为static,然后换行输入以下内容,保存退出,重启网络设置

IPADDR = 192.168.226.201
NETMASK = 255.255.255.0
GATEWAY = 192.168.226.2
DNS1 = 8.8.8.8

然后我们输入下面这个命令来查看是否修改成功,这里出现这个就是设置成功,IPADDR也就是虚拟机的静态IP,这里有两点需要注意:

  • 我们的数据均来自于虚拟机的配置,对应关系为:IPADDR对应子网IP(子网IP是区域的,以我的为例,ip区域是192.168.226.0-192.168.226.225,在这中间任选一个即可),NETMASK对应子网掩码,GATEWAY对应网关
  • DNS为域名解析器地址,可以设置多个(常用的比如:阿里的223.5.5.5 / 223.6.6.6,腾讯的119.29.29.29 / 182.254.118.118,百度的180.76.76.76,谷歌的8.8.8.8 / 8.8.4.4)
ip addr

 

接下来我们还需要设置一下防火墙,因为我们在别的机器上访问虚拟机属于外部访问,需要本机防火墙开放22端口,然后重启防火墙

#开放22端口
firewall-cmd --zone=public --add-port=22/tcp --permanent
#重启防火墙
systemctl restart firewalld.service

 然后我们来打开cmd小黑盒尝试连接,连接成功,账户名@IP地址,使用ssh连接即可

ssh root@192.168.226.201

4. 在linux中搭建LAMP/LNMP环境

首先我们来安装一些比较重要的使用软件vim和wget,安装完成后会提示我们完毕

  • 接下来我们要注意的是,如果你不是root用户登录,而是别的用户登录,如果用户授权了管理员权限,则可以在命令前加上sudo,如果没有管理员授权,则需要切换至root用户或已授权的用户。
yum install vim
yum install wget

然后我们来下载第一个软件PHP,去PHP官网找到我们要下载的php版本,选择我们想要下载的版本,后缀为.tar.gz即可,右键选择复制链接地址,这里我选择的是7.4版本的

 然后我们在命令行中开始下载我们的php

#下载压缩包
wget https://www.php.net/distributions/php-7.4.30.tar.gz
#查看文件夹内文件,看压缩包的文件名是什么
ll
#由于是压缩包,我们使用前需要解析成文件
tar -zxvf php-7.4.30.tar.gz
#再次查看,发现已经有了解压后的文件
ll

 接下来我们来下载一个fpm支持,php与nginx交互时要用到php-fpm,至于fpm是什么有什么作用,文章下一节会重点讲解

yum install gcc gcc++ libxml2-devel

然后我们切换到php文件下,开始编译安装php

#切换目录
cd php-7.4.30
#执行php的安装
./configure --prefix=/usr/local/php7-rong --enable-fpm
#编译
make
#编译安装
make install
  •  可能出现的报错,当使用7.4版本的包时,可能会出现缺少sqlite的情况,这里我们需要yum安装一下
  • 首先查看我们package:pkg-config --list-all
  • 如果没有sqlite的话,则执行:yum -y install sqlite-devel
  • 再次查看package,有了就重新执行php的安装

        

完成后我们后退到根目录下,使用命令创建一个php文件,文件里编写php代码

vim demo.php
#代码
<?php
phpinfo();

 然后我们保存退出,执行命令来运行php文件,测试我们的php是否安装成功

/usr/local/php7/bin/php demo.php

 接下来我们安装第二个软件Mysql,同样来到Mysql官网,选择cource code,下拉找到我们需要的版本,如图所示,右键获取链接,然后去命令行下载并解压

  这里下载并解压好后,我们也需要下载一些mysql所需要的插件

yum install cmake gcc-c++ ncurses-devel perl-Data-Dumper boost boost-doc boost-devel

接下来我们切换进入mysql文件夹,执行编译安装,这里与php有一点不同

#cmake是一款跨平台的安装工具
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1\
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \ 
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
#编译安装
make
make install

然后我们使用mysqld命令启动mysql然后输入mysql打开即可

接下来我们开始安装第三个软件Apache,同样的在Apache官网中,找到以.tar.gz结尾的安装包,右键拿到下载地址,然后下载解压,这里要注意,需要在wget后加上一段--no-check-certificate,这样才能执行安装。

 然后cd到解压后的文件内执行编译安装

./configure --prefix=/usr/local/apache2

这里会报错说一个APR没有找到,所以我们要安装一下,首先我们切回到上级目录,安装两个apr相关的插件

wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz
//解压
tar -zxvf + 安装包

这里我们解压出来的apr是携带版本号的,我们需要重命名去掉版本号并且将文件放到apache目录下的srclib目录

 最后我们还要安装一个依赖,是一个正则,pcre,下载完成后,他会命名成一个download的包,

//下载包
wget https://sourceforge.net/projects/pcre/files/pcre/8.37/pcre-8.37.tar.gz/download --no-check-certificate
//重命名
mv download pcre.tar.bz2
//解压
tar -zxvf pcre.tar.bz2

这些完成后我们切换到pcre文件夹下,执行编译安装

./configure --prefix=/usr/local/pcre-8.37
make
make install

pcre安装完成后,我们回到apache安装目录下,继续执行我们的apache的安装

./configure --prefix=/usr/local/apache -with-pcre=/usr/local/pcre-8.37/bin/pcre-config -with-included-apr
make
make install

这些我们执行完后,我们切换到apache的运行目录/usr/local/apache2/bin,到这里我们来运行apache来尝试一下

 这里可能会出现一些报错,一般来说是未开放80端口,参考文章上面讲到的开放22端口,在这里开放一下80端口,然后重启防火墙,再次尝试,会出现下面这个结果,这时我们浏览器访问我们的ip地址,出现it works!表示apache安装并运行成功

 

最后我们来安装nginx,打开Nginx官网,选择最新版本右键获取链接地址​​​​​​​

 回到小黑盒的根目录下,下载并解压,这里我们顺便提一嘴,我们可以查看一下nginx的文件大小,我们会发现,nginx很小,这就说明nginx足够轻量

ls -alh | grep nginx

接下来我们切换到nginx安装目录下,执行编译安装

./configure --prefix=/usr/local/nginx --with-pcre=../pcre-8.37/
make
make install

当我们./configure时出现下面这个报错时,可以yum安装一个插件

yum install -y zlib-devel

 安装完后,我们切换到nginx的运行目录下,来运行nginx尝试一下,但这里我们要注意,我们要查看是否有apache的进程在运行,如果有我们需要杀死进程,否则我们nginx无法正常运行

ps aux | grep httpd
kill -9 + 端口号
//启动nginx
cd /usr/local/nginx/sbin
./ nginx

 浏览器访问出现welcome to nginx!则运行成功

 至此我们整个LAMP/LNMP环境搭建完成。

5. PHP-fpm 相关知识

  • 首先我们要明白,什么是CGI,CGI是一个协议,全称是公共网关接口,主要用于web server 和动态程序的数据传输,为了保证web server传输的数据是标准格式,方便CGI程序的编写者。CGI在处理请求时,会fork一个子进程呢个,处理完后释放,再来在fork,再释放,会大大降低效率和性能。
  • 其次我们还要知道什么是fastCGI,fastCGI是和语言无关的CGI开放扩展,它主要将CGI解释器进程保持在内存中以获得高性能。fastCGI会主动启动一个进程,这个进程有多个子进程,存在内存中,避免反复fork和释放,并且会在请求多的时候,fork多个子进程来帮助处理,而在请求少了以后又会将这些多fork的子进程释放掉,防止浪费。
  • 最后我们来说一说php-fpm,php-fpm是fastCGI的管理器,但只适用于PHP。php-fpm是实现了fastCGI的程序,原本是一个第三方程序,后来被PHP官方收购。
  • 举个例子:我们在访问index.php的时候,nginx会根据配置文件知道这不是一个静态文件,不能直接返回,需要先执行php解释器,nginx简单处理后发送数据和程序给php解释器来处理,这些数据包括url地址,get参数或post参数等,这些都是CGI协议规定的。
  • 然后我们来讲一下php和nginx的工作模式,当有请求进入后,nginx会对数据进行处理,使用http协议解析,完成后,会将以.php结尾的文件交给php的解释器,也就是php-fpm,php-fpm通过监听了9000端口来将nginx传过来的数据做处理,然后返回给nginx,再由nginx返回给浏览器展示。

6. nginx配合php工作的相关配置以及自身的一些配置解析

当我们是使用LNMP来搭建web服务时,我们需要注意nginx和php-fpm之间的相互配合,首先我们要启动php-fpm,我们切换目录到/usr/local/php7/sbin/,启动我们的php-fpm,这里我整理了我的报错,如果一致可以通过我的来尝试解决,当然还要具体看报错内容。

cd /usr/local/php7/sbin
./php-fpm

这样的报错是我们etc目录下的配置文件没有以conf结尾,所以索引不到

cd /usr/local/php7/etc/
mv php-fpm.conf.default php-fpm.conf

 这样的报错我们就需要去他所说的文件目录内同样的修改后缀为.conf

cd /usr/local/php7-rong/etc/php-fpm.d
mv www.conf.default www.conf

然后我们再次尝试启动php-fpm,查看是否启动成功

cd /usr/local/php7/sbin
./php-fpm
ps aux | grep php-fpm

 以上就是在使用LNMP环境时需要注意的nginx和php的一个工作配置,需要我们启动php-fpm,那么还有哪些配置呢,首先我们来打开我们的/usr/local/nginx/conf,可以看到这里有很多conf配置文件,所以conf就是我们nginx的配置文件夹。我们打开下面的nginx.conf

cd /usr/local/nginx/conf
vim nginx.conf

这里会有一些我们在使用nginx的一些配置

  • worker_processes 是nginx启动多少个子进程
  • listen 是监听端口
  • server_name 是用来配置域名的
  • location 是配置目录的

我们在http里找到server,在这里我们可以添加一些关于php的配置

location ~ \.php {
    //请求给nginx后,nginx转接给我们本地的9000端口
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_index   /index.php;
    include    /usr/local/nginx/conf/fastcgi_params;
    fastcgi_split_path_info    ^(.+\.php)(/.+)$;
    fastcgi_param PATH_INFO    $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

 我们再来看看php-pfm的配置,切换到php目录下,打开php-fpm.conf

cd /usr/local/php7/etc
vim php-fpm.conf

这里我们可以看到,在配置文件中他include了一个别的配置文件夹下的所有配置文件,那么我们再切换到这个目录下,打开里面的www.conf

cd php-fpm.d
vim www.conf

这里的user和group是我们启动php-fpm时子进程的所属用户和所属用户组。我们可以参考上面启动的这个php-fpm,第一个php-fpm是我们启动的php-fpm,他是所有php-fpm进程的master进程,所以用户时root,而下面两个就是主进程派生出的子进程,这里的用户就属于nobody了。这里就是这个意思。

然后为什么这个php-fpm启动后就会派生出两个子进程呢?我们再次回到刚才的www.conf配置文件中,向下我们会找到一组pm的相关配置,这些就是我们子进程的有关配置。

//杀死php-fpm进程
kill -USR2 + 进程号
  • 我们能看到有pm=dynamic,上面的注释还有ondemand和static,这里是区分动态静态的
  • 静态时(static),子进程会默认为最大子进程数(max_children)来启动,不会增加也不会减少
  • 当是dynamic动态时,我们会用到所有的配置参数,max_children是来保证子进程的最大存活量的,start_servers是我们启动时默认开启的子进程数,min_param_servers和max_param_servers是空闲时子进程的最大和最小存活数。
  • 当是ondemand动态时,在启动时不会自动派生子进程,而是再有请求时分岔出子进程,使用max_children参数来控制子进程最大存活数量,和process_idle_timeout来确定空闲时杀死进程的时间(当子进程空闲多久后杀死子进程)

到这里我们整个的环境搭建,nginx和php的交互以及配置,php-fpm等的讲解全部结束,可能有的地方描述的不是很合适或者不是很清楚,但整体都是ok的。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值