Web服务器群集:部署LNMP平台

目录

一、理论

1.LNMP平台

2.Nginx服务基础

3.Nginx访问控制

4.Nginx虚拟主机

5.PHP

二、实验

1.LNMP架构+DISCUZ论坛应用

三、问题

1.没有规则可以创建“default”需要的目标“build”。

         2.nginx重启报错

3.yum安装提示报错

4.配置文件报错

5.PHP页面无法打开

四、总结


 

 

一、理论


1.LNMP平台


(1)概念

LNMP平台是高效稳定的Web应用平台,LNMP架构结合了Linux操作系统的稳定性、Nginx服务器的高性能、MySQL数据库的可靠性和PHP语言的灵活性,被广泛应用于Web开发和部署。

(2)原理图
5de424c442844dbf8977418014d3cf51.jpeg

(3)LNMP各组件主要作用

表1 LNMP各组件作用

组件功能作用
LinuxLNMP架构的基础平台作为LNMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性,兼容性(AMP组件也支持Windows、UNIX等平台) 。
NginxLNMP架构的前台作为LNMP架构的前端,是一个高性能、轻量级的HTTP和反向代理web服务器  ,稳定性高并且系统资源消耗低,对HTTP并发连接的处理能力高,单台物理服务器可支持30000-50000华人并发请求,同时也提供了IMAP/POP3/SMTP服务。
MySQLLNMP架构的后台作为LNMP架构N的后端,是一款流行的开源关系数据库系统。在企业网站、业务系统等应用中,各种账户信息、产品信息,客户资料、业务数据等都可以存储到MySQL数据库,其他程序可以通过SQL语句来查询,更改这些信息。
PHP/Perl/PythonLNMP架构的中间连接作为三种开发动态网页的编程语言,负责解释动态网页文件,负责沟通Web服务器和数据库系统以协同工作,并提供Web应用程序的开发和运行环境。其中PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于Web应用开发。

(4)LNMP和LAMP的区别

表2 LNMP和LAMP的区别

功能LNMPLAMP
使用的网站服务不同NginxApache
PHP作用不同在LAMP中PHP是当作Apache的一个模块来使用LNMP中PHP是当作一个独立进程来使用的(即PHP_FPM)

83269567f6b14a0da0bd3dc308ea52d9.jpeg

 

(5)单服务器中Nginx与PHP的工作原理

      ① FastCGI将Http Server和动态脚本语言分离开来

      ② Ngnix专门处理静态请求,转发动态请求

      ③ PHP/PHP_FPM专门解析Nginx转发过来的动态请求

(6)Nginx特点

表3 Nginx特点

序号特点
1高扩展性
2高可靠性
3低内存消耗
4高并发
5热部署
6开源协议
7异步架构的web服务器,也可以用作反向代理、负载均衡器和HTTP缓存。

(7)构建LNMP平台顺序

在构建LNMP平台时,各组件的安装顺序依次为:

表4 LNMP组件安装顺序

安装顺序安装内容组件环境
1Linux系统 
2Nginx服务器专门处理静态请求,转发动态请求给php-fpm处理
3MySQL数据库 
4PHP环境专门解析Nginx转发过来的动态请求

(7)FPM

FPM(Fast Process Manager,FastCGI 进程管理器),用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。它的功能包括:

表5 FPM功能

序号功能
1支持平滑停止/启动的高级进程管理功能
2可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置)
3stdout 和 stderr 日志记录
4在发生意外情况的时候能够重新启动并缓存被破坏的 opcode
5文件上传优化支持
6

"慢日志" - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢

7fastcgi_finish_request() - 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等)
8动态/静态子进程产生
9基本 SAPI 运行状态信息(类似Apache的 mod_status)
10基于 php.ini 的配置文件

 

2.Nginx服务基础

(1)Nginx概念

 Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器  ,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

(2)Nginx下载

官网地址:

nginx news

(3)Nginx工作模式

Nginx有两种工作模式:master-worker模式和单进程模式。在master-worker模式下,有一个master进程和至少一个的worker进程,单进程模式顾名思义只有一个进程。这两种模式有各自的特点和适用场景。

master-worker模式:

e6c4877a326341a185b30a41182f999a.png

 96de696157f14eee97dcb0331e8c0c30.png

单进程模式:

c82d47ca6093476195d7f900c38a20cf.png

 

 2种模式对比:

表6 Nginx工作模式

工作模式功能特点
master-worker模式master-worker模式下nginx启动成功后,会有一个master进程和至少一个的worker进程,worker进程数量建议等于cpu总核心数。master进程负责处理系统信号,加载配置,管理worker进程(启动,杀死,监控,发送消息/信号等)。worker进程负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是worker进程。生产环境下一般使用这种模式。
 

优点:

稳定性高,只要还有worker进程存活,就能够提供服务,并且一个worker进程挂掉master进程会立即启动一个新的worker进程,保证worker进程数量不变,降低服务中断的概率;

 

配合linux的cpu亲和性配置,可以充分利用多核cpu的优势,提升性能;

 

处理信号/配置重新加载/升级时可以做到尽可能少或者不中断服务。
 

单进程模式单进程模式下,nginx启动后只有一个进程,nginx的所有工作都由这个进程负责。因此,该模式一般只在开发阶段和调试时使用,生产环境下不会使用。

优点:

单进程模式由于只有一个进程,因此可以很方便地利用gdb等工具进行调试。

 

缺点:

单进程模式不支持nginx的平滑升级功能,任何的信号处理都可能造成服务中断,并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。

(4)Nginx配置文件

表7 Nginx配置文件

文件/目录功能
/usr/local/nginx/conf/nginx.conf主配置文件
/usr/local/nginx/sbin/nginx命令文件

(5)Nginx主配置文件

①查看配置文件

[root@localhost /]# find  /  -name nginx.conf  -type f
/etc/nginx/nginx.conf
/usr/local/nginx/conf/nginx.conf
/opt/nginx-1.12.2/conf/nginx.conf
/opt/nginx-1.22.0/conf/nginx.conf

