7.LAMPLNMP 最佳实践

7.LAMP/LNMP 最佳实践

LAMP/LNMP 组件

LAMPL inux+A pache+M ysql/M ariadb+P HP/P ython/Perl。

LNMPL inux+N ginx+M ysql/M ariadb+P HP/P ython/Perl。

  • Linux:操作系统,提供程序运行基础。
  • A pache/Nginx:Web 服务器,提供网页访问。
  • M ysql/Mariadb:数据库,提供数据管理。
  • P HP/P ython/Perl:脚本语言,提供动态执行生成。

PHP FastCGI 进程管理器,是PHP的一个扩展模块,用于管理PHP 进程池的软件,用于接受web服务器的请求。PHP-FPM 全名 PHP FastCGI Process Manager,作为FastCGI进程管理器,与Web服务器(例如Nginx、Apache等)配合使用。

PHP-FPM的主要功能是管理和调度PHP脚本的执行。它通过创建和管理PHP进程池来处理PHP请求。每个PHP进程池中运行多个PHP-FPM进程,每个进程可以处理一个或多个PHP请求。PHP-FPM会根据配置的参数来管理这些进程的数量、生命周期和资源分配。

PHP-FPM提供了一些高级功能,例如进程池的动态调整、请求限制和超时控制、进程重生、日志记录等。它还支持基于Unix域套接字或TCP/IP套接字的进程间通信,以及基于文件和共享内存的进程管理。

LAMP/LNMP 工作原理

  1. 客户端通过HTTP协议请求web服务器资源

  2. web 服务器根据资源类型进行处理:

    • 静态资源:web直接把资源返回至客户端。

    • 动态资源:通过指定的通讯方式将脚本网页交给后端程序执行。如果运算期间需要连接mysql数据库,则通过mysql连接器连接mysql。后端程序将运算结果返回给web服务。

  3. web服务将结果返回给客户端。

PHP 与 WEB 协同工作模式

PHP 与 WEB 协同工作模式:

  1. CGI:Web 进程动态调用相应脚本解释器执行动态页面 ,执行完后再释放。特点:性能差。
  2. Modules:Web 进程动态加载相应模块执行动态页面 。特点:性能较好。
  3. FastCGI:后端进程独立运行管理,通过独立的网络套接字接口接收Web进程传过来的请求。特点:真正地实现前后端分离。适合于性能要求比较高的场景。Web 服务器需要开启反向代理功能,将请求转发到后端服务器。

Standalone

预配置

所有节点配置名称解析:

bash 复制代码
[root@nfs ~ 10:55:56]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.8.21 www.zhang.cloud www
10.1.8.22 php.zhang.cloud php
10.1.8.23 db.zhang.cloud db
10.1.8.24 nfs.zhang.cloud nfs

部署存储服务器

由于静态文件和动态文件没有分开,所以 Web 服务器和 PHP 服务器都要存一份。实验环境通过NFS共享提供wordpress应用。

下载 wordpress,上传到家目录。部署 nfs 服务器

bash 复制代码
[root@nfs ~]# yum install -y nfs-utils
[root@nfs ~]# mkdir /www

#/etc/exports主要配置文件
[root@nfs ~]# echo '/www 10.1.8.0/24(rw)' > /etc/exports
[root@nfs ~]# systemctl enable nfs-server.service --now

# 准备 wordpress资源
[root@nfs ~]# unzip -o wordpress-4.9.4-zh_CN.zip -d /www/

# 准备网页测试文件
[root@nfs ~]# echo 'Hello World !' > /www/index.html
[root@nfs ~]# cat > /www/index.php <<EOF
<?php
  echo "<h1>Hello World !</h1>\n";
?>
EOF

[root@nfs ~]# cat > /www/test-mysql.php <<'EOF'
<?php
  $link=mysqli_connect('db.zhang.cloud','wordpress','123');
  if($link)
    echo "<h1>Connect Mysql Success !</h1>\n";
  else
    echo "<h1>Connect Mysql Failed !</h1>\n";
  $link->close();
?>
EOF

[root@nfs ~]# cat > /www/info.php <<EOF
<?php
  phpinfo();
?>
EOF

# 通过查询www服务器,获知nginx账户信息
[root@www ~ ]# grep nginx /etc/passwd
nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin

[root@nfs ~]# chown -R 998 /www

部署 db 服务器

bash 复制代码
[root@db ~]# yum install -y mariadb-server
[root@db ~]# systemctl enable mariadb --now

