LNMP就是Linux+Nginx+MySQL+PHP,Linux做为服务器的操做系统,MySQL即为数据库,Nginx为一款高性能Web服务器,自己是不能处理PHP的,当接收到请求时,判断若是是PHP请求就会将请求交给PHP解释器处理,而后将结果返回给Client。Nginx通常把请求转发给fast-cgi管理进程处理,fast-cgi管理进程再选择cgi子进程处理请求,而后把结果返给Nginx。
Apache+PHP 和 Nginx+PHP的区别
Apache通常是把PHP当作本身的一个模块来启动;和LAMP不一样的是,提供web服务的是Nginx,而且php是做为一个独立服务存在的,这个服务叫作php-fpm,Nginx直接处理静态请求,动态请求会转发给php-fpm,而Ngnix则是把http请求变量转发给PHP进程,即PHP独立进程,与Ngnix通讯,这种方式叫作Fast-CGI运行方式。因此Apache所编译的PHP不能用于Nginx。
Nginx+PHP的基本结构图以下:javascript
一、安装前准备
##建立用户php
[root@localhost ~]#useradd -s /sbin/nologin mysql [root@localhost ~]# id mysql uid=1000(mysql) gid=1000(mysql) 组=1000(mysql)
##建立数据目录。css
[root@localhost ~]mkdir -p /data/mysql [root@localhost ~]chown -R mysql.mysql /data/mysql [root@localhost ~]ll -d /data/mysql/ drwxr-xr-x 2 mysql mysql 6 6月 25 11:29 /data/mysql/
##安装mysql所需依赖包html
[root@localhost ~]yum install -y gcc gcc-c++ make cmake ncurses-devel bison-devel autoconf libtool libXpm-devel libvpx-devel gmp-devel
注:若是缺乏这些依赖包,编译过程会保错,源码安装大部分报错为缺乏依赖包的引发的
二、安装mysql
方式1:源码编译安装MySQLjava
#进入软件源码存放目录 [root@localhost ~]cd /usr/local/src/ #下载源码包 [root@localhost src]wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36.tar.gz #解压源码包 [root@localhost src]tar xvf mysql-5.6.36.tar.gz #进入解压后的源码目录 [root@localhost src]cd mysql-5.6.36 #设置安装参数,cmake至关于configure ##下面的反斜杠是脱义字符,加上它咱们能够把一行命令写成多行 [root@localhost ~]cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \ #指定mysql安装目录 -DMYSQL_DATADIR=/data/mysql \ #指定数据存放的目录 -DSYSCONFDIR=/etc/ \ #指定配置文件所在目录 -DWITH_MYISAM_STORAGE_ENGINE=1 \ #安装启用myisam引擎支持 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装启用innodb引擎支持 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ #指定本地sock文件 -DMYSQL_TCP_PORT=3306 \ #指定TCP端口为3306 -DENABLED_LOCAL_INFILE=1 \ #启用本地数据导入支持 -DWITH_PARTITION_STORAGE_ENGINE=1 \ #安装数据库分区 -DEXTRA_CHARSETS=all \ #启用额外的字符集类型(默认为all) -DDEFAULT_CHARSET=utf8 \ #指定默认的字符集为utf8 -DDEFAULT_COLLATION=utf8_general_ci #设定默认排序规则(utf8_general_ci快速/utf8_unicode_ci准确) 此处省略cmake过程 [root@localhost mysql-5.6.36]echo $? ##检查是否有错误。 0 [root@localhost mysql-5.6.36]make && make install #编译 && 安装 ... 省略编译安装的过程 [root@localhost mysql-5.6.36]# echo $? ##再次检查安装是否有错误。若是是0就表示安装没问题。 0
方式2:二进制包安装MySQL
源代码方式和二进制包是软件包的两种形式。二进制包里面包括了已经通过编译,能够立刻运行的程 序。你只须要下载和解包(安装)它们之后,就立刻可使用。源代码包里面包括了程序原始的程序代码,须要在你的计算机上进行编译之后才能够产生能够运行程 序,因此从源代码安装的时间会比较长node
#进入软件源码存放目录 [root@localhost ~]cd /usr/local/src/ #下载二进制包 [root@localhost src]wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz #解压二进制包 [root@localhost src]tar xvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz #将解压好的目录移动到/usr/local/目录下重命名为mysql [root@localhost src]mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql #进入/usr/local/mysql目录 [root@localhost src]cd /usr/local/mysql ###到此安装成功
三、初始化配置mysql
#初始化数据库 [root@localhost ~]cd /usr/local/mysql/ [root@localhost mysql]./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql #备份初始配置文件 [root@localhost mysql]cp /etc/my.cnf /etc/my.cnf.bak #清空配置文件 [root@localhost mysql]echo > /etc/my.cnf #编辑配置文件写入下面的内容后保存退出 [root@localhost mysql]vim /etc/my.cnf ################################### [mysqld] port = 3306 basedir=/usr/local/mysql datadir=/data/mysql/ socket=/tmp/mysql.sock user=mysql default-time-zone=system default-storage-engine=InnoDB log-error=/var/log/mysqld.log sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES ################################### ##将mysql启动脚本放入/etc/init.d/目录中重命名为mysqld [root@localhost ~]cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld ##编辑启动脚本 [root@localhost mysql]# vi /etc/init.d/mysqld 把下面两个修改一下,否则启动会报错 basedir=/user/local/mysql #修改为mysql的安装目录 datadir=/data/mysql #修改为mysql的数据目录 ##将mysql启动脚本加入chkconfig管理 [root@localhost ~]# chkconfig --add mysqld ##设置mysql开机自启动 [root@localhost ~]# chkconfig mysqld on
和LAMP安装PHP方法有差异,须要开启php-fpm服务
一、下载、解压源码包linux
[root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget http://mirrors.sohu.com/php/php-5.6.30.tar.gz [root@localhost src]# tar zxf php-5.6.30.tar.gz
二、编译安装PHPnginx
#先建立php-fpm用户c++
[root@localhost src]# useradd -s /sbin/nologin php-fpm
#安装依赖包
[root@localhost src]# yum -y install gcc libcurl-devel libxml2-devel openssl-devel bzip2-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel
#建立配置文件目录
[root@localhost src]# mkdir -p /usr/local/php-fpm/etc
#configure设置安装参数
[root@localhost src]# cd php-5.6.30 [root@localhost php-5.6.30]# ./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 \ --enable-mysqlnd \ --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
#编译、安装
[root@localhost php-5.6.30]# make && make install
#检查是否出错
[root@localhost php-5.6.30]# echo $? 0
#参数说明:
--prefix=/usr/local/php-fpm #设定安装目录 --with-config-file-path=/usr/local/php-fpm/etc #谁定php-fpm配置文件所在目录 --enable-fpm #开启php-fpm模式 --with-fpm-user=php-fpm #设定php-fpm服务的用户 --with-fpm-group=php-fpm #设定php-fpm服务的用户组 --with-mysql=/usr/local/mysql #设定mysql库,这种方式基本已经废弃 --with-mysqli=/usr/local/mysql/bin/mysql_config #最新的mysqli链接库 --with-pdo-mysql=/usr/local/mysql #mysqli链接库 --with-mysql-sock=/tmp/mysql.sock #指定mysql.sock文件路径 #其余参数都和LAMP相同
#复制初始配置文件到configure指定的配置文件存放目录下更名为php.ini
[root@localhost php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
#配置/usr/local/php-fpm/etc/php-fpm.conf配置文件
[root@localhost php-5.6.30]# vi /usr/local/php-fpm/etc/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 = 65535
#复制启动脚本到/etc/init.d/目录下重命名为php-fpm
[root@localhost php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#修改/etc/init.d/php-fpm文件的权限
[root@localhost php-5.6.30]# chmod 755 /etc/init.d/php-fpm
#加入chkconfig管理
[root@localhost php-5.6.30]# chkconfig --add php-fpm
#设置开机启动
[root@localhost php-5.6.30]# chkconfig php-fpm on
#启动php-fpm服务
[root@localhost php-5.6.30]# service php-fpm start
#查看php-fpm服务进程是否正常开启。
[root@localhost php-5.6.30]# ps aux |grep php-fpm
Nginx官网:nginx.org
Nginx应用场景:web服务、反向代理、负载均衡
Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都同样,
和Nginx的最大区别在于Tenging增长了一些定制化模块,在安全限速方面表现突出,另外它支持对js,css合并
Nginx核心+lua相关的组件和模块组成了一个支持lua的高性能web容器openresty 参考连接
#下载、解压源码包
[root@localhost ~]# cd /usr/local/src [root@localhost src]# wget http://mirrors.sohu.com/nginx/nginx-1.12.1.tar.gz [root@localhost src]# tar zxf nginx-1.12.1.tar.gz
#配置参数、编译、安装
[root@localhost src]# cd nginx-1.12.1 [root@localhost nginx-1.12.1]# ./configure --prefix=/usr/local/nginx
#编译、安装
[root@localhost nginx-1.12.1]# make && make install
#检查是否出错
[root@localhost nginx-1.12.1]# echo $? 0
#编辑nginx启动脚本
[root@localhost nginx-1.12.1]# vi /etc/init.d/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
#修改脚本权限并加入开机启动
[root@localhost nginx-1.12.1]# chmod 755 /etc/init.d/nginx [root@localhost nginx-1.12.1]# chkconfig --add nginx [root@localhost nginx-1.12.1]# chkconfig nginx on [root@localhost nginx-1.12.1]# cd /usr/local/nginx/conf/; mv nginx.conf nginx.conf.bak
#修改nginx配置文件
[root@localhost conf]# vi 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; } } }
nginx.conf配置文件详解:【参考连接】
#检查配置文件是否有错误
[root@localhost conf]# /usr/local/nginx/sbin/nginx -t
#启动nginx服务
[root@localhost conf]# /etc/init.d/nginx start
#检查80端口是否开始监听
[root@localhost conf]# netstat -lntp |grep 80
#防火墙容许80端口访问
[root@localhost conf]# firewall-cmd --add-port=80/tcp --permanent [root@localhost conf]# firewall-cmd --reload
扩展
Nginx为何比Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html
mod_php 和 mod_fastcgi以及php-fpm的比较 http://dwz.cn/1lwMSd
概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM http://www.nowamagic.net/librarys/veda/detail/1319/ https://www.awaimai.com/371.html