②文件结构

nginx.conf一共由3部分组成:全局块、events块、http块。

233a58e68bbb4b0f957f8e76b7753e19.png

全局块:

全局块是默认配置文件从开始到events块之间的内容。

主要设置nginx整体运行的配置指令,这些指令的作用域是全局。

8b12dbc5c67a4bb6bad341e5d419f9e8.png

 

全局块的常见配置指令:

$ vim  nginx.conf
user nginx nginx ;     # Nginx用户及组:用户 组
worker_processes 8;    # 工作进程数量(根据硬件调整,通常等于CPU数量或者2倍于CPU)
error_log  logs/error.log;       # 错误日志存放位置
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
pid        logs/nginx.pid;     # nginx进程PID文件存放路径;
###全局块结束

ewents块:

ewents块的指令主要影响nginx服务器和用户的网络连接,对性能影响较大。

表8 ewents块配置

序号配置项
1是否开启对多worker process(工作进程)下的网络连接进行序列化;
2是否允许同时接收多个网络连接;
3选取哪种事件驱动模型处理连接请求;
4每个work process可以同时支持的最大连接数等;
events {            # events块开始
    worker_connections  1024;  #每个工作进程的最大连接数量(根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。)
    use epoll;    # 使用epoll的I/O 模型。linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
    accept_mutex on;   #开启网络连接的序列化(防止多个进程对连接的争抢)
    multi_accept  on;  #允许同时接收多个网络连接(默认关闭),工作进程都有能力同时接收多个新到达的网络连接
}  # events块结束

http块:

http块是nginx服务配置中的重要部分,代理、缓存、日志定义等很多的功能指令都可以放在http块中。

表9 http块配置

序号配置项
1文件引入;
2MiME-Type定义;
3自定义日志;
4是否使用sendfile传输文件;
5连接超时时间;
6单请求上限等;
http {     # http块开始
    include       mime.types;   #定义MIME-Type(网络资源的媒体类型),nginx作为web服务器必须能够识别前端请求的资源类型。引用外部文件mime.types。
    default_type  application/octet-stream;  #配置用于处理前端请求的MIME类型(默认为text/plain)
    access_log  logs/access.log  main;  #配置服务日志的存放路径、日志格式、临时存放日志的内存缓存区大小;
    log_format  main  xxx;  #专门定义服务日志的格式;
    sendfile        on;  #允许sendfile方式传输文件,
    sendfile_max_chunk  xxx;   #每个工作进程调用sendfile()传输的数据量最大值(0为不限制)
    keepalive_timeout  65;  # 连接超时时间,与用户建立连接会话后nginx服务器保持会话的时间;
    gzip  on;   # 开启Gzip功能,对响应数据进行在线实时压缩;
    ...
}   # http块结束

server块:

http块可以有多个server块,每个server块都相当于一台虚拟主机,server块下又分为server全局块和location块。

server全局块:常见的配置指令是本虚拟主机的监听配置和本虚拟主机的名称或者IP配置。

location块:

表10 location块配置

序号配置项
1每个server块可以包含多个location块。
2location块的主要作用是基于nginx服务器收到的请求字符串(如server_name/uri-string),对除虚拟主机名称外的字符串进行匹配,对特定的请求进行处理。
3location块提供的功能包含地址定向、数据缓存、应答控制、第三方模块等。
server {    # server块开始
        keepalive_requests 100;   # 单连接请求上限,限制用户通过某一连接想服务端发送请求的次数
        listen       80;    # 设置网络监听(分3种监听方式:IP地址、端口、Socket)
        server_name  localhost;  #虚拟主机配置(基于主机名、基于IP、基于域名)
        location / {
            root   html;   #配置请求的根目录
            index  index.html index.htm;   #设置网站的默认首页
        }
        error_page   500 502 503 504  /50x.html;    # 设置网站的错误页面
        location = /50x.html {
            root   html;   
   }   # server块结束

 

(6)Nginx与Apache的区别

表11 Nginx与Apache区别

服务NginxApache
对比甚于事件的Web服务器基于流程的服务器
避免子进程基于子进程
在内存消耗和连接方面更好在内存消耗和连接方面一般
性能和可伸缩性不依赖于硬件依赖于CPU和内存等硬件
支持热部署不支持热部署
对于静态文件处理具有更高效率相对一般
在反向代理场景具有明显优势相对一般
优点

轻量级,同样是 web 服务,比 Apache 占用更少的内存及资源 ;

高并发,Nginx 处理请求是异步非塞的,而 Apache 则是阻塞型的,在高并发下 Nginx 能保持低资源低消耗高性能;

高度模块化的设计,编写模块相对简单;

社区活跃,各种高性能模块出品迅速。

rewrite,比 Nginx 的 rewrite 强大;

模块超多,基本想到的都可以找到;

少 bug ,Nginx 的 bug相对较多;

超稳定

总结

要性能的 web 服务,用 Nginx ;

Nginx 处理动态请求是弱项;

Nginx 只适合静态和反向。

如果不需要性能只求稳定,那就Apache;

一般动态请求Apache 去做。

(6)Nginx应用场景

表12 Nginx应用场景

序号场景
1静态服务器 (图片、视频服务、文本)
2动态服务
3反向代理, 负载均衡
4缓存服务

(7)同步与异步

同步指的是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。异步的概念和同步相对,当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

508866cd58f240a39a57ec9057c2fa97.png

(8)阻塞与非阻塞

阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式。当数据没有准备的时候,阻塞需要等待调用结果返回之前,进程会被挂起,函数只有在得到结果之后才会返回。非阻塞和阻塞的概念相对,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

74238d590c9b41e2be574fb4f5700bcd.png

(9)通信机制与调用状态

表13 通信机制与调用状态

对比通信机制
同步异步
调用状态阻塞同步阻塞异步阻塞
非阻塞同步非阻塞异步阻塞

(10)kill命令信号

表14 信号编号

信号编号信号名含义
0EXIT程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号
3QUIT退出
9KILL杀死进程,即强制结束进程
11SEGV段错误
15TERM正常结束进程,是 kill 命令的默认信号

 

3.Nginx访问控制

(1)访问状态统计配置

流程:

表15 Nginx访问状态统计

序号

操作关键命令文件
1查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块/usr/local/nginx/sbin/nginx -V  
2修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 80;
        server_name www.kgc.com;
        charset utf-8;
        location / {
            root html;
            index index.html index.php;
        }
        ##添加 stub_status 配置##
        location /status {                     #访问位置为/status
            stub_status on;                 #打开状态统计功能
            access_log off;                 #关闭此位置的日志记录
        }
    }
}
 
 
3重启服务systemctl restart nginx 
4访问测试http://192.168.204.200/status 

