当前位置:首页 > Nginx > 正文内容

LNMP架构搭建动态网站

5年前 (2019-08-31)Nginx758

1.搭建LNMP架构

yum安装 nginx php7.2 Mriadb5.7


1.安装Nginx


#1.使用Nginx官方提供的rpm包
[root@nginx ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx]
name=nginx repo
baseurl=http:#nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

#2.执行yum安装
[root@nginx ~]# yum install nginx -y
[root@nginx ~]# systemctl start nginx
[root@nginx ~]# systemctl enable nginx


2.使用第三方扩展epel源安装php7.2


#移除旧版php
[root@nginx ~]# yum remove php-mysql-5.4 php php-fpm php-common

#安装扩展源
[root@nginx ~]# rpm -Uvh https:#dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@nginx ~]# rpm -Uvh https:#mirror.webtatic.com/yum/el7/webtatic-release.rpm

#安装php72版本
[root@nginx ~]# yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache

#启动php
[root@nginx ~]# systemctl start php-fpm
[root@nginx ~]# systemctl enable php-fpm


3.安装Mariadb


#下载官方扩展源, 扩展源集成mysql5.6、5.7、8.0,仅5.7仓库是开启
[root@nginx ~]# rpm -ivh http:#repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
[root@nginx ~]# yum install mysql-community-server -y
[root@nginx ~]# systemctl start mysqld
[root@nginx ~]# systemctl enable mysqld

#如果mysql登陆需要密码,请查看该文件
[root@nginx ~]# grep 'temporary password' /var/log/mysqld.log

#登陆mysql重新配置密码
[root@nginx ~]# mysql -uroot -p'password'
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';


2.配置LNMP架构


1.配置Nginx实现动态请求转发至php

[root@nginx ~]# cat /etc/nginx/conf.d/php.conf 
server {
    server_name _;
    listen 80;
    root /soft/code;
    index index.php index.html;
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /soft/code$fastcgi_script_name;
        include  fastcgi_params;
    }
}


2.添加php测试页面


#测试phpinfo
[root@nginx ~]# cat /soft/code/info.php
<?php
        phpinfo();
?>

#使用mysqli模块测试连接mysql
[root@nginx ~]# cat /soft/code/mysqli.php
        <?php
        $servername = "localhost";
        $username = "root";
        $password = "";
         
        # 创建连接
        $conn = mysqli_connect($servername, $username, $password);
         
        # 检测连接
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }
        echo "连接成功";
        ?>

