
作为HTTP服务软件的后期之秀,Nginx与它的老大哥Apache相比有很多改进之处,比如,在性能上,Nginx占用的系统资源更少,能支持更过的并发连接(特别是静态小文件场景下),达到更高的访问效率;在功能上Nginx不单是一个优秀的Web服务软件,还可以作为反向代理负载均衡及缓存服务使用。
初学者学习Nginx之前建议学习Apache,这样,我们很快就会熟悉Nginx软件,两者类似,都是属于开源软件,支持高性能,高并发的WWW的服务和服务软件。

俄罗斯当之无愧的第二大本土搜索引擎
当初,就是用nginx搭建的


到目前为止,我们还没有发现操作系统ISO镜像自带,可以使用yum直接通过rpm包安装Nginx的情况。如果要使用yum安装Nginx则需要配置epelyum源或者官方去寻找。
在实际的应用场景中,运维同事们都是以编译方式安装。可以浏览Nginx英文官方网站来获取镜像。
http://nginx.org/
查看到最新版本都更新到了1.15.7,证明社区作者维护的特别勤奋啊!!!!!

安装Nginx前提准备条件
安装Pcre ,全称为perl compatioble regular expressions ,中文名称叫做:perl兼容正则表达式,安装pcre库是为了是nginx支持具备URI重写功能的rewrite模块,这个模块是业务应用中必须用的到,后文会介绍。

查看服务器版本以及位数:
[root@Centos6 ~]# cat /etc/redhat-release

[root@Centos6 ~]# uname -r


在企业的实际工作中,凡是名称中带有 devel字符串的软件包是必须要安装的。
查询是否安装pcre 和pcre-devel
[root@Centos6 ~]# rpm -qa pcre pcre-devel
查询到系统默认只装了一个pcre软件,我们还需要安装另外一个。

下载pcre和pcre-devel
[root@Centos6 ~]# yum install pcre prce-devel -y
yum 安装的pcre版本有些低,但是一般生产环境中是不会影响使用的。
[root@Centos6 ~]# yum install pcre pcre-devel -y

安装完成后别忘记检查:

安装openssl-devel
这个库文件,使我们在使用HTTPS业务需求需要用的上的,不安装报错!
[root@Centos6 ~]# yum install -y openssl openssl-devel
[root@Centos6 ~]# rpm -qa openssl openssl-devel

编译安装Nginx的好处在于灵活。这里我选择nginx1.6.3的版本。
下载地址:http://nginx.org/download/nginx-1.6.3.tar.gz
Nginx软件有三种版本,分为稳定版,开发板和历史稳定版。
这里我选择是1.6.3stable是稳定版的意思。

我们建立一个工具目录....目的养成良好的运维习惯。


复习安装上传下载小命令:[root@Centos6 tools]# yum install lrzsz -y


上传完成后,检查安装软件

解压软件:
[root@Centos6 tools]# tar xf nginx-1.6.3.tar.gz


创建一个指定用户:
[root@Centos-6 ]# useradd nginx -s/sbin/nologin -M

建立好后检查该用户。

编译参数如下:
./configure \
--user=nginx \
--group=nginx \
--prefix=/application/nginx1.6.3 \ 指定的安装,此路径可不存在,应该是自 动生成的。
--with-http_stub_status_module \ 状态模块。
--with-http_ssl_module open-ssl模块
一定要在解压目录下面进行安装:

并用echo $?检查安装是否正常或者没有error。返回0就正常、!

还有就是主要生成了下面这个文件:

在本次编译安装实验中,我遇到的问题如下:这个错误代表了编译安装参数中有空格.......


最后需make make install来最终安装。


在实际的生产环境中,我们需要建立一条软链,方便运维工作使用(主要是去掉版本号,访问效率会更高一些):
[root@Centos6 tools]# ln -s /application/nginx1.6.3/ /application/nginx
正常状态是浅蓝色只想源文件目录,错误状态是红色背景方块闪烁。


启动并检查nginx安装结果
因为在安装完Nginx后,并不能能直接对外提供服务,因此需要先启动Nginx服务才行。
①启动前检查配置文件语法
出现如图所示红框处的内容,代表语法配置正常,再启动服务前检查语法非常重要,可以防止因配置错误导致网站重启或重新加载配置对用户的影响。

②启动nginx,启动命令如下
不报错,就代表启动成功。