①先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块:

eb5ebb2ad6a94f898f370479152f9d7d.png

 ②修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置:

48c1abb99897495fb364f011e701d421.png

编辑文件:

16452b849c424a45af539b560ea06607.png

修改配置

737ea49e05664900a60ea71dcaefcc11.png

 ③ 浏览器访问 http://192.168.204.200/status Active connections :表示当前的活动连接数; server accepts handled requests :表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、 已处理的请求数。

 

4bce51480f72436d90be124efa15dac1.png

刷新页面观察变化

d8e451ed409b40a6bb1dfb3380bf5a61.png

(2)基于授权的访问控制

流程:

表16 Nginx基于授权的访问控制

序号

操作关键命令文件
1生成用户密码认证文件yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db
 
 
2修改主配置文件相对应目录,添加认证配置项vim /usr/local/nginx/conf/nginx.conf
......
    server {
        location / {
            ......
            ##添加认证配置##
            auth_basic "secret";
            auth_basic_user_file /usr/local/nginx/passwd.db;
        }
    }
 
 
3语法验证nginx -t 
4重启服务systemctl restart nginx 
5浏览器访问 http://192.168.204.200 

生成用户密码认证文件

yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db 用户
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

修改主配置文件相对应目录,添加认证配置项

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

① 安装软件

2dd0db29cac848498fdbd73550bbe730.png

② 生成用户密码认证文件

c9cda07e110b4c4cbb5198821fa96dfc.png

③  修改主配置文件相对应目录,添加认证配置项

b2e4c7a27e864959801001a081919e8c.png

④验证

2377d519dbd848809c83b4b1b7145a49.png

⑤ 重启服务

54c53788ecf24e42af40eb9fe291c84f.png

⑥ 访问测试

edb03f24e9404e3ea085d02f3b84ef61.png

登录

7abcfd3c2791444b960cee0556d330a4.png

 

(3)基于客户端的访问控制

流程:

表17 Nginx基于客户端的访问控制

序号

操作关键命令文件
1修改主配置文件相对应目录,添加访问控制规则

vim /usr/local/nginx/conf/nginx.conf
......
    server {
        location / {
            ......
            ##添加控制规则##
            deny 192.168.204.200;                     #拒绝访问的客户端 IP
            allow all;                                #允许其它IP客户端访问
        }
    }

systemctl restart nginx

访问控制规则如下:

deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。

 

修改Nginx的配置文件

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

c37aeeb92ada42c8af9900f70c335e21.png

主机192.168.204.150访问192.168.204.200

 16247254ae21451295cc226690525e6a.png

 

4.Nginx虚拟主机

(1)基于域名的虚拟主机

流程: 

表18 Nginx基于域名的虚拟主机

序号

操作关键命令文件
1为虚拟主机提供域名解析echo "192.168.204.200 www.david.com www.jjw.com" >> /etc/hosts
 
 
2为虚拟主机准备网页文档mkdir -p /var/www/html/david
mkdir -p /var/www/html/jjw
echo "<h1>www.david.com</h1>" > /var/www/html/david/index.html
echo "<h1>www.jjw.com</h1>" > /var/www/html/jjw/index.html
 
3修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 80;
        server_name www.david.com;                    #设置域名www.david.com
        charset utf-8;
        access_log logs/www.david.access.log; 
        location / {
            root /var/www/html/david;                    #设置www.david.com 的工作目录
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }
    
    server {
        listen 80;
        server_name www.jjw.com;                    #设置域名www.jjw.com
        charset utf-8;
        access_log logs/www.jjw.access.log; 
        location / {
            root /var/www/html/jjw;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }    
}

 
4重启服务systemctl restart nginx 
5浏览器访问http://www.david.com
http://www.jjw.com
 

为虚拟主机提供域名解析c19cc0e6fa6a4e149430af9d03fa3d36.png

为虚拟主机准备网页文档

c4c453a5eb41411abd8aaa657141f6a0.png

修改Nginx的配置文件

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

设置域名www.david.com

82e8dd306ee14af9aec97af2d4a60ce4.png

 设置域名www.jjw.com4fd6801356bf47ef8946048aa1780315.png

 

重启服务

b7bf87c088da4e8c89e8b1a70711a566.png

测试

29bb7411834c4d7f995047f9484f4a9d.png

8162502e9d2b4598a23e99b1e6d7604f.png

(2)基于IP的虚拟主机(不同IP相同端口)

流程:

表19 Nginx基于IP的虚拟主机

序号

操作关键命令文件
1添加虚拟网卡ifconfig ens33:0 192.168.204.200 netmask 255.255.255.0  
2修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 192.168.204.200:80;                    #设置监听地址192.204.200.10
        server_name www.david.com;
        charset utf-8;
        access_log logs/www.david.access.log; 
        location / {
            root /var/www/html/david;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }
    
    server {
        listen 192.168.204.12:80;                    #设置监听地址192.168.204.12
        server_name www.jjw.com;
        charset utf-8;
        access_log logs/www.jjw.access.log; 
        location / {
            root /var/www/html/jjw;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }    
}

 
3重启服务
systemctl restart nginx
 