#使用pdo模块测试连接mysql
[root@nginx ~]# cat /soft/code/mysqlpdo.php
<?php
        $servername = "localhost";
        $username = "root";
        $password = "";
        try {
            $conn = new PDO("mysql:host=$servername;dbname=test", $username, $password);
            echo "连接成功";
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
        ?>


3.Nginx与PHP原理


Nginx FastCGI的运行原理

nginx fastcgi访问php

1.用户发送http请求报文给nginx服务器

2.nginx会根据文件url和后缀来判断请求

3.如果请求的是静态内容,nginx会将结果直接返回给用户

4.如果请求的是动态内容,nginx会将请求交给fastcgi客户端,通过fastcgi_pass将这个请求发送给php-fpm

5.php-fpm收到请求后会通过本地监听的socket交给wrapper

6.wrapper收到请求会生成新的线程调用php动态程序解析服务器

7.如果用户请求的是博文、或者内容、PHP会请求MySQL查询结果

8.如果用户请求的是图片、附件、PHP会请求nfs存储查询结果

9.php会将查询到的结果交给Nginx

10.nginx会生成一个响应报文返还给用户


4.PHP配置文件优化

4.1php-ini优化

#打开php的安全模式,控制php执行危险函数, 默认是Off,改为On
sql.safe_mode = Off

#关闭php头部信息, 隐藏版本号, 默认是On,该为Off
expose_php = On

#错误信息输出控制
display_error = Off
error_reporting = E_WARNING & E_ERROR

#记录错误日志至后台, 方便追溯
log_errors = On
error_log = /var/log/php_error.log

#每个脚本时间最大内存
memory_limit = 128M

#上传文件最大许可,默认2M, 建议调整为16,32M
upload_max_filesize = 2M

#禁止远程执行phpshell,默认On, 建议Off
allow_url_fopen = On

#时区调整,默认PRC, 建议调整为Asia/Shanghai
date.timezone = PRC



#整体优化后配置文件
sql.safe_mode = Off
expose_php = Off
display_error = Off
error_reporting = E_WARNING & E_ERROR
log_errors = On
error_log = /var/log/php_error.log
upload_max_filesize = 50M
allow_url_fopen = Off
date.timezone = Asia/Shanghai


4.2php-fpm优化


PHP-FPM配置文件


[root@nginx ~]# cat /etc/php-fpm.d/www.conf
[global]
pid = /var/run/php-fpm.pid

#php-fpm程序错误日志
error_log = /var/log/php/php-fpm.log
log_level = warning
rlimit_files = 655350
events.mechanism = epoll

[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.owner = www
listen.group = www
listen.mode = 0660
 
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 512
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.process_idle_timeout = 15s;
 
pm.max_requests = 2048
#php-www模块错误日志
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php/php-www.log
php_admin_flag[log_errors] = on
#php慢查询日志
request_slowlog_timeout = 5s
slowlog = /var/log/php/php-slow.log


PHP5-FPM配置详解释


[global]

#pid设置, 记录程序启动后pid
pid = /var/run/php-fpm.pid

#php-fpm程序启动错误日志路径
error_log = /soft/log/php/php-fpm_error.log

# 错误级别. 可用级别为: alert(必须立即处理),error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
log_level = warning

#设置文件打开描述符的rlimit限制.
rlimit_files = 65535
events.mechanism = epoll

#启动进程的用户和组
[www]
user = www
group = www

# fpm监听端口
listen = 127.0.0.1:9000

# unix socket设置选项,如果使用tcp方式访问,这里注释即可。
listen.owner = www
listen.group = www

# 允许访问FastCGI进程的IP,any不限制
listen.allowed_clients = 127.0.0.1

# pm设置动态调度
pm = dynamic

# 同一时刻最大的php-fpm子进程数量
pm.max_children = 200

# 动态方式下的起始php-fpm进程数量
pm.start_servers = 20

# 动态方式下服务器空闲时最小php-fpm进程数量
pm.min_spare_servers = 10

# 动态方式下服务器空闲时最大php-fpm进程数量
pm.max_spare_servers = 30

# 最大请求
pm.max_requests = 1024
pm.process_idle_timeout = 15s;

# FPM状态页面,用于监控php-fpm状态使用
pm.status_path = /status

# 错误日志
php_flag[display_errors] = off
php_admin_value[error_log] = /soft/log/php/php-www_error.log
php_admin_flag[log_errors] = on

# 配置php慢查询, 以及慢查询记录日志位置
request_slowlog_timeout = 5s
slowlog = /soft/log/php/php-slow.log


“LNMP架构搭建动态网站” 的相关文章

Nginx匹配规则和优先级

1.Server优先级Nginx多个相同Server_name优先级1.1、环境准备[root@nginx ~]# mkdir /soft/code{1..3} -p [root@nginx ~]# for i i...

Nginx实现七层负载均衡

Nginx实现七层负载均衡

Nginx负载均衡当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾所以说当海量用户请求过来以后,它同样是请求调度节点,...

keepalived高可用

1、keepalived    通过vrrp协议实现的高可用.             虚拟路由冗余协议    ...

Nginx实现动静分离

Nginx实现动静分离

Nginx动静分离基本概述动静分离,通过中间件将动静分离和静态请求进行分离;通过中间件将动态请求和静态请求分离,可以建上不必要的请求消耗,同事能减少请求的延时。通过中间件将动态请求和静态请求分离,逻辑图如下:动静分离好处:动静分离后,即使动态服务不可用,但静态资源不会受到影响。Nginx动静分离场景...

Nginx实现Rewrite重写(url重写跳转)及各种案例

Nginx实现Rewrite重写(url重写跳转)及各种案例

Rewrite基本概述Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。Rewrite使用场景1、地址跳转,用户访问www.drz.com这个URL是,将其定向至一个新的域名mobile.drz.com2、协议跳转,用户通过http协议请求网站时,将其...