# 加固 MariaDB
[root@blog ~]# mysql_secure_installation
# 交互式提示您进行更改,包括: 
# - 为root帐户设置密码,例如redhat。 
# - 禁止root帐户从本地主机外部访问数据库。
# - 删除匿名用户帐户。
# - 删除用于演示的test数据库。 

# 准备wordpress数据库和用户
[root@db ~]# mysql -uroot -predhat
mysql> CREATE DATABASE wordpress;
mysql> CREATE USER wordpress@'%' identified by '123';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit

部署 Nginx 服务器

bash 复制代码
# 部署 Nginx 服务
[root@www ~]# yum install -y nginx
[root@www ~]# systemctl enable nginx --now

# 安装 nfs 工具
[root@www ~]# yum install -y nfs-utils

# 挂载存储
[root@www ~]# echo 'nfs.zhang.cloud:/www /usr/share/nginx/html nfs defaults 0 0' >> /etc/fstab 
[root@www ~]# mount /usr/share/nginx/html/
[root@www ~]# df -h /usr/share/nginx/html/
Filesystem            Size  Used Avail Use% Mounted on
nfs.zhang.cloud:/www   64G  3.2G   61G   5% /usr/share/nginx/html
[root@www ~]# ls /usr/share/nginx/html/
index.html  index.php  info.php  test-mysql.php  wordpress

部署 PHP 服务器

部署 php 服务

bash 复制代码
[root@php ~]# echo 'nginx:x:997:996:Nginx web server:/var/lib/nginx:/sbin/nologin' >> /etc/passwd
[root@php ~]# groupadd -g 996 nginx

[root@php ~]# yum install -y php php-fpm php-mysqlnd
[root@php ~]# vim /etc/php-fpm.d/www.conf
bash 复制代码
#使用;号注释掉原有listen行
;listen = 127.0.0.1:9000
# 新增listen 监听所有ip的9000端口
listen = 9000
# 支持监听特定ip的9000端口,例如listen = 10.1.8.22:9000

# 使用;号注释掉原有 listen.allowed_clients 行
# 允许所有客户端访问
;listen.allowed_clients = 127.0.0.1

# 设置运行用户
user = nginx
group = nginx

[root@php ~]# systemctl enable php-fpm.service --now

挂载存储

bash 复制代码
# 安装 nfs 工具
[root@php ~]# yum install -y nfs-utils

# 挂载存储
[root@php ~]# echo 'nfs.zhang.cloud:/www /www nfs defaults 0 0' >> /etc/fstab 
[root@php ~]# mkdir /www
[root@php ~]# mount /www
[root@php ~]# df -h /www
Filesystem            Size  Used Avail Use% Mounted on
nfs.zhang.cloud:/www   64G  3.2G   61G   5% /www
[root@php ~]# ls /www
index.html  index.php  info.php  test-mysql.php  wordpress

php 程序测试

bash 复制代码
[root@php ~]# php /www/index.php
<h1>Hello World !</h1>

[root@php ~]# php /www/test-mysql.php
<h1>Connect Mysql Success !</h1>

# 执行 info.php 的输出内容太多,这里省略。

配置 Nginx 对接 PHP

bash 复制代码
[root@www ~]# cat > /etc/nginx/conf.d/vhost-www.conf <<'EOF'
server {
    listen 80;
    server_name www.zhang.cloud;

    # 静态资源处理
    location / {
        root /usr/share/nginx/html;
        index index.html index.htm index.php;
    }

    # PHP 请求处理
    location ~ \.php$ {
        # 配置 PHP-FPM 监听的地址和端口
        fastcgi_pass php.zhang.cloud:9000;
        fastcgi_index index.php;
        # 配置 php 服务器上 wordpress 应用所在位置
        fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
        include fastcgi_params;
    }
}
EOF

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

测试应用

客户端配置 www.zhang.cloud 名称解析。访问http://10.1.8.21/wordpress/。

相关推荐
码码宁1 小时前
六个故事搞懂Fragment 故事1-初识Fragment - NewsHub的模块化革命
android
成都大菠萝1 小时前
Android Auto开发(0)-引言
android
q***33372 小时前
SpringMVC新版本踩坑[已解决]
android·前端·后端
F***74172 小时前
数据库课设---酒店管理系统(MySQL、VBNet)
android·数据库·mysql
踢球的打工仔2 小时前
PHP面向对象(5)
android·java·php
zhaoyufei13314 小时前
Android13删除Taskbar
android
6***B4815 小时前
存储过程(SQL)
android·数据库·sql
学困昇17 小时前
C++中的异常
android·java·c++
Jerry17 小时前
问题记录 - Android IdleHandler 没有执行
android