4浏览器访问http://192.168.204.200
http://192.168.204.12
 

添加虚拟网卡

ifconfig ens33:0 192.168.204.200 netmask 255.255.255.0 
vim /usr/local/nginx/conf/nginx.conf

设置域名www.david.com23b9f4577aee42f2924f353530956971.png

设置域名www.jjw.com

0155c4651fad47c8a896e12269926f76.png

 重启服务

b7bf87c088da4e8c89e8b1a70711a566.png

浏览器访问

8eb849730b014713a73d3f7084385739.png

 

7ee0abaec49f4efe8a1220f6534a03ec.png

 

(3)基于端口的虚拟主机(相同IP不同端口)

流程:

表20 Nginx基于端口的虚拟主机

序号

操作关键命令文件
1修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 192.168.204.200:8080;                    #设置监听 8080 端口
        server_name www.david.com;
        charset utf-8;
        access_log logs/www.davd.access.log; 
        location / {
            root /var/www/html/david;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }
    
    server {
        listen 192.168.204.200:8888;                    #设置监听 8888 端口
        server_name www.jjw.com;
        charset utf-8;
        access_log logs/www.jjw.access.log; 
        location / {
            root /var/www/html/jjw;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }    
}

 
2重启服务systemctl restart nginx 
3浏览器访问http://192.168.204.200:8080
http://192.168.204.200:8888
 
 

修改Nginx的配置文件

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

设置域名www.david.com

eae9b1af60a94810bb41efd7f7026c33.png

 设置域名www.jjw.com

c513aa0d0e124624a889773231fc02b6.png

 重启服务

b7bf87c088da4e8c89e8b1a70711a566.png

浏览器访问

b7452dfc332b4d368842d84ad9fd8e01.png

79582e6721cc4d05b1e0f23e0e1c4c92.png

5.PHP

(1)PHP配置文件

表21 PHP配置文件

文件/目录功能
php主配置文件
php.ini进程服务配置文件
www.conf

扩展配置文件

 

 

二、实验

1.LNMP架构+DISCUZ论坛应用

(1)Nginx安装

①流程

表22 Nginx安装流程

序号

操作关键命令文件
1下载Nginx相关安装包➝ 服务器rz -E

nginx-1.12.2.tar

2登录到服务器安装Nginx相关依赖包和函数库

yum -y install pcre-devel \

zlib-devel \

openssl \

openssl-devel \

gcc \

gcc-c++ \

make

gcc功能:预处理、编译、连接、汇编
openssl功能:用于网站加密通讯。
pcre功能:用于支持解析正则表达式。
zlib功能:用于对数据进行解压缩。网站之间通信时,数据先压缩再传输,通过消耗CPU的方式来节省网络带宽
3

创建程序用户管理➝

解压NginxL安装进行安装

useradd -M -s /sbin/nologin nginx

 

cd /opt
tar -zxvf nginx-1.12.2.tar.gz -C /opt/

 
4

编译安装➝切换到Nginx解包路径下➝

安装路径以及模块

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module    
 
5编译安装make -j 16 && make install 
6Nginx服务 可执行程序文件存入路径环境变量的目录中便于系统识别软链接ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/     
7检查语法nginx -t 
8启动服务nginx 
9查看版本nginx -V 
10检查Nginx监听端口netstat -antp | grep nginx
lsof -i:80
 

 

关闭防火墙,将安装Nginx所需软件包传到/opt目录下

cd09616323cc4564afc447534f04114e.png

②下载Nginx相关安装包➝ 服务器

3d85e2adf9924cce8b1b94d694ebe73f.png

③创建程序用户管理➝解压Nginx安装进行安装

2b268e6f39a046e7addba552b30a8262.png

f94ee03f4edf48259a6f129e521caf91.png

④创建运行用户、组

2e2b866c0aa140c5942bd9673f2c4253.png

⑤编译安装➝切换到Nginx解包路径下➝安装路径以及模块

1115c8d080444a2d893430f546c6a0a7.png

⑥编译安装Nginx 路径

454cf56343674ff2b68ca774261146fa.png632408771f2b4f0c899ba414c5293389.png

⑦编译安装

0b0856e466ee469d947c174d9a48189b.png

⑧Nginx服务 可执行程序文件存入路径环境变量的目录中便于系统识别软链接

c961cf38a4b742528649447dd545d1af.png

⑨检查语法

b45b907b54b1419da5caf7f9055dc584.png

⑩查看版本

d809210b53a242438ffaa62d430e8833.png

 

(2)Nginx升级

新版本升级:

表23 Nginx升级流程

序号

操作关键命令文件
1下载Nginx相关安装包➝ 服务器rz -E

nginx-1.22.0.tar

2

 

解压NginxL安装进行安装

cd nginx-1.22.0
tar -zxvf nginx-1.22.0.tar.gz -C /opt/

 
3

编译安装➝切换到Nginx解包路径下➝

安装路径以及模块

./configure \
--prefix=/usr/local/nginx \      
--user=nginx \                  
--group=nginx \               
--with-http_stub_status_module \
--with-http_ssl_module
 
4编译make 
5

备份➝

覆盖

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old

 

cp objs/nginx /usr/local/nginx/sbin/nginx

 
6查看版本nginx -V 

①下载Nginx相关安装包➝ 服务器

94d534d085d34528ad64522788d41838.png

②解压Nginx安装进行安装

tar -zxvf nginx-1.22.0.tar.gz -C /opt/

③编译安装➝切换到Nginx解包路径下➝安装路径以及模块

05f51a246f924d2cb24a09f816663861.png

完成

dc9127ae78804961aaa9fb0798231a8f.png

④编译

eb9196408aa645f19c911abe6bddd656.png

⑤备份

a78dd8ecbdad46e8abcb8619ae4e00fb.png

4255b63a5b5f49b0852c759fc9edc6e8.png

⑥备查看版本

76e57f70c4a943f0ba06bf5b22c87edf.png

⑦监听接口

