其他分享
首页 > 其他分享> > LNMP(5)

LNMP(5)

作者:互联网

目录

一、实战

systemctl centos7
ipaddress 192.168.80.2
wordpress-verison wordpress-5.3.2-zh_CN
php-version 7.1
nginx-version yum安装-官方最新
//统一用户www,提前创建
groupadd -g 666 www;
useradd -u 666 -g 666 -M -s /sbin/nologin www;

1、安装

安装nginx

//用官方的yum源
[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
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

//安装
yum -y install nginx

//更改主配置文件的启动用户
[root@nginx conf.d]# vim /etc/nginx/nginx.conf 
user  www;

//编写站点文件
[root@nginx conf.d]# vim default.conf 
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /code;
        index  index.php;
    }
 location ~ \.php$ {
                root /code;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass 127.0.0.1:9000;
                include fastcgi_params;
                }
}

//创建站点目录
mkdir /code


//上传wordpress-5.3.2-zh_CN,unzip解压到/code目录
[root@nginx code]# mv wordpress/* ./

//更改权限
[root@nginx code]# chown -R www:www  /code

//启动
systemctl start nginx
systemctl enable nginx

//检查
ss -tnlp | grep 80
ps aux | grep nginx

数据库

//安装启动,设置密码
yum -y install mariadb-server mariadb
systemctl start mariadb
mysql_secure_installation  #初始化并设置密码

//创建wordpress数据库
create database wordpress;

//创建wordpress用户对wordpress数据库的授权
grant ALL on wordpress.* to wordpress@'localhost' identified by 'cba-123'; 

php

腾讯云提供的方法(亲测好用):

rpm -Uvh https://mirrors.cloud.tencent.com/epel/epel-release-latest-7.noarch.rpm 
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

yum -y install php70w php70w-opcache php70w-mbstring php70w-gd php70w-xml php70w-pear php70w-fpm php70w-mysql php70w-pdo

//编写配置谁的,保证nginx进程和php进程的用户一致
vim /etc/php-fpm.d/www.conf
user = www group=www

//启动进程
systemctl start php-fpm

//ps -aux 检查
ss -tnlp | grep 9000

老男孩教育提供方法(使用之后,wordpress不正常,样式丢失)

//卸载旧的php
yum remove php-mysql php php-fpm php-common

//使用专用的php源
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

//开始安装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

//编写配置谁的,保证nginx进程和php进程的用户一致
vim /etc/php-fpm.d/www.conf
user = www  nginx=www group=www

//启动进程
systemctl start php-fpm

//ps -aux 检查
ss -tnlp | grep 9000

wordpress

在浏览器上通过ip地址即可访问

管理URL:http://192.168.80.2/wp-admin/

2、三者建立联系

nginx和php建立联系

[root@web01 conf.d]# cat default.conf 
server {
    listen       80;
    server_name  www.zhanghe.com;
    location / {               
        root   /code;
        index  index.html index.htm;
    }
    location ~ \.php$ {     #匹配php结尾的文件,通过cgi接口交给php
                root /code;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  #重点,携带完整的URL
                fastcgi_pass 127.0.0.1:9000;   #交给php
                include fastcgi_params;   #变量所在的文件,与上面fastcgi相配合
                }
}
systemctl restart nginx
mkdir /code
cd /code
    vim index.php
        <?php
        phpinfo();
        ?>

192.168.80.2/index.php访问时会打印一个紫色的表格

 php与mariadb建立关系

[root@nginx code]# pwd
/code
[root@nginx code]# cat index.php 
<?php
$servername = "localhost";
$username = "root";
$password = "cba-123";

$conn = mysqli_connect($servername,$username,$password);
if ($conn) {
    echo "mysql successful by root !\n";
    }else{
    die("connection failed:" .mysqli_connect_error());
}
?>

访问: http://192.168.80.2/index.php ,结果如果成功了就会提示:“ mysql successful by root ! ”

二、理论

静态和动态

怎样理解这个静态呢?HTTPD程序接入到客户端的请求之后就是把客户端要请求的内容返回给客户端,其它的事情都没有做,只是做了I/0,内容没有发生改变,这就是静态资源。

web应用与php

