1. Nginx 是什么?

Nginx 是由俄罗斯的工程师 Igor Sysoev 在 Rambler 集团任职系统管理员时利用业余时间所开发高性能 web 服务,官方测试 Nginx 能够支撑 5 万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定,所以现在很多知名的公司都在使用 Nginx 或者在此基础上进行了二次开发,包括淘宝、新浪、百度等。对于中小型企业而言,开源免费而又性能强大的 Nginx 必然也是首选,后续我们将看到一组统计数据来说明 Nginx 的应用之广泛。

关于 Nginx官网,目前支持英语和俄语版说明,网站没有优化,符合简约粗暴的Russia风格。

Nginx (engine x)是一个开源、高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务”。


2. Nginx 使用场景

Nginx 的使用场景如下:

2.1 HTTP 服务器

Nginx 作为 Web 服务器能独立提供 Http 服务。另外,我们常常通过 Nginx 作为静态资源服务器来访问服务器上的静态资源,比如对于最新热门的前后端分离架构,前端打好包后直接放到某个地址,在 Nginx 配置后可以通过 Nginx 来访问主机上的前端页面。

2.2 反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。这样的好处是,将不暴露内部的服务地址,只统一使用一个公共出口,通过 URI 匹配转发到不同的内部服务处理请求。
这点应用的最多,很多国有企业内部服务器按照要求,不能直接连接外网,单据的配置一台反向代理服务器,实现转发,比如金蝶的影像服务器。

2.3 负载均衡

负载均衡也是 Nginx 的一个高频使用场景,对于下游存在的多个相同服务,可以将请求采用某种策略(随机、轮询、权重)发到相应的服务处理。这样由于多个相同服务的存在,可以实现高可用功能,在一个服务不可用时,Nginx 会自动发现并将其剔出服务集群,将请求转发给正常的服务进行处理。

2.4 第三方插件

基于第三方插件,Nginx 可以完成各种各样复杂的功能,全方位满足程序员的想法。比如在 Nginx 中引入 lua 模块,可以实现对 Http 请求更细粒度的限制,包括限速、限流、校验认证等等。后续,在 Nginx 上发展出来的 OpenResty 已经应用到了微服务网关方向。


3. CenterOS下部署

笔者正在参加Ningx体系的培训和考试,官方认证通道和ORACLE类似,层级如下:

考试通过会有电子和实体证书,考试通过摄像头监考,需要在120min中回答100道题,60分及格。证书样本如下:

3.1学习一门工具体系先从安装环境开始,从0-1:

Nginx 是完全使用 C 语言开发的,所以必须要有 C 编译环境,往往 CentOS 7.6 的环境会预装 gcc 编译器,所以不用额外安装,如果没有使用 yum 直接安装即可。另外,我们使用 Nginx 的压缩功能、正则表达式功能等,需要安装一些额外的依赖库,这是必须要做的,不然在编译阶段就会报错。如下 3 个是比较 Nginx 中比较常用模块所依赖的库,请在执行 Nginx 源码编译时提前安装好。

$ sudo yum install -y zlib zlib-devel
$ sudo yum install -y pcre pcre-devel
$ sudo yum install -y openssl openssl-devel

从官网下载对应的安装包,并用WINSCP上传到云服务器上,进行安装,官网路径在文章开头,

编译并安装

$ cd nginx-1.28.0
$ ./configure                # 编译,检查依赖是否正确
$ make && sudo make install  # 安装

但是这样往往不是我们需要的。特别是在 Nginx 中,可以指定安装某些或者不安装某些模块,默认安装的模块只适合简单的场景,往往在稍微复杂的情况下,就需要额外添加其他模块,或者第三方以及自定义的模块。这高可扩展性正是 Nginx 的一大亮点。想要查看 configure 的可选参数,使用 --help 选项即可:

$ ./configure --help

在所有可选参数中,最常用的有两个:

–prefix=PATH:配置 Nginx 安装部署的根目录。类似于在 Windows 下安装软件,我们指定安装目录;
–with-xxx_module:–without-xxx_module 其中 xxx 表示 Nginx 一个模块的名称,例如:
with-http_ssl_module -> 支持 SSL/TLS, 即 HTTPS
with-http_v2_module -> 支持 HTTP/2
without-http_fastcgi_module -> 不使用 fastcgi
为了后续测试功能完善,这里我们编译时候,尽可能多的引入一些模块:

$ ./configure  --prefix=/root/nginx          \
--with-http_ssl_module                       \
--with-http_stub_status_module               \
--with-http_gzip_static_module               \
--with-stream                                \
--with-http_realip_module                    \
--with-http_flv_module                       \
--with-http_random_index_module              \
--with-mail                                  \
--with-pcre                                  \
$ make && sudo make install

这里 “\” 在 Linux 系统环境下表示两行之间没有换行,只是为了方便展示命令。一般而言,Nginx 的编译是比较顺利的,偶尔报错是大部分因为需要增加的模块依赖的一些库没有事先安装好。

对此,我们可以根据报错信息进行修正问题,保证编译顺利进行。在上一步骤成功后,可以看到 Nginx 我们生成的 Nginx 编译后的根目录了。简单说明根目录下的内容:

2.1 conf 目录
这里放的是 Nginx 的相关配置文件,最重要的莫过于 nginx.conf 了,这个是默认的配置文件。

2.2 html 目录
这里有 2 个简单的 Nginx 页面,分别为 50x.html 和 index.html,index.html 是 Nginx.conf
中默认访问的页面,也就是我们后续启动 Nginx 时,默认访问 80 端口的页面。

2.3 logs 目录
暂时为空,启动 Nginx,使用默认的 Nginx.conf 配置文件,会在当前目录下生成 3 个文件,分别为:

access.log (记录所有请求)
error.log (记录所有错误信息)
nginx.pid (Nginx 启动的主进程 id)
2.4 sbin 目录
最最重要的文件了,C 编译的工作,最后就是为了得到这样一个二进制文件。Nginx 的启动、重新加载、停止等都是靠该命令完成。我们一般会将该目录放到系统的 PATH 变量中,这样是为了方便直接使用 Nginx 命令,系统能找到该二进制文件。不然的话,我们使用该命令就必须输入全路径,类似下面这样:

  1. 操作 Nginx
    在 Nginx 命令行的使用中,有几个非常重要的参数,也是在操作 Nginx 时经常用到的:
    常用参数
    作用-t 测试 Nginx.conf 文件的语法是否正常
    c 指定 nginx.conf 文件
    -s 最重要的操作,不带 - s 是启动,
    -s reload 是热加载
    -s stop 是停止,
    -s reopen 是重新打开日志

实例:

# 进入sbin目录
$ cd /root/nginx/sbin
# 启动Nginx
$ ./nginx
# 检查nginx.conf
$ ./nginx -tc /root/nginx/conf/nginx.conf
# 重新加载nginx
$ ./nginx -s reload
# 停止nginx
$ ./nginx -s stop 

启动 Nginx 后,首先使用 ps -ef | grep nginx 可以查看 Nginx 进程是否已经启动,基于默认的配置,我们将看到 2 个 Nginx 的启动进程:master 进程和 worker 进程。

这是我们在前面讲到的 Nginx 的 Master-Worker 机制,后面会进行详细讲解。另外,我们可以用命令 netstat -anltp | grep 80,看到 CentOS 上已经在监听 80 端口,而这个监听服务正是 Nginx。最后可以用浏览器或者 curl 命令直接在 CentOS 机器上检查 Nginx 服务:

$ curl http://localhost

当出现 “Welcome to Nginx!" 这样的欢迎语句,表明我们的 Nginx 已经正常运行了。

至此Ningx在centeros 就安装完成。具体的操作和配置建议查询官方文档。
下一篇进入ningx配置.

