LNMP=Linux+Nginx+MySQL+PHP

Nginx深入剖析与安装 一、虚拟主机概念和类型介绍

        所谓虚拟主机,在web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问。
        nginx软件则使用一个server{}标签来标示一个虚拟主机,一个web服务里可以有多个虚拟主机主机标签对,即同时可以支持多个虚拟主机站点。

二、虚拟主机类型


    常见的虚拟主机类型有如下几种

     2.1    基于域名的虚拟主机

所谓基于域名的虚拟主机,意思就是通过不同的域名区分不通的虚拟主机,基于域名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服务的网站都是使用基于域名的虚拟主机,例如:www.etiantian.org



    2.2    基于端口的虚拟主机

    同理,所谓基于端口的虚拟主机,意思就是通过不同的端口来区分不同的虚拟主机。此类虚拟主机对应的企业应用主要为公司内部的网站,例如:一些不希望直接对外提供用户访问的网站后台等,访问基于端口的虚拟主机地址里要带有端口,例如:http://www.etiantian.org:9000

    2.3    基于IP的虚拟主机

    同理,所谓基于IP的虚拟主机,意思就是通过不同的IP区分不同的虚拟主机,此类虚拟主机对应的企业应用非常少见,一般不同业务需要使用多IP的常见都会在负载均衡器上进行VIP绑定,而不是在Web上通过绑定IP区分不同的虚拟机。

    三种虚拟主机类型均可独立使用,也可以互相混合一起使用。 把基于域名的虚拟主机类型是重点。

三、模块、参数解释

3.1Nginx模块说明

  Nginx核心功能模块:负责Nginx的全局应用,主要针对主配置文件的Main区块和Events区块区域,有很多Nginx必须的全局配置参数 

标准的http功能模块合集 :虽然不是Nginx软件所必需的,但都是很常用的,因此绝大部分默认情况都会自动安装到Nginx软件中,建议保留默认配置 在生产环境中,配置、调整及优化Nginx软件,主要就是根据这些模块的功能修改相应的参数来实现的

3.2工作中常用的Nginx http功能模块

3.3Nginx目录说明

conf : Nginx所有配置文件的目录 fastcgi.conf fastcgi相关参数的配置文件 fastcgi.conf.default fastcgi.conf的原始备份 fastcgi_params fastcgi的参数文件 mime.types 媒体类型 nginx.conf Nginx默认的主配置文件 scgi_params scgi相关参数文件 uwsgi_params uwsgi相关参数文件

fastcgi_temp : fastcgi临时数据目录 html : 编译安装Nginx的默认站点目录 50x.html 错误页面优雅替代显示文件 index.html 默认的首页文件,index.html 、index.php等 logs : Nginx默认的日志路径,包括错误日志和访问日志 access.log Nginx的默认访问日志文件, tail -f access.log error.log Nginx的错误日志文件,如果出现启动故障,要查看该文件 nginx.pid Nginx的pid文件,Nginx进程启动后,会把所有进程的ID号写到此 文件

proxy_temp : 临时目录 sbin : Nginx命令的目录 nginx Nginx的启动命令nginx scgi_temp : 临时目录 uwsgi_temp : 临时目录

3.4Nginx主配置文件

nginx.conf是一个纯文本类型的文件,位于Nginx安装目录下的conf目录中 整个配置文件是以区块的形式组织的 每个区块一个大括号“{}” 来表示,区块可以分几个层次 Main区位于最上层,在Main区下面可以有Events区,HTTP区等层级 在HTTP区中又包含有多个server区,每个server区包含一个多个location区

3.5nginx配置参数解释

worker_processes 1; worker进程的数量 worker_connections 1024; 每个worker进程支持的最大连接数 include mime.types; nginx支持的媒体类型库文件 default_type application/octet-stream; 默认的媒体类型 sendfile on; 开启高效传输模式 keepalive_timeout 65; 连接超时 server 表示一个独立的虚拟主机站点 listen 80; 提供服务的端口,默认80 server_name localhost; 提供服务的域名主机名 location location区块 root html 站点的根目录

四、Nginx安装

  1. yum install openssl openssl-devel zlib zlib-devel pcre pcre-devel yum -y install gcc gcc-c++ autoconf automake make
 按装所需的模块

2.cd /usr/local/src //将安装包下载到/usr/local/src目录下 wget http://nginx.org/download/nginx-1.16.0.tar.gz

3.tar -zxvf nginx-1.16.0.tar.gz 解压之后进行安装输入命令

4.cd nginx-1.6.0 //切换到解压后的nginx目录

5../configure make make install 进行编译安装