36e8a75fce9a42edbf56c421f2295cbb.png9af28eea51d94add91f9cb27e2755774.png

 

(2)MySQL安装

流程:

表24 MySQL安装流程

序号

操作关键命令文件
1

下载MySQL相关安装包➝ 服务器

rz -Emysql-boost-5.7.20.tar.gz
2登录到服务器安装MySQL相关依赖包和函数库yum -y install \
ncurses \
ncurses-devel \
bison \
cmake

ncurses 是字符终端下图形互动功能的动态库;

ncurses-devel 是ncurses开发包;

bison 是语法分析器;

cmake 用来编译安装mysql

3

创建程序用户管理➝

解压MySQL安装进行安装

useradd -M -s /sbin/nologin  mysql

 

cd /opt
tar zxvf mysql-boost-5.7.20.tar.gz
 

 
4

编译安装➝切换到MySQL解包路径下➝

安装路径以及模块

cd /opt/mysql-5.7.20/


cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1

DCMAKE_INSTALL_PREFIX指定mysql的安装路径;

DMYSQL_UNIX_ADDR指定mysql进程监听套接字文件(数据库连接文件)的存储路径;

DSYSCONFDIR指定配置文件的存储路径;

DSYSTEMD_PID_DIR指定进程文件的存储路径;

DDEFAULT_CHARSET指定默认使用的字符集编码,如 utf8;

DDEFAULT_COLLATION指定默认使用的字符集校对规则;

DWITH_EXTRA_CHARSETSDWITH_INNOBASE_STORAGE_ENGINE指定支持其他字符集编码;

DWITH_INNOBASE_STORAGE_ENGINE安装INNOBASE存储引擎;

DWITH_ARCHIVE_STORAGE_ENGINE安装ARCHIVE存储引擎;

DWITH_BLACKHOLE_STORAGE_ENGINE安装BLACKHOLE存储引擎 ;

DWITH_PERFSCHEMA_STORAGE_ENGINE安装FEDERATED存储引擎 ;

DMYSQL_DATADIR指定数据库文件的存储路径;

DWITH_BOOST指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost;

DWITH_SYSTEMD生成便于systemctl管理的文件;

5编译安装make -j 16 && make install-j 16 && make installmake -j 16 && make install 
6更改管理主/组 

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

 
7配置MySQL文件➝my.cnf

vim /etc/my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

 
8设置环境变量,申明/宣告MySQL 命令便于系统识别echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
 
9初始化数据库cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
 
 
10

为了启动服务方便,MySQL 启动服务加入到systemd系统管理➝

可使用service或systemctl进行管理

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
 
 
11修改mysql 的登录密码mysqladmin -u root -p password "abc123"
 
 
12授权远程登录mysql -u root -p
 
 

 

①下载MySQL相关安装包➝ 服务器

1e24c83543164c4fa566c935f8fbbf74.png

②安装Mysql环境依赖包

fe6afe37cdae462fbe94f2a462a21749.png

e6de4356ecd54aa9ac6baf82392ffb14.png

③创建程序用户管理➝解压MySQL安装进行安装

4eed725778604137b3692f9e4081f85e.png

tar -zxvf mysql-boost-5.7.20.tar.gz -C /opt

6c8f92a1ecc64f15bc3e9968ede160d0.png

④编译安装➝切换到MySQL解包路径下➝安装路径以及模块

 

 

79715d5104cf4c9faf9eab9e2820ab24.png

cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \

-DSYSCONFDIR=/etc \

-DSYSTEMD_PID_DIR=/usr/local/mysql \

-DDEFAULT_CHARSET=utf8  \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_EXTRA_CHARSETS=all \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \

-DMYSQL_DATADIR=/usr/local/mysql/data \

-DWITH_BOOST=boost \

-DWITH_SYSTEMD=1

745fc702179b435eb349c1cacfe802ab.png

⑤ 编译安装

e0555b3a15644a1e9c15da7403bccaf6.png

6294b84dd44f4a6f967b3668f9f4a9bd.png

⑥配置MySQL文件➝my.cnf

e7f33055b431462b9f1147e861e73941.png

2854090552fb447596f2de8d85642e88.png

⑦ 更改管理主/组

58fc505cd2ce470296db15fcec510b20.png

⑧ 设置环境变量,申明/宣告MySQL 命令便于系统识别

8bb1804adaff4c1483054b158778858d.png

⑨初始化数据库

fce330e39ab94f8f82d5fc0b31654764.png

64a3925b75b749759749c85411deaf84.png

⑩为了启动服务方便,MySQL 启动服务加入到systemd系统管理➝可使用service或systemctl进行管理

5e64739ad62a482e8bb8191337177cb3.png

⑪修改mysql 的登录密码

926a51c2c89b4c6c931c7e70531a8853.png

⑫ 授权远程登录

mysql -u root -p

 

(3)PHP安装

流程:

表25 PHP安装流程

序号

操作关键命令文件
1

下载PHP相关安装包➝ 服务器

rz -Ephp-7.1.10.tar.bz2
2登录到服务器安装PHP相关依赖包和函数库yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
 
安装GD库和GD库关联程序,用来处理和生成图片
3解压PHP安装进行安装cd /opt
tar jxvf php-7.1.10.tar.bz2
 
4

编译安装➝切换到PHP解包路径下➝

安装路径以及模块

cd php-7.1.10


./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

 
5编译安装make -j 16 && make install 
6优化php可执行程序文件存入路径环境变量的目录中便于系统识别软链接ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/
 
 
7

调整主配置文件➝

php.ini

cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini    
vim /usr/local/php/lib/php.ini
 
--1170行--修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
--939行--取消注释,修改
date.timezone = Asia/Shanghai
8验证安装的模块php -m      
9调整进程服务配置文件

php-fpm.conf

cd /usr/local/php/etc/
cp  php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid
10调整扩展配置文件

www.conf

cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
 
 
11启动php-fpm

/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000

 

cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl restart php-fpm.service
 

 
12

配置 Nginx 支持 PHP 解析➝

