LNMP架构(1)

内容摘要

  • LNMP架构介绍
  • MySQL安装
  • PHP安装
  • Nginx介绍
  • Nginx安装

一、LNMP架构介绍

  • LNMP和LAMP不同的是,提供web服务的是Nginx
  • 并且php是作为一个独立服务存在的,这个服务叫做php-fpm
  • Nginx直接处理静态请求,动态请求会转发给php-fpm
  • Nginx在处理静态文件时比Apache更快

二、Mysql的安装

MySQL常用的安装方法:rpm、源码(与一般的源码包稍有不同,可以查看相关的文档)、二进制的免编译(无需配置编译),mysql常用的两个引擎:innodb、myisam。

  • 首先移至: cd /usr/local/src/  目录下
  • 下载MySQL的二进制免编译包: wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz    (失效后,可前往r.aminglinux.com找最新的下载地址)
  • 解压文件: tar -zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
  • 移动解压目录并更名: mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql
  • 移动至mysql目录下: cd /usr/local/mysql
  • 创建一个新用户:useradd mysql
  • 创建datadir的目录: mkdir /data/
  • 初始化mysql,指定用户和data目录:./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
  1. 需要的依赖包: perl-DBD-MySQL
  • 将mysql自带的配置文件移至系统配置目录下,并修改配置文件,指定datadir的目录,以及socket的目录: cp support-files/my-default.cnf  /etc/my.cnf     (系统默认自带有my.cnf文件)

  • 将mysql自带的脚本文件移至chkconfig的执行目录下,并定义basedir(程序目录)和datadir: cp support-files/mysql.server /etc/init.d/mysqld

  • 将脚本文件的权限更改为755(一般默认为755):chmod 755 /etc/init.d/mysqld
  • 将脚本文件加入到chkconfig服务中: chkconfig --add mysqld
  • 使用命令 /etc/init.d/mysqld start service start mysqld 启动服务,如图:

  • 如果没有启动脚本的模板时,可以使用命令行的方法启动进程:/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &       指定mysqld_safe的路径,配置文件,用户以及datadir的路径,再使用&符号丢至后台。该方式启动的mysql服务,只能通过 killall mysqld (该命令相对kill更加安全)命令来结束。

三、PHP安装

在LAMP架构中,php是做为apache的一个模块存在的,而在LNMP架构中,php是作为一个单独的服务存在,所以安装方式及参数有些许差别。

  • 相关的依赖包:yum -y install libxml2-devel libpng-devel openssl openssl-devel bzip2 bzip2-devel libjpeg-devel freetype-devel libmcrypt.x86_64  libmcrypt-devel.x86_64  curl curl-devel
  • 移动至/usr/local/src
  • wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2
  • 解压源码包: tar -jxvf php-5.6.32.tar.bz2
  • 新建php-fpm用户:useradd -s /sbin/nologin php-fpm
  • 移至解压后的cd php-5.6.32目录下执行命令: ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl  --with-openssl          (若之前已经编译过该源码包,先使用命令make clean清除编译参数等在执行该命令)
  • 最后进行编译和安装: make && make install
  • 复制解压后的源码包中的配置模板到php-fpm目录下:cp php.ini-production /usr/local/php-fpm/etc/php.ini    (配置文件的目录时在编译时--with-config-file-path=所定义的目录位置)
  • 创建文件/usr/local/php-fpm/etc/php-fpm.conf,加入以下内容(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/php-fpm.conf)

[global]

pid = /usr/local/php-fpm/var/run/php-fpm.pid

error_log = /usr/local/php-fpm/var/log/php-fpm.log

[www]

listen = /tmp/php-fcgi.sock

listen.mode = 666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

  • 复制解压后的源码包中的启动脚本:cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpmd
  • 修改启动脚本权限:chmod 755 /etc/init.d/php-fpmd
  • 将脚本文件加入到chkconfig服务中: chkconfig --add php-fpmd
  • 设置启动:chkconfig php-fpmd on
  • 查看配置文件是否正确: /usr/local/php-fpm/sbin/php-fpm -t    (与/usr/local/php-fpm/bin/php的用法基本一致)
  • 启动php-fpm服务:service php-fpmd start
  • 测试服务是否启动成功:ps aux |grep php-fpm

四、Nginx介绍

  • Nginx官网 nginx.org,最新版1.15,最新稳定版1.14(截止2018年9月)
  • Nginx应用场景:web服务、反向代理、负载均衡
  • Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大区别在于Tenging增加了一些定制化模块,在安全限速方面表现突出,另外它支持对js,css合并
  • Nginx核心+lua相关的组件和模块组成了一个支持lua的高性能web容器openresty,参考http://jinnianshilongnian.iteye.com/blog/2280928
  • Nginx做为HTTP服务器,有以下几项基本特性:
  1. 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.
  2. 无缓存的反向代理加速,简单的负载均衡和容错.
  3. FastCGI,简单的负载均衡和容错.
  4. 模块化的结构。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。
  5. 支持SSL 和 TLSSNI.
  • Nginx相对于Apache优点:
  1. 高并发响应性能非常好,官方测试Nginx处理静态文件并发5w/s
  2. 反向代理性能非常强。(可用于负载均衡)
  3. 内存和 cpu 占用率低。(为 Apache 的 1/5-1/10)
  4. 对后端服务有健康检查功能。
  5. 支持 PHP cgi 方式和 fastcgi 方式。
  6. 配置代码简洁且容易上手。