6.cd /usr/local/nginx/conf/ // 进入conf文件进行文件配置 vim nginx.conf // 增加一个人server server { listen 80; server_name** blog.nautilus.org;** location / { root html/blog; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } **location ~ .php$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ** 7 . cd /usr/local/nginx/sbin // 进入nginx的sbin目录下 ./nginx //启动 ./nginx -s reload //重读配置文件

yum安装MySQL:

wget http://repo.mysql.com/mysql57-community-release-el7.rpm

获取 mysql 安装包 rpm -ivh mysql57-community-release-el7.rpm

安装 mysql yum install mysql-server

首先启动MySQL systemctl start mysqld.service 查看MySQL运行状态,运行状态如图: systemctl status mysqld.service

此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码: grep "password" /var/log/mysqld.log 如下命令进入数据库: mysql -uroot -p # 回车后会提示输入密码

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库: mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password'; 这里有个问题,新密码设置的时候如果设置的过于简单会报错: 原因是因为MySQL有密码设置的规范,具体是与validate_password_policy的值有关  解决方法就是修改密码为规范复杂的密码: mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'z?guwrBhH7p>'; Query OK, 0 rows affected (0.00 sec)

mysql>

这时候我们要把密码规则改一下,执行下面sql就可以了: mysql> set global validate_password_policy=0; Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=1; Query OK, 0 rows affected (0.00 sec)

mysql>

设置之后就是我上面查出来的那几个值了,此时密码就可以设置的很简单,例如1234之类的。到此数据库的密码设置就完成了。

PHP编译安装 下载 PHP 源码包 #wget http://cn2.php.net/distributions/php-5.6.0.tar.xz xz -d php-5.6.0.tar.xz tar xf php-5.6.0.tar -C /usr/local/src/ 解压源码包

yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel bz2-devel yum -y install libmcrypt-devel mhash mcrypt yum安装所需模块 ./configure make make install源码包编译安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo 创建 www 用户 #groupadd www #useradd -g www -s /sbin/nologin -M www 编译安装 #cd /usr/local/src/php-5.6.0/

./configure
--prefix=/usr/local/php56
--with-config-file-path=/usr/local/php56/etc
--enable-inline-optimization
--disable-debug
--disable-rpath
--enable-shared
--enable-opcache
--enable-fpm
--with-fpm-user=www
--with-fpm-group=www
--with-mysql=mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-gettext
--enable-mbstring
--with-iconv
--with-mcrypt
--with-mhash
--with-openssl
--enable-bcmath
--enable-soap
--with-libxml-dir
--enable-pcntl
--enable-shmop
--enable-sysvmsg
--enable-sysvsem
--enable-sysvshm
--enable-sockets
--with-curl
--with-zlib
--enable-zip
--with-bz2
--with-readline
--with-gd cd /usr/local/src/php-5.6源码包
配置文件: #cp php.ini-development /usr/local/php56/etc/php.ini

php-fpm 服务 #cp /usr/local/php56/etc/php-fpm.conf.default /usr/local/php56/etc/php-fpm.conf

#cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm56 (php-fpm的可执行文件) #chmod +x /etc/init.d/php-fpm56

启动 php-fpm(nginx与 php沟通 ) #service php-fpm56 start
Starting php-fpm done 添加 PHP 命令到环境变量 编辑 /etc/profile ,将: PATH=$PATH:$HOME/bin 改为: PATH=$PATH:$HOME/bin:/usr/local/php56/bin 使 PHP 环境变量生效: source /etc/profile
然后执行 vim /usr/local/nginx/nginx.conf 编辑nginx配置文件,具体路径根据实际的nginx.conf配置文件位置编辑,下面主要修改nginx的server {}配置块中的内容,修改location块,追加index.php让nginx服务器默认支持index.php为首页:

  然后配置.php请求被传送到后端的php-fpm模块,默认情况下php配置块是被注释的,此时去掉注释并修改为以下内容:

  这里面很多都是默认的,root是配置php程序放置的根目录,主要修改的就是fastcgi_param中的/scripts为$document_root   修改完上面的,回到nginx.conf第一行,默认是#user nobody; 这里要去掉注释改为user www-data;或者user www www;表示nginx服务器的权限为www   修改完这些保存并退出,然后重启nginx: /usr/local/nginx/nginx -s stop /usr/local/nginx/nginx   接下来编辑一个测试的php程序,在nginx下的html目录下创建test.php文件,打印一下php配置: <?php phpinfo(); ?>   然后打开浏览器输入对应的地址进行访问,看到输出页面,说明nginx和php都配置成功了