nginx.conf

vim /usr/local/nginx/conf/nginx.conf--65行--取消注释,修改
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;    #将 /scripts 修改为nginx的工作目录
   #fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;  #$document_root 代表当前请求在root指令中指定的值
    include        fastcgi_params;
}
 
13启动服务systemctl restart nginx.service
 
 
14测试网页vim /usr/local/nginx/html/index.php
<?php
phpinfo();
?>
 
 
15浏览器访问http://192.168.204.200/index.php 
16验证数据库工作是否正常➝新建数据库及用户➝替换原来的测试页内容

mysql -u root -p
CREATE DATABASE bbs;
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;
 

vim /usr/local/nginx/html/index.php           
<?php
$link=mysqli_connect('192.168.204.200','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
 

 
17浏览器访问http://192.168.204.200/index.php 

①下载PHP相关安装包➝ 服务器安装环境依赖包

aacadb171ed54ae2b98f65a4c97d9055.png

②登录到服务器安装PHP相关依赖包和函数库

02e28ee5ff124c30a96964d154c690eb.png

be0fdbfc348744749673a6d73978f585.png

③解压PHP安装进行安装

cd /opt
tar -jxvf php-7.1.10.tar.bz2 -C /opt

④编译安装➝切换到PHP解包路径下➝安装路径以及模块

 

./configure \

--prefix=/usr/local/php \

--with-mysql-sock=/usr/local/mysql/mysql.sock \

--with-mysqli \

--with-zlib \

--with-curl \

--with-gd \

--with-jpeg-dir \

--with-png-dir \

--with-freetype-dir \

--with-openssl \

--enable-fpm \

--enable-mbstring \

--enable-xml \

--enable-session \

--enable-ftp \

--enable-pdo \

--enable-tokenizer \

--enable-zip

9fa379623ba24b4fbbc960fd5bb136b3.png

完成

99b07d48c025456bbe154a743e18fd8e.png

⑤编译安装

8557e76da97d4a00bff9bdf277fc4f06.png

4dc79a33ad634d37ae83fda332b58e5c.png

⑥优化php可执行程序文件存入路径环境变量的目录中便于系统识别软链接

ed73aedb1d8b464a8d01d81c20d7cbba.png

⑦调整主配置文件➝php.ini

f35f8d701a194dc0b54dfe4c9f9407a6.png95e99a4f99344256b6beee7774f5871e.png

--1170行--修改

1026db209e5e41f4bd93c8f008967ff7.png

--939行--取消注释,修改

baa44429b6484a1fa1b889ae9a826666.png

⑧验证安装的模块

8da8ee803b844f308110d018cdf20918.png

⑨调整进程服务配置文件:

d13ebd693109440c96c8573f885de17e.png

84bb5d8bacf14594b20af89dcd89b51c.png

⑩调整扩展配置文件:

ce1525b45897464d9d045ea097227a69.png

⑪启动php-fpm

c695b50851ad46d7a2dc2a3228ed9e3e.png

3f082dfd5a674a5f8e6f87ff5637a0b9.png


⑫配置 Nginx 支持 PHP 解析➝nginx.conf

7e7804d0458e427e86d40498d38c90b8.png

--65行--取消注释,修改

66442080477f44cc98c10db15df10a98.png

 

⑬启动服务

87e4e5f9ee724fa78ee9c73642ef5689.png

⑭验证PHP 测试页

a601a8f0eb474c14b2f0a013f53f1edc.png

427e7ae411e6422f8d5ae4817ec0526e.png

⑮浏览器访问

http://192.168.204.200/index.php

76be99b614ed4aa7a1ddab0a484ebf7d.png

⑯验证数据库工作是否正常➝新建数据库及用户➝替换原来的测试页内容

77dbdf5bf1194cfba7d4cfcebe0a2699.png

编辑              

02d1a82d96a04641a1d09539205198e0.png

⑰ 替换原来的测试页内容

b3d069186b4645fa8cf503a54fc74bed.png

⑱浏览器访问

http://192.168.204.200/index.php

eded5d57a419416ea5f682774d2c9300.png

 

(4)论坛安装

流程:

表26 DISCUZ安装流程

序号

操作关键命令文件
1创建一个数据库

mysql -u root -p 

mysql> CREATE DATABASE bbs;

mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';

mysql>flush privileges; 

把bbs数据库里面所有表的权限授予给bbsuser,并设置密码;

刷新数据库;

2

下载

 DISCUZ相关安装包➝ 服务器

rz -EDiscuz_X3.4_SC_UTF8.zip
3

解压

 DISCUZ安装进行安装

unzip Discuz_X3.4_SC_UTF8.zip -d /opt/dis 
4上传站点更新包

cd /opt/dis

cp -r upload/ /usr/local/httpd/htdocs/bbs

 
5更改管理主/组

cd /usr/local/httpd/htdocs/bbs

chown 777 daemon ./config
chown 777 daemon ./data
chown 777 daemon ./uc_client
chown -R daemon ./uc_server/data

 
6准备数据库配置

数据库服务器: localhost 
数据库名字: bbs
数据库用户名: bbsuser
数据库密码: admin123
管理员账号: admin
管理员密码: admin123

本地架设就用localhost,如何不是在在本机上就要填写IP地址和端口号
7访问论坛http://192.168.204.200/bbs/install/index.php 

①创建一个数据库

77dbdf5bf1194cfba7d4cfcebe0a2699.png

②下载DISCUZ相关安装包➝ 服务器

0728f09503c1460d9ebb516762f59775.png

③解压 DISCUZ安装进行安装

0fcf95adc50c4578877c500b25834230.png

④上传站点更新包

bacdfc0429f748b7abfe756ab5c27621.png

⑤更改管理主/组

b42f5d4a49fe44a583d9915897fe959e.png

b988579b34c54b26b51b99f6bc063707.png

⑥准备数据库配置

数据库服务器: localhost  
数据库名字: bbs
数据库用户名: bbsuser
数据库密码: admin123
管理员账号: admin
管理员密码: admin123

⑦访问论坛

安装向导-同意

3225dca311ae4fc4b1ca215c72b4153f.png

安装向导-开始安装

2790bd56fd294f268a44f76759a1370c.png

安装向导-设置运行环境

690961f53edb41a9bfb7df37e75fb53d.png

安装向导-安装数据库

7bd6196bba124056a55248f908cb40a1.png

 安装向导-完成

9f5052ed30c44138a4e5df0b26f4fe54.png

0080abc6a9b142f9814d6f2d327c8c5c.png

进入论坛,登录管理员用户

94d880f3fd974408a0cb16f6eab1972b.png

(5)fpm参数优化

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

pid = run/php-fpm.pid

c8a53167f2f54fbca6dcbfbb66c42d8c.png

fpm进程启动方式,动态的

2948c90b5dd44dd6b6fd74b53f969077.png

fpm进程启动的最大进程数

036e88d5de8e467dbea9f977ca5088ba.png

动态方式下启动时默认开启的进程数,在最小和最大之间

b7f48b44b4f646a2862195289e87a736.png

动态方式下最小空闲进程数

90fabf0313534ed0b39b6ce6bf7c32fe.png

动态方式下最大空闲进程数

f7623ce0c30b4a4ba59f7a1120f2d556.png

重启php-fpm 并监听端口

4d68029acb3947208da0e5346bd0afb2.png

 

 

三、问题

1.没有规则可以创建“default”需要的目标“build”。

原因分析:缺依赖安装包

e170d19ecf084b0abf35094800261ddb.png

 解决方法:

安装Nginx所需的依赖安装包:

gcc功能:预处理、编译、连接、汇编
openssl功能:用于网站加密通讯。
pcre功能:用于支持解析正则表达式。
zlib功能:用于对数据进行解压缩。网站之间通信时,数据先压缩再传输,通过消耗CPU的方式来节省网络带宽

yum -y install pcre-devel zlib-devel openssl openssl-devel gcc gcc-c++ make

2.nginx重启报错

问题环境:

软件

版本
Centos7
nginx1.22.0

​systemctl restart nginx 重启报错

548e29f1ffb5441280c76b7fbde47ff6.png

原因分析:

查看​/lib/systemd/system/nginx.service​​的内容,里面是​​kill​​​了服务,但是实际会导致​​pid​​文件被删除,但是服务还存留,所以重启失败。

ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

解决方法:

(1)最快的方式是停掉nginx服务,然后启动nginx。

ps -ef|grep nginx|grep -v grep|awk '{print $2}'|xargs kill -9  /usr/local/nginx/sbin/nginx

(2)修改​​/lib/systemd/system/nginx.service​​​的内容,调整​​ExecReload​​​和​​ExecStop​​,调整后内容如下:

ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit

(3)然后重新加载​​systemd​​

systemctl daemon-reload

(4)启动成功

152457c11cd146bcad49dbf36fe4bf60.png

3.yum安装提示报错

问题环境:

软件

版本
Centos7
yum 

原因分析:

“Another app is currently holding the yum lock; waiting for it to exit...”报错:

有一个应用程序正在锁定yum,等待退出

f77ba8879ffc4a9080c544c42d697e08.png

 解决方法:

(1)杀掉这个应用程序

92528f1890f641da856fa16e6e8dccbb.png

kill -s 9 13806

 (2)制关掉yum进程,并重新运行yum

db6f9ae1c9df47fb8fa32d9a57a47971.png

 然后重新运行yum命令即可

4.配置文件报错

问题环境:

软件

版本
Centos7
nginx1.22.0

(1)原因分析:

nginx: [emerg] unexpected "}" in /usr/local/nginx/conf/nginx.conf:53

53行 “}”附近有语法错误,缺少分号“;”