NGNIX在CENTEROS 下部署相关推荐

  1. CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...

    CAS (10) -- JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法 jboss版本: jb ...

  2. 在tomcat下部署两个或多个项目时 log4j和web.xml配置webAppRootKey 的问题(转)

    在tomcat下部署两个或多个项目时 web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为"webapp.root",如下: <!-- 应用路径 ...

  3. OSSIM下部署HIDS

    OSSIM下部署HIDS OSSEC是OSSIM下的IDS之一,在系统中作为HIDS.通常如果你自己手动安装Ossec Server/Ossec Agent,很多精力花在安装部署和排错上,而且自己搭建 ...

  4. linux上部署mysql服务_在Linux环境下部署MySql服务

    之前有下载部署过几次,但是每次都会踩一些坑.特此记录在liunx下部署安装mysql的基本步骤: 1.卸载老版本的mysql find / -name mysql|xargs rm -rf     查 ...

  5. linux发布java网站_Linux下部署java web项目

    首先安装mysql 服务,可以参考我另外的一篇博客   centos7下部署mysql服务 Linux下的mysql是区分数据库表名的大小写的 修改 /etc/my.cnf 文件 在 [mysqld] ...

  6. ISA2006 之 域环境下部署

    域环境下部署ISA2006 一 准备实验环境 简单拓扑图如下: 二 开始部署 1.安装和配置DC和DNS DOMAIN NAME:TESTISA.COM HOSTNAME:2K3DCSERVER IP ...

  7. 模拟浏览器自动化测试工具Selenium之五Centos系统命令行下部署selenium环境试验

    一.背景:     Selenium是一个web自动化测试框架,也支持从HTML页面上爬取javascript生成的或AJAX的内容.     selenium2支持通过各种driver(Firfox ...

  8. 【Zabbix】CentOS6.9系统下部署Zabbix-server 3.0

    [Zabbix]CentOS6.9系统下部署Zabbix-server 3.0 目录 安装Zabbix 关闭selinux 删除旧版本MySQL5.1数据库 安装MySQL 5.6数据库 安装PHP ...

  9. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...

最新文章

  1. 单例设计模式-反射攻击解决方案及原理分析
  2. mysql和oracle数据库兼容性_oracle数据库兼容mysql的差异写法
  3. ironpython 开发_[IronPython]IronPython开发环境的安装与设定
  4. 数据状态什么是事务?
  5. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》
  6. 集中器到服务器传输协议,集中器130通讯协议(捷先数码).doc
  7. 最齐全的骨头VRay材质球素材,速来收藏
  8. Java、对字符串中的字符排序
  9. 态势感知平台分析流程
  10. 软件工程 教师信息管理系统
  11. Excel技能——批量生成excel的工作表名称目录链接
  12. 用python 控制台打印图片示例
  13. [Android Traffic] android 流量计算方法
  14. idea-svn文件名字浅蓝色(蓝绿色)含义
  15. robots文件的优化
  16. 0x77A26B83 (ntdll.dll) 处有未经处理的异常: 0xC0000374: 堆已损坏。
  17. Hark的数据结构与算法练习之插入排序
  18. NVIDIA Jetson AGX Xavier
  19. Win32开发:完整的开发流程
  20. AUTO CAD 圆角如何转换为直角?

热门文章

  1. 匿名管道和命名管道(代码剖析)
  2. 关于雷蛇耳机麦克风突然失灵
  3. beeline连接hive的两种方式
  4. 《Java程序性能优化》-笔记
  5. WARNING: Ignoring invalid distribution -ip 解决方案
  6. Qt windows端的蓝牙串口服务
  7. 快来西瓜创客吃瓜啦!
  8. Unity3D合成大西瓜
  9. 【数据结构与算法】期末复习刷题日寄Part01
  10. linux把u盘只读文件,完美解决linux下U盘文件只读的问题