LNMP 是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L 指 Linux,N指 Nginx,M一般指 MySQL,也可以指 MariaDB,P 一般指 PHP,也可以指 Perl 或 Python。
LNMP 代表的就是:Linux 系统下 Nginx+MySQL+PHP 这种网站服务器架构。
代表版本有:Debian、CentOS、Ubuntu、Fedora、Gentoo 等。
四种软件均为 免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP 代理服务器对外进行服务。
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx 支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
**第一步:**用户在浏览器输入 域名或者IP 访问网站
第二步:用户在访问网站的时候,向 Web 服务器 发出 http request 请求,服务器响应并处理 Web 请求,返回静态网页资源,如 CSS、Picture、Video 等,然后缓存在用户主机上。
第三步:服务器调用动态资源,PHP 脚本调用 fastCGI 传输给 php-fpm,然后 php-fpm 调用 PHP 解释器进程解析 PHP 脚本。
第四步:出现大流量高并发情况,PHP 解析器也可以开启多进程处理高并发,将解析后的脚本返回给 php-fpm,然后 php-fpm 再调给 Fast-cgi 将脚本解析信息传送给 Nginx,服务器再通过 http response 传送给用户浏览器。
第五步:浏览器再将服务器传送的信息进行解析与渲染,呈现给用户。
CGI 全称 “通用网关接口”(Common Gateway Interface),用于 HTTP 服务器与其它机器上的程序服务通信交流的一种工具,CGI 程序须运行在网络服务器上。
传统 CGI 接口方式的主要缺点是性能较差,因为每次 HTTP 服务器遇到动态程序时都需要重启解析器来执行解析,然后结果被返回给 HTTP 服务器。这在处理高并发访问几乎是不可用的,因此就诞生了 FastCGI。另外传统的 CGI 接口方式安全性也很差。
FastCGI 是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(FastCGI接口在 Linux 下是socket(可以是文件socket,也可以是ip socket)),主要优点是把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache、Nginx和lightpd。
同时,FastCGI 也被许多脚本语言所支持,比较流行的脚本语言之一为PHP。FastCGI接口方式采用C/S架构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程执行,然后将得到的结构返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
FastCGI 的重要特点:
Nginx 不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
FastCGI 接口在 Linux 下是 socket(可以是文件 socket,也可以是 ip socket)。为了调用CGI程序,还需要一个FastCGI 的 wrapper,这个 wrapper 绑定在某个固定 socket 上,如端口或者文件 socket。
当Nginx将CGI请求发送给这个socket的时候,通过 FastCGI 接口,wrapper 接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI 接口,沿着固定的 socket 传递给 Nginx;最后,Nginx 将返回的数据发送给客户端,这就是Nginx+FastCGI 的整个运作过程。
FastCGI 的主要优点是把动态语言和 HTTP 服务器分离开来,是 Nginx 专一处理静态请求和向后转发动态请求,而 PHP/PHP-FPM 服务器专一解析PHP动态请求。
环境说明:
系统 | 主机名 | IP | 服务 |
---|---|---|---|
CentOS7 | Web01 | 10.0.59.114 | NGINX、PHP、WordPress |
CentOS7 | MySQL | 10.0.59.115 | MySQL |
《 LNMP + WordPress 部署 》 1. Nginx 服务部署: 1.1 配置 nginx 官方 yum 源 vim /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key 1.2 基于 yum 安装 nginx 软件 yum install -y nginx 1.3 启动 nginx 服务, 检查服务是否正常启用 systemctl start nginx systemctl enable nginx systemctl status nginx 1.4 关闭防火墙 and SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 1.5 基于 Web 访问验证 nginx 服务 '出现 Welcome to nginx! 则成功访问到 Nginx 资源' 1.6 修改 nginx 进程所有者 useradd -s /sbin/nologin -M www vim /etc/nginx/nginx.conf user www; systemctl reload nginx
2. Mysql 服务安装: 2.1 安装数据库软件 < '也可以部署在 Web01 同机器' > yum install mariadb-server mariadb -y 2.2 启动数据库服务 systemctl start mariadb.service systemctl enable mariadb.service systemctl status mariadb.service 2.3 给 MySQL 数据库服务设置密码 mysqladmin -u root password 'P@ssw0rd123456' # 设置 MySQL 数据库服务密码 2.4 验证 mysql -u root -pP@ssw0rd123456
3. PHP 服务部署: 3.1 更新 yum 源/卸载系统自带的 PHP 软件 yum remove php-mysql php php-fpm php-common rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 3.2 安装 PHP 软件 yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb 3.3 编写配置文件 vim /etc/php-fpm.d/www.conf 8 user = www # 第八行 10 group = ww # 第十行 PS: 保证 nginx 进程的管理用户和 PHP 服务进程的管理用户保持一致 3.4 启动 PHP 服务 systemctl start php-fpm systemctl enable php-fpm systemctl status php-fpm 4. 实现 LNMP 之间建立联系 1. 实现 nginx + php 建立关系 1.1 编写 nginx 文件 // 编写 nginx 配置文件 vim /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { # 把下面所有注释取消 root /usr/share/nginx/html; # 修改站点目录 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 修改配置 include fastcgi_params; } } // 重启 nginx 服务 nginx -t systemctl restart nginx 1.2 编写动态资源文件 [root@web01 conf.d] vim /usr/share/nginx/html/test.php 1.3 基于 Web 访问验证 http://10.0.59.114/test.php
2. 部署搭建网站页面 2.1 将代码解压, 将解压后信息放入到站点目录中 [root@web01 ~] cd /usr/share/nginx/html && wget https://cn.wordpress.org/latest-zh_CN.zip [root@web01 html] unzip wordpress-6.3.2-zh_CN.zip 50x.html index.html test_php.php wordpress 2.2 编辑 nginx 配置文件, 修改站点目录 vim /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; location / { root /usr/share/nginx/html/wordpress; # 修改站点目录 index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { root /usr/share/nginx/html/wordpress; # 修改站点目录 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } // 重新加载 nginx [root@web01 html] nginx -t [root@web01 html] systemctl reload nginx 2.3 修改站点目录权限 [root@web01 html] chown -R www.www wordpress/ 2.4 对数据库服务进行配置 [root@web01 html] mysql -uroot -pP@ssw0rd123456 创建数据库: create database wordpress; 检查: show databases; 创建数据库管理用户: grant all on wordpress.* to 'wordpress'@'%' identified by 'P@ssw0rd123456'; 刷新数据库: flush privileges; 检查: select user,host from mysql.user; 2.5 登录网页, 初始化配置
访问:http://10.0.59.114/
填写 数据库信息
运行 安装程序
填写 站点信息
完成
管理后台
大功告成~