查看Nginx服务所对应的服务端口是否成功启动。
[root@Centos6 tools]# netstat -lnpt|grep nginx
[root@Centos6 tools]# lsof -i :80


④检查Nginx启动的实际效果
这是用crul命令检测[root@Centos6 tools]# curl 127.0.0.1

浏览器输入:URL路径http://192.168.0.130/
这是最为稳妥的测试办法(URL路径),如果浏览器访问不了,我们应检查是否关闭防火墙以及SELinux,两端网络连接和telnet服务是否正常。

查看Nginx日志文件:
[root@Centos6 tools]# cat /application/nginx/logs/error.log

当交接一台台服务器,又想知道这个Nginx编译安装是什么样的编译代码:
[root@Centos6 tools]# /application/nginx/sbin/nginx -V

到此,nginx安装测试工作到此结束。
简单部署web站点
在实际工作环境中,搭建好Nginx服务之后,我们需要配合开发人员将开发好的程序全部放到:/application/nginx/html这个路径下面

index.html:站点的首页文件,这个首页文件就是我们看到的wecome的网页文件。

那么,为什么说这个Index.html就是站点首页和站点目录呢??查看下Nginx的配置文件就可以得到结果:
[root@Centos6 html]# grep html /application/nginx/conf/nginx.conf

删除掉Nginx默认的首页文件,建立一个index.html文件,加入如下网页内容并保存,上传一个自己保存的一个网站html文件


测试访问结果如下:


Nginx软件功能模块说明
Nginx软件之所以强大,是以为它具有众多的功能模块。
列出企业常用的重要模块:
①Nginx核心功能模块
②标准的http功能模块
关于更多的模块,查询Nginx的官方网站,点击红框文档选项。

能够查看到有很多模块。

Nginx Core funcitionlity *(核心模块)
相关连接:http://nginx.org/en/docs/ngx_core_module.html

标准的http功能模块集合:
列举企业中常用的。

大概了解完Nginx功能模块,接下来要了解Nginx软件的全貌,看下安装后的Nginx整体目录结构及其文件功能:
[root@Centos6 conf]# tree /application/nginx
这三个目录,日后会在PHP动态程序中用的上。

媒体类型:互联网中的数据有很多不同的类型,Web服务器会把通过Web传输的每个对象都打上MIME类型,(即mime.type)的数据格式标签,用它来描述数据并标记不同的数据内容类型。

主要关注的Nginx主配置文件:结尾为default的文件都是备份文件。这里,我们重点讲解这个配置文件。

Nginx主配置文件nginx.con是一个纯文本类型的文件(其他配置文件大部分也是这样。)它位于如下路径:

整个配置文件是以区块的形式组织的,每一个区块以一个{}来表示,区块可以分为几个层次,{号为事件区块开始,}号为事件区块结束!配置文件的每个结尾都要以;号结尾!
[root@Centos6 conf]# cat nginx.conf
整个配置文件中Main区位于最上层,在Main区下面可以有Events区,HTTP区(还包含server区块,location区块)等层级。
如图所示:红框表示Main区,位于最上层,属于核心模块。
①其中这个1代表了worker进程的数量
②5.6.7行为错误日志,错误日志是具有级别。
③PID代表了nginx进程号,将来管理Nginx可以利用PID来杀死Nginx任务。

Events区:
存储着事件,{号为事件区块开始,}号为事件区块结束!
在每个(1个worek)worker进程支持最大的连接数,图中配置了1024个连接数为最大连接数。
因此,如果有人问:Nginx可以最大支持多大连接数,计算公式为多个worker在乘以1024。建议连接数不要过大,woreker数量和CPU数量保持相同。

HTTP区域:一直到结尾,由于配置文件过于长,包含的参数也很多这里不过多截图,后续文章会详细分析。

众多的参数中,要重点关注下server 标签,从红框处的server标签中,就可以理解,为什么nginx 的首页文件默认是index.html了吧!

其中server标签中的 location区块的作用是:默认的访问请求都是响应location区块里的内容,说白了,就是让这个域名后面的文件显示什么或者做什么!根据URL进行实现跳转功能。

Nginx的配置文件有数百行,为了最小化分析Nginx核心的配置文件参数,筛选命令如下:
[root@Centos6 conf]# egrep -v "#|^$" nginx.conf.default
这样,我们会看的更清楚一些。深入学习的话建议去官网中每个功能模块去查看,
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}