httpd收到用户的请求之后,通过httpd的过滤功能(通常是后缀扩展名)可以区分出客户端请求的是静态资源还是动态资源,如果客户端请求的是静态资源的话(比如是html结尾的文件),httpd自己就可以发起系统调用完成响应;如果httpd识别出客户端请求的资源是一个以php或者.sh结尾的文件呢?httpd本身是无能无力的,它总不能把这个php结尾的源码文件发送给客户端吧,但是httpd程序有自己又不能执行php的文件,所以httpd需要与php解释器进行联动让php解释器把客户请求的程序执行一次,然后把结果返回给httpd进程,然后httpd进程再封装返回给客户端。那么httpdphp解释器是两个程序,那么怎样联动呢?

httpdphp解释器是两个不同的程序,就像两个说不同语言的人,相互谁也不理解谁,它们两个要想联动的话,就必须有统一的“交流语言”,这种情况在计算机的领域是非常常见的,都是使用协议来解决的,httpdphp之间都运行cgi协议,所谓的cgi协议就是“通用网关接口”,httpd可以通过加载一个模块来支持此协议,而php也是基于此协议来开发的,所以它们之间是可以相互交流的。

httpdphp在交流时的过程是这样的:

  1. httpd把客户端发过来动态资源请求通过cgi协议封装成请求包发送给php解释器

  2. php解释器收到之后会通过系统调用,然后IO,运行并处理引用户的动态资源,并通过数据流把结果发送给httpd程序,在这里需要注意,httpd加载静态资源的时候虽然加载的也是一个文件,但是实际就是一段数据流而已,当httpd收到来自php的响应报文时,收到的实际上也中是一段数据流,文件只是我们凭空想像出来的。

  3. httpd程序然后进行封装之后响应给客户端

总结

httpd像是客户端向php(服务器)发送请求,php做为服务器进行回应,httpd活生生像一个客户端!

换个角度再看,httpd就像是一个代理,对于动态资源的请求仅做一个转发作用,httpd活生生像一个代理!

php与mysql

php与数据库系统进行联动

php与数据库也是八竿子打不着的两个程序,它们怎样才一起联动呢?在这里并没有使用协议来解决这个问题,而是使用库调用来解决这个问题的。假设以php与mysql进行联动来说明吧!

php程序本身的确无法与mysql进行联动,php还需要加载一个驱动模板,这个驱动模块可能叫做php-mysql,如果数据库是甲骨文数据库,那么php要调用 php-甲骨文模块进行调用才与与甲骨文进行联动,因为php只有通过这个模块向相应的数据库系统发送的数据相应的数据库才能看懂,所以在安装php的时候,不要忘记安装这样一个驱动模块。

[root@www init.d]# yum list all | grep php-mysql
php-mysql.x86_64   #这个就是php与mysql交互的驱动模块

它们之间的关系也类似于客户端与服务器的关系,php向mysql请求,而mysql对php进行回应。

  1. 当客户端通过http协议向apache发来请求

    如果是静态资源,直接发起系统调用

    如果是动态资源,通过php模块/cgi/fastcgi任意一种方式发请求包交给php

  2. 当php收到之后apache的请求之后:

    如果所请求的资源都存储在硬盘上,那么php直接发起系统调用,将文件调用到内存并执行,执行完成之后把结果通过数据流交给apache,然后apache再回复客户端。

    如果所请求的资源有程序硬盘上,还有一部分数据在数据库当中,如下。

  3. 当php发的请求数据到达mysql

    mysql会通过各级索引找到数据,通过响应包回复给php,php通过在磁盘当中调用一部分程序,加上从mqsql回复的这部分数据,结合起来之后就可以运行,运行完成之后把结果交给apache

nginx通过fastcgi接口与php交互,将用户的动态请求交给php处理。

php-fpm进程就用来接收nginx发送过来的动态请求,fpm进程不会处理,真正处理的进程是wrapper进程,有些php请求wrapper可以直接进行处理,处理后再通过php-fpm返回给nginx,但是还有一些需要调用数据库的,php-ini就负责与数据库沟通。

标签:httpd,LNMP,nginx,php71w,mysql,php,客户端
来源: https://www.cnblogs.com/yizhangheka/p/12076716.html