一、Nginx基础
Nginx专为性能优化而开发,最知名的优点为:稳定、资源消耗低和对HTTP并发连接的高处理能力。
1.1 Nginx安装及运行控制
1.1.1 Nginx安装
以Nginx1.12版本为例,使用源代码包(可从官方网站http://www.nginx.org下载的形式下载。
安装过程中的pcre-devel和zlib-devel分别是提供基于perl语言的正则表达式和压缩作用。
1.1.2 Nginx的运行控制
因为前面创建了一个连接,所以可以在任何环境中使用nginx,直接使用就是启动nginx。结合"-t"选项是对主配置文件验证,"-c"选项则可以指定其他配置文件的路径进行验证。
若要终止nginx的运行,可以使用pkill命令终止nginx。也可以编写Nginx服务脚本,这样就能够使用chkconfig和systemctl工具管理了。通过在"/etc/init.d/"中创建名为nginx的脚本,写入以下内容:
①指定解释器
②第一项指定nginx进程的运行级别(即选择运行在单用户模式、多用户模式、图形化模式等),全部为"-",多个级别之间没有间隔。第二项指定开机自启的优先级,越大优先级越高,普通进程最高99。第三项指定关闭优先级,越小关闭的时间靠后。
③写描述,此项可以自定义。
④通过控制语句,如if、case,判断输入的参数(参数一般为start、reload、restart、stop),并进行响应的处理,这些处理需要使用nginx命令和pkill命令(用于终止nginx)。
在脚本编辑成功之后,加上运行权限,使用"chkconfig --add nginx"将nginx添加为系统服务,就可以使用chkconfig和systemctl进行管理了。
1.2 Nginx的主配置文件
主配置文件位于其安装目录的conf目录中,名为"nginx.conf",包括全局配置、I/O事件配置和HTTP配置这三大块内容,配置语句的格式为:"关键字 值;"。
1.2.1 全局配置
由各种配置语句组成,不使用特定的界定标记。可以设置Nginx服务的运行用户、工作进程数、错误日志、PID存放位置等。
1.2.2 I/O事件配置
使用"events {}"界定标记,可以设置Nginx进程的I/O响应模型、每个进程的连接数等设置。进程的连接数与工作进程数有关联,关系为:工作进程数×进程的连接数=nginx提供服务的连接数。
1.2.3 HTTP设置
使用"http {}"界定标记,可以设置访问日志、HTTP端口、网页目录、默认字符集、连接保持、虚拟主机、PHP解析等,其中大部分配置语句都包含在子定界标记"server {}"内。
log_format main项可以设置访问日志的格式
listen指定不同站点各自监听的端口
root指定网页文件所在目录
charset可以设置默认字符集
keepalive_timeout设置连接保持时间
server {}设置虚拟主机,也叫站点、网站
location ~\.php {} 可以设置php解析相关配置
1.3 访问状态统计
Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的Web访问情况。需要在配置时添加该模块,还需要修改nginx.conf配置文件,指定访问位置并添加stub_status配置代码。例如:
可以在浏览器中进行验证,使用IP地址进行访问并在后面指定"/status" 。
二、Nginx访问控制
与Apache一样,有基于用户授权文件、IP的访问控制。
2.1 基于授权的访问控制
当客户端要访问网页时,需要输入账号和密码才能继续访问,主要为以下几个步骤:
-
生成用户密码认证文件。
- 使用命令htpasswd生成用户认证文件(该命令可安装httpd-tools获取)。
- htpasswd -c nginx安装路径/文件名.db 用户名 #新建授权文件并添加用户
- htpasswd nginx安装路径/文件名.db 用户名 #在已有授权文件中添加用户
- 建议修改文件权限为400,且属主改为nginx。
-
修改主配置文件相对应记录,添加认证配置项。
- 在对应的站点的location中添加以下字段
- auth_basic "secret";#指定验证方法为密码
- auth_basic_user_file 用户授权文件位置;
- 在对应的站点的location中添加以下字段
-
重启服务,访问测试。
2.2 基于IP的访问控制
nginx基于客户端的访问控制规则如下:
- deny IP/IP段:拒绝某个IP或网段的客户端访问。
- allow IP/IP段:允许某个IP或网段的客户端访问。
- 规则从上到下执行,如匹配则停止。
只需在站点的location中添加上述格式的规则语句,重启服务后即可生效。
三、Nginx虚拟主机
Nginx和Apache一样,都可以在一台主机中托管多个站点。这些站点可以基于IP、域名、端口进行区分。
3.1 基于域名的虚拟主机
只需在主配置文件的对应域名站点中的location中指定网页文件所在的位置,并且确保nginx能够找到这个位置。
注意开始是没有fkk这个目录的,需要自己创建,并在里面添加网页文件,不同的站点不能使用相同的目录。可以根据自己需求创建多个"server {}"站点。
3.2 基于IP的虚拟主机
这种方式的站点数量会受主机拥有的IP地址数量的限制,因为一个IP对应一个站点。只需在站点中的listen项中添加IP地址即可,端口号可以保留或删除。
3.3 基于端口的虚拟主机
在实验环境中访问时,也使用"IP:端口"方式。
四、LNMP架构部署及应用
4.1 安装MySQL服务
一般建议以源码包安装,本次用MySQL的5.6.36版本。先解压源码包并进入已解压后的目录中,使用cmake工具进行配置,以上步骤成功之后进行安装。
在配置过程中,将默认使用的字符集设置为utf8,并添加其他字符集的支持(需要先安装cmake,可使用yum安装)。
上述的配置命令中,各选项的含义如下:
- -DCMAKE_INSTALL_PREFIX:指定将mysql数据库程序安装到某目录下。
- -DSYSCONFDIR:指定初始化参数文件目录
- -DEFAULT_CHARSET:指定默认使用的字符集编码。
- -DEFAULT-COLLATION:指定默认使用的字符集校对规则,utf8_general_ci是适用于UTF-8字符集的通用规则。
- -DWITH_EXTRA_CHARSETS:指定额外支持的其他字符集编码。
为了加强数据库服务的权限控制,需要使用专门的运行用户。此用户不需要登录,不需要家目录:
useradd -M -s /sbin/nologin mysql -g mysql
#使用此用户对数据库进行初始化
mysql的安装路径/scripts/mysql_install_db --basedir=mysql的安装路径 datadir=mysql的安装路径/data --user=mysql
以上所有步骤都完成之后就可以启动mysql了,此时的mysql没有root密码,建议进行设置。
4.2 安装PHP解析环境
若要让Nginx能够解析PHP网页,有两种方法:
- 将访问PHP页面的WEB请求交给其他服务器(LAMP)去处理。
- 使用PHP的FPM模块调用本机的PHP环境。
此次以FPM模块进行处理。大致步骤为:编辑php-fpm.conf文件,修改其中的PID文件、运行用户/组(需要创建一个php用户,不能登录)、服务数(进程数量)等相关设置,之后启动php-fpm程序即可。
在php的安装路径/etc/php-fpm.conf文件中找到以下字符:
- pid:此字符用于确认pid文件的位置,去掉注释
- user:运行用户
- group:运行组
- pm.max_children:
- pm.start_servers
- pm.min_spare_servers:最少空闲进程数
- pm.max_spare_servers:最多空闲进程数
建议在nginx的服务脚本中添加与nginx相同结构的php-fpm的控制语句(php-fpm也可以直接执行php-fpm指令启动),以便在启动/停止Nginx服务器时将php-fpm进程也自动停止。
无论是将PHP页面交给LAMP服务去解析,还是调用本机的php-fpm进程进行解析,都需要在""server{}"配置段中添加location设置,以便指定当访问.php页面时采取何种操作。
调用本机的php-fpm进程进行解析,使用的配置语句如下所示:
之后重启nginx服务即可生效。最后可以创建一个测试页面,位置在基于上面图片中的root项,用来测试PHP语句能否正常解析,以及能否连接数据库。
<?php
$link=mysqli_connect('127.0.0.1','root','数据库密码');
if($link) echo "OK"; #如果数据库连接成功则显示OK
mysqli_close($link); #关闭数据库连接。
?>