8321a71bf0d24c51824d056b68335510.png

 解决方法:

修改配置文件

4617388bb92e4d38a367075e6b0e35ea.png

(2)原因分析:

nginx: [emerg] "server" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:130

130行sever块不允许放置在这

40d2e3e364cf4cce8fb6b5ae92606566.png

 解决方法:

sever块放置在http块内

1379e2dbb66547cf8a33baa10d96eed2.png

(3) 原因分析:

nginx: [emerg] bind() to 192.168.204.100:80 failed (99: Cannot assign requested address)

不能解析地址

6bd48f929b104eaba1ddbf0a19e0cc21.png

af8b8f0fea024f54a10ccc5a493ccc3b.png

 解决方法:

修改地址

 ae1fbfbc10364d2d94d819c1450bc9a9.png

5.PHP页面无法打开

(1)原因分析:

 Nginx 配置文件未支持 PHP 解析

839b6085c950477a9c6707dbcd5b928e.png

 

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

(2)解决方法:

将 /scripts 修改为nginx的工作目录

535e972c97f04e5f9c45773b863168fb.png

 be9bd850a30d44d1bd81fd264fa6aee1.png

 

 

四、总结

LNMP平台是高效稳定的Web应用平台,LNMP架构结合了Linux操作系统的稳定性、Nginx服务器的高性能、MySQL数据库的可靠性和PHP语言的灵活性,被广泛应用于Web开发和部署。

Web服务器需要性能的用 Nginx ,不需要性能只求稳定用Apache。Nginx 处理动态请求是弱项,一般动态请求要 Apache 去做,Nginx 只适合静态和反向。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/31245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

菲涅尔圆孔衍射matlab完整程序分享

根据惠更斯 &#xff0d; 菲涅耳原理&#xff0c;光的衍射是光束内部的次波之间的相干叠加&#xff0c;衍射光波场的光振动符合菲涅耳积分公式。但直接运用菲涅耳积分公式计算衍射光场是很困难的。对于夫琅和费衍射(远场衍射)&#xff0c;在光源和接收屏距离衍射屏均为无穷远的…

【C++】内存管理、new和delete操作类型、operator new和operator delete函数、new和delete的实现原理

