nginx那点事儿——LNMP网站架构


前言

LNMP网站架构是早期Linux系统开始流行时最火热的架构,至今还有很多公司仍在使用。其中L代表Linux操作系统,表示整个网站运行的环境;N代表Nginx,表示静态元素处理等;M代表Mysql数据库,P代表php,也就是php开发的程序,用于动态处理请求。

LNMP动态网站部署

ngx_fastcgi_modul # nginx通过ngx_fastcgi_modul模块 链接 php-fpm处理动态请求。

环境:

192.168.93.136 node-1

192.168.93.137 node-2

192.168.93.138 node-3
  1. 在node-1节点 部署nginx 作为web服务器

    yum -y install nginx 
    
  2. 在node-3节点 部署 php 作为中间件 (源码包部署php省略)

    yum -y install php-fpm php-mysql php-gd      # php-fpm接受动态请求 php-mysql链接mysql程序 php-gd图形库程序
    
    systemctl restart php-fpm
    
    netstat -anpt | grep 9000      # 查看php是否开启 默认端口是9000
    
    vim /html/liang.php   # php页面
    
      <?php         # 测试代码  显示一切主机信息
    
      phpinfo();
    
      ?>
      
    **(1) 本地fastcgi**
      
    vim /etc/nginx/conf.d/liang.conf    # 配置虚拟主机
    
      server{
    
      listen 8080;
    
      server_name [web.liang.com](http://web.liang.com);
    
      location /{
    
        access_log  /var/log/nginx/liang.access.log  main;
    
        index liang.php liang.html;
    
        }
    
      location ~ \.php$ {
    
        root           /html;          # 网站源码主目录
    
        fastcgi_pass  127.0.0.1:9000;      # 本地fastcgi
    
        fastcgi_index  liang.php;
    
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;    # 定位网站源码代码
    
        include        fastcgi_params;
    
      }
    
      }
      
    
    **(2) 远程fastcgi 分布式fastcgi**
    
        nginx:192.168.93.136
    
        php:192.168.93.138
    
    vim /etc/nginx/conf.d/liang.conf    # 配置虚拟主机
    
      server{
    
        listen 80;
    
        server_name [web.liang.com](http://web.liang.com);
    
        access_log /var/log/access_liang.log main;
    
        error_log /var/log/error_liang.log;
    
        location /{
    
          root /usr/share/nginx/html;
    
          index liang.html;
    
        }
    
        location ~ \.php$ {
    
          root /opt/php;     # 远端php-fpm服务器的路径
    
          fastcgi_pass   192.168.93.138:9000;     # 远端fastcgi
    
          fastcgi_index  liang.php;
    
          fastcgi_param  SCRIPT_FILENAME  /opt/php/$fastcgi_script_name;  # /opt/php远端机器目录 存放网站源码
    
          include        fastcgi_params;
    
        }
    
        }
    

    访问 192.168.93.136:8080 如果出现网站则成功
    如果本地的php可以使用 但是远程的主机php不可用 访问网站返回502 或者 file not found在node-3(部署php的主机)上

    vim /etc/php-fpm.d/www.conf 
    
    listen = 127.0.0.1:9000  改为  listen = 192.168.93.138:9000        # 监听本ip端口
    
    listen.allowed_clients = 192.168.93.136       # 允许nginx访问
    
    # 将php页面源码放在 fastcgi_param 定义的位置  如:/opt/php/liang.php -> fastcgi机器目录
    
    systemctl restart php-fpm      # 重启服务
    
  3. 在node-2节点 部署mysql服务

    mysql> create database php;      # 创建数据库
    
    mysql> grant all on php.* to php@'192.168.93.136' identified by '123';
    # 创建用户并授权   ip为web服务器ip
    
    mysql> flush privileges;
    
    
    vim /html/test_mysql.php     # 编写连接数据库源码
    
      <?php
    
      $link=mysql_connect('192.168.93.137','php','123');    # 连接数据库
    
      if ($link)
    
        echo "Successfully";
    
      else
    
        echo "Faile";
    
      mysql_close();
    
      ?
    

    如果是用远端的php 则在数据库授权的时候也应该加上远程主机ip 是php去请求数据库,不然会报错 并且将文件拷贝到远端php服务器

  4. 网站上线

    (1)下载网站源码包

    wget [https://cn.wordpress.org/wordpress-4.9.1-zh_CN.zip](https://cn.wordpress.org/wordpress-4.9.1-zh_CN.zip)
    

    (2)解压源码包

    unzip wordpress-4.9.1-zh_CN.zip
    

    (3)准备源码目录

    mkdir /work 
    
    mv /root/wordpress/* /work
    

    (4)目录授权

    chown -R nginx.nginx /word
    

    (5)测试

    访问192.168.93.136:8080

    虚拟主机:

    server{
    
    listen 8080;
    
    server_name web.liang.com;
    
    location /{
    
      access_log  /var/log/nginx/liang.access.log  main;
    
      root /word;
    
      index index.php index.html;
    
      }
    
    location ~ \.php$ {
    
      root           /word;
    
      #fastcgi_pass  127.0.0.1:9000;
    
      fastcgi_pass   192.168.93.138:9000;
    
      fastcgi_index  index.php;
    
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    
      include        fastcgi_params;
    
    }
    
    }
    
  5. 前端后端交互
    html

    ├── insert.html

    ├── insert.php

    └── select.php

    (1)编写html文件

    vim insert.html
    
    <html>
    
    <body>
    
    <form action="insert.php" method="post">
    
    Firstname: <input type="text" name="firstname" />
    
    Lastname: <input type="text" name="lastname" />
    
    Age: <input type="text" name="age" />
    
    <input type="submit" />
    
    </form>
    
    </body>
    
    </html>
    

    (2)编写写入数据的php中间件

    vim insert.php
    
    <?php
    
    $con = mysql_connect("192.168.93.137","ll","123");
    
    if (!$con)
    
      {
    
      die('Could not connect: ' . mysql_error());
    
      }
    
    mysql_select_db("my_db", $con);
    
    $sql="INSERT INTO Persons (FirstName, LastName, Age)
    
    VALUES
    
    ('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
    
    if (!mysql_query($sql,$con))
    
      {
    
      die('Error: ' . mysql_error());
    
      }
    
    echo "1 record added";
    
    mysql_close($con)
    
    ?>
    

    (3)在mysql节点准备数据库和表

    mysql> create database my_db;
    
    mysql> create table my_db.Persons (FirstName varchar(50), LastName varchar(50),Age int);
    

    (4)访问insert.html页面 看看数据是否插入成功

    (5)编写查询的数据的php中间件

    vim select.php
    
    <?php
    
    $con = mysql_connect("192.168.93.137","ll","123");
    
    if (!$con)
    
      {
    
      die('Could not connect: ' . mysql_error());
    
      }
    
    mysql_select_db("my_db", $con);
    
    $result = mysql_query("SELECT * FROM Persons");
    
    echo "<table border='1'>
    
    <tr>
    
    <th>Firstname</th>
    
    <th>Lastname</th>
    
    </tr>";
    
    while($row = mysql_fetch_array($result))
    
      {
    
      echo "<tr>";
    
      echo "<td>" . $row['FirstName'] . "</td>";
    
      echo "<td>" . $row['LastName'] . "</td>";
    
      echo "</tr>";
    
      }
    
    echo "</table>";
    
    mysql_close($con);
    
    ?>
    

    (6)访问: 192.168.93.136:8080/select.php

php-fpm相关配置及优化

  1. 核心配置文件

    vim /etc/php.ini
    
    date.timezone = PRC      # 设置时区
    
  2. 全局配置文件

    vim /etc/php-fpm.conf 
    
    /run/php-fpm/php-fpm.pid    #  设置pid文件的位置
    
    error_log = log/php-fpm.log      # 记录错误日志的文件
    
    log_level = notice       # 记录日志的等级
    
    process.max = 128        # 控制最大进程数
    
    daemonize = yes           # 将fpm转至后台运行
    
  3. 扩展配置文件(优化参数运维关注)

    vim /etc/php-fpm.d/www.conf
    
    user = apache
    
    group = apache       # 设置用户和组
    
    listen = 127.0.0.1:9000     # php程序监听端口
    
    slowlog = /var/log/php-fpm/$pool-slow.log     # 启动慢日志
    
    pm=dynamic             # 动态模式开启
    
    start_servers=5        # 最初开启的进程
    
    min_spare_server =5    # 最小空闲进程数
    
    max_spare_servers=10   # 最大空闲进程数 防止大规模断开后 闲置很多进程
    
    max_children        # 最大进程数 
    
    # 数值取决于你的服务器内存。 假设你打算给10G内存给当前配置的PHP-FPM
    
    # 一般一个PHP请求占用内存10M-40M,我们按站点每个PHP请求占用内存25M,这样max_children = 10G/25M = 409
    
    max_requests         # 每个子进程处理的请求数量  
    
    # 默认值为unlimited(默认为1024),可以设置小一点(如500左右),这样可以避免内存泄露带来的问题
    
  4. php监控页面

    vim  /etc/php-fpm.d/www.conf
    
    pm.status_path = /php_status      # 开启
    
    vim /etc/nginx/conf.d/default.conf
    
    location = /php_status {
    
      fastcgi_pass 127.0.0.1:9000;
    
      fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    
      include fastcgi_params;
    
    }
    
    systemctl restart nginx
    
    访问测试 
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷学技术的梁胖胖yo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值