五、Nginx安装

#!/bin/bash

# chkconfig: - 30 21

# description: http service.

# Source Function Library

. /etc/init.d/functions

# Nginx Settings

NGINX_SBIN="/usr/local/nginx/sbin/nginx"

NGINX_CONF="/usr/local/nginx/conf/nginx.conf"

NGINX_PID="/usr/local/nginx/logs/nginx.pid"

RETVAL=0

prog="Nginx"

start()

{

    echo -n $"Starting $prog: "

    mkdir -p /dev/shm/nginx_temp

    daemon $NGINX_SBIN -c $NGINX_CONF

    RETVAL=$?

    echo

    return $RETVAL

}

stop()

{

    echo -n $"Stopping $prog: "

    killproc -p $NGINX_PID $NGINX_SBIN -TERM

    rm -rf /dev/shm/nginx_temp

    RETVAL=$?

    echo

    return $RETVAL

}

reload()

{

    echo -n $"Reloading $prog: "

    killproc -p $NGINX_PID $NGINX_SBIN -HUP

    RETVAL=$?

    echo

    return $RETVAL

}

restart()

{

    stop

    start

}

configtest()

{

    $NGINX_SBIN -c $NGINX_CONF -t

    return 0

}

case "$1" in

  start)

        start

        ;;

  stop)

        stop

        ;;

  reload)

        reload

        ;;

  restart)

        restart

        ;;

  configtest)

        configtest

        ;;

  *)

        echo $"Usage: $0 {start|stop|reload|restart|configtest}"

        RETVAL=1

esac

exit $RETVAL

  • 修改启动脚本权限:chmod 755 /etc/init.d/nginx
  • 将脚本文件加入到chkconfig服务中: chkconfig --add nginx
  • 设置启动:chkconfig nginx on
  • 启动脚本:service nginx start
  • 新建nginx配置文件(/usr/local/nginx/conf/),原有的备份一下:mv nginx.conf nginx.conf.bak
  • 创建nginx配置文件(/usr/local/nginx/conf/),增加内容如下:(参考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf)

user nobody nobody;

worker_processes 2;

error_log /usr/local/nginx/logs/nginx_error.log crit;

pid /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;

events

{

    use epoll;

    worker_connections 6000;

}

http

{

    include mime.types;

    default_type application/octet-stream;

    server_names_hash_bucket_size 3526;

    server_names_hash_max_size 4096;

    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'

    ' $host "$request_uri" $status'

    ' "$http_referer" "$http_user_agent"';

    sendfile on;

    tcp_nopush on;

    keepalive_timeout 30;

    client_header_timeout 3m;

    client_body_timeout 3m;

    send_timeout 3m;

    connection_pool_size 256;

    client_header_buffer_size 1k;

    large_client_header_buffers 8 4k;

    request_pool_size 4k;

    output_buffers 4 32k;

    postpone_output 1460;

    client_max_body_size 10m;

    client_body_buffer_size 256k;

    client_body_temp_path /usr/local/nginx/client_body_temp;

    proxy_temp_path /usr/local/nginx/proxy_temp;

    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;

    fastcgi_intercept_errors on;

    tcp_nodelay on;

    gzip on;

    gzip_min_length 1k;

    gzip_buffers 4 8k;

    gzip_comp_level 5;

    gzip_http_version 1.1;

    gzip_types text/plain application/x-javascript text/css text/htm

    application/xml;

    server

    {

        listen 80;

        server_name localhost;

        index index.html index.htm index.php;

        root /usr/local/nginx/html;

        location ~ \.php$

        {

            include fastcgi_params;

            fastcgi_pass unix:/tmp/php-fcgi.sock;

            fastcgi_index index.php;

            fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;

        }   

    }

}

  • 检查配置文件是否正确:/usr/local/nginx/sbin/nginx -t
  • 使用命令curl localhost测试,如图:

  • 测试PHP解析,使用命令curl localhost/1.php

  • 无法解析PHP时,可能与nginx配置文件中定义的user和group有关。

六、扩展

  • Nginx为什么比Apache Httpd高效:原理篇
  1.  http://www.toxingwang.com/linux-unix/linux-basic/1712.html
  2. https://coding.net/u/aminglinux/p/nginx/git/blob/master/4z/IO.md?public=true
  3. https://www.zhihu.com/question/64727674

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值