文章目录 1.C/C内存管理2.C语言的内存管理方式3.C内存管理方式3.1 new和delete操作内置类型3.2 new和delete操作自定义类型 4.operator new与operator delete函数5.new和delete的实现原理5.1内置类型5.2 自定义类型 1.C/C内存管理 在C/C中&#xff0c;内存管理是程序员负责管理…

TCP 学习笔记

Win R 打开控制台输入CMD 打开小黑窗&#xff0c; 输入ipconfig 查询本机地址 “外网IP是全世界唯一的IP地址,仅分配给一个网络设备。而内网IP是由路由器分配给每一部内部使用的IP地址,而内网的所有用户都是通过同一个外网IP地址进行上网的,而内网的IP地址每个人的都不一样…

SQL 基础语句

SQL 基础语句 DDL Data Definition Language 数据定义语言创建 create删除 drop修改 alter清空 truncate show tables ; --查看所有表&#xff1a; drop database db1; --删除数据库 create database db1 default character set utf8; --创建数据库 use databas…

十大基础算法

一、选择排序 过程简单描述&#xff1a; 首先&#xff0c;找到数组中最小的那个元素&#xff0c;其次&#xff0c;将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次&#xff0c;在剩下的元素中找到最小的元素&#xff0c;将它与数组的第二…

C++【STL】之priority_queue学习

优先级队列 优先级队列priority_queue也是STL库中容器适配器的一种&#xff0c;常用于进行数据优先级的处理&#xff0c;说到这儿是不是发现有些熟悉&#xff0c;没错它和我们之前讲解的堆本质上就是一个东西&#xff0c;底层都是数组存储的完全二叉树&#xff0c;它在STL库中…

设计模式(二十二):行为型之备忘录模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

华为OD机试真题 JavaScript 实现【最短木板长度】【2022Q4 100分】,附详细解题思路

一、题目描述 小明有 n 块木板&#xff0c;第 i ( 1 ≤ i ≤ n ) 块木板长度为 ai。 小明买了一块长度为 m 的木料&#xff0c;这块木料可以切割成任意块&#xff0c;拼接到已有的木板上&#xff0c;用来加长木板。 小明想让最短的木板尽量长。 请问小明加长木板后&#xff0c…

Android12之执行adb disable-verity后android无法启动(一百五十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

前沿应用丨大规模无人机集群与“虚实结合”半实物仿真系统

一、应用背景 无人机集群在军事、安全、救援、航空监测、物流配送等领域具有广泛的应用前景。它可以提高任务执行的效率、灵活性和安全性&#xff0c;同时降低人力资源的需求和风险&#xff0c;无人机集群研究涉及多个学科领域&#xff0c;如机器人学、控制理论、通信技术和人工…

Verilog | 基4 booth乘法器

上接乘法器介绍 原理 跟基2的算法一样&#xff0c;假设A和B是乘数和被乘数&#xff0c;且有&#xff1a; A ( a 2 n 1 a 2 n ) a 2 n − 1 a 2 n − 2 … a 1 a 0 ( a − 1 ) B b 2 n − 1 b 2 n − 2 … b 1 b 0 \begin{align}A&(a_{2n1}a_{2n})a_{2n−1}a_{2n−2}……

【ARIMA-LSTM】合差分自回归移动平均方法-长短期记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基于Nginx1.22+PHP8+MySQL8安装Discuz! X3.5

基于Nginx1.22PHP8MySQL8安装Discuz! X3.5 1. 安装PHP82. 安装MySQL83. 配置Nginx1.224. 安装Discuz! X3.5 1. 安装PHP8 更新系统&#xff1a; yum update安装EPEL存储库&#xff1a; yum install epel-release安装Remi存储库&#xff08;提供了最新的 PHP 版本&#xff09;&…

阿里云主机详解:ECS/轻量/虚拟主机/GPU/裸金属/云电脑详解

阿里云云主机分为云虚拟主机、云服务器ECS、轻量应用服务器、GPU云服务器、弹性裸金属服务器、专有宿主机、FPGA云服务器、高性能计算E-HPC、无影云电脑等&#xff0c;阿里云百科来详细说下阿里云云主机详解&#xff1a; 目录 阿里云云主机 云服务器ECS 轻量应用服务器 云…

python数字猜谜2.0

改进了一下数字猜谜&#xff1a; 开头&#xff0c;可选等级&#xff1a; import random guess -1 c 0 print("数字猜谜游戏&#xff01;") n input("选择等级 A B C&#xff1a;") if (n "A") or (n "a"):guess random.randint…

学习css样式的第二章

1.CSS 布局 - display 属性 display 属性是用于控制布局的最重要的 CSS 属性。 display 属性 display 属性规定是否/如何显示元素。 每个 HTML 元素都有一个默认的 display 值&#xff0c;具体取决于它的元素类型。大多数元素的默认 display 值为 block 或 inline 块级元素…

JavaEE课程设计——校园招聘管理系统(vue框架分析)

目录 Vue架构 登录 Vue架构 前端执行命令 npm run serve 这是整个前端的目录结构 vue.config.js是对前端vue的一个配置&#xff0c; // var webpack require(webpack); const path require(path)function resolve(dir) {return path.join(__dirname, dir) }function pu…

centos下的Nginx的安装

1.Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。其特点是占有内存少&#xff0c;并发能力强。 其他服务器介绍&#xff1a;Apache服务器、Tomcat服务器、Lighttpd服务器 2.nginx依赖安装 yum -y instal…

【数据分享】1929-2022年全球站点的逐月平均海平面压力数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…

Opencv-C++笔记 (9) : opencv-多通道分离和合并

文章目录 一、概论二、多通道分离函数split()三、多通道合并函数merge()四、图像多通道分离与合并例程 一、概论 在图像颜色模型中不同的分量存放在不同的通道中&#xff0c;如果我们只需要颜色模型的某一个分量&#xff0c;例如只需要处理RGB图像中的红色通道&#xff0c;可以…