无论你用浏览器还是APP访问多数网站,到达的第一站就是Nginx。

后来者居上的Nginx

千禧年前后,互联网业务迎来了高速发展,老牌的Web服务器都无法满足高性能、高可靠的市场需求。

一个开源的(遵循BSD许可证)、流行的HTTP和反向代理服务器在2004年应运而生,它就是Nginx。它作为HTTP服务器可以用较少的内存来提供可靠的静态站点服务,同时作为反向代理支持HTTP、电子邮件、TCP和UDP等多种协议,可以用作多个上游服务器的流量入口。所谓后来者居上,Nginx出道十五年经历了几百个版本的快速迭代(其中,2008年发布的Nginx0.7.0解决了C10K问题迎来了Nginx的高速发展),如今稳居市场占用率榜首。 (Netcraft官网统计数据显示2019年10月市场占有率32.88%)

Nginx相对于其他Web服务器有绝对的优势赢得市场的认可。

因此,多数互联网公司使用Nginx这位业界“流量担当”来承担流量入口庞大而繁复的数据传输工作。

Nginx安装

Nginx官方提供了Nginx Community(Nginx开源版本)和Nginx Plus(Nginx商业版本)两个发行版,其Nginx Plus在监控、可用性等方面做了大量的优化。另外,淘宝网基于Nginx Community定制化发布了Tenginx发行版;章亦春(原淘宝员工))基于Nginx Community与 Lua 完美结合发布了OpenResty,OpenResty可以方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

多数互联网公司出于业务和成本的考虑选择使用Nginx Community发行版,故后文重点介绍Nginx Community。

Nginx支持的操作系统包含Linux、Windows、macOS、Solaris、AIX、HP-UX 、FreeBSD等,后文主要介绍Nginx在Linux和Windows上实践。

Windows操作系统下安装Nginx

在Windows操作系统下安装Nginx支持二进制安装方式和源码安装方式。

由于源码安装方式较为复杂不推荐使用,有兴趣的朋友可以参照官方文档http://nginx.org/en/docs/howto_build_on_win32.html

Windows操作系统下使用二进制安装方式非常简单,1.下载安装包,官方链接http://nginx.org/en/download.html ;2.将压缩包解压到一个不包含空格的路径中3.在cmd.exe中执行start nginx.exe启动服务

虽然,Windows操作系统下使用二进制方式安装Nginx非常简单,但是由于缺少一些特性(可以启动多个Worker进程,但只有一个Worker进程工作;不支持UDP代理功能),Nginx官方将其定义为Beat版本不可用于生产环境。参考链接:http://nginx.org/en/docs/windows.html

Linux操作系统下安装Nginx

在Linux操作系统下安装Nginx支持二进制安装方式和源码安装方式。Linux操作系统的版本较多且安装方式类似,本文以CentOS 7为例。

二进制的安装方式比较简单,可以使用Nginx官方预编译的包进行安装。方式一:使用官方repository仓库安装主线稳定版本的Nginx(参考链接:http://nginx.org/en/linux_packages.html#RHEL-CentOS

#安装依赖

sudo yum install yum-utils

#要设置yum存储库,请创建/etc/yum.repos.d/nginx.repo 包含以下内容的文件

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=1

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

[nginx-mainline]

name=nginx mainline repo

baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/

gpgcheck=1

enabled=0

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

#默认情况使用主线的稳定版Nginx

sudo yum-config-manager --enable nginx-mainline

#执行安装Nginx

sudo yum install nginx

方式二:下载官方预编译好的Nginx软件进行安装。(官方下载地址http://nginx.org/packages/centos/7/x86_64/RPMS/

#安装Nginx

sudo yum install nginx-$version.rpm

#启动服务

Systemctl start nginx

二进制安装Nginx的方式虽然简单易用,但是,可定制性弱,不能按需选择定制模块和功能。因此,在生产环境中,我们通常会选择源码的安装方式。

源码安装方式分为几个步骤:下载源码、安装操作系统依赖、执行./configure 配置、make编译步骤和make install 安装步骤。

我们可以通过官网下载我们需要的Nginx源码(参考地址:http://nginx.org/download )。由于Nginx的Rewrite模块和SSL模块依赖操作系统的pcre-devel和openssl-devel,因此我们需要提前安装操作系统依赖。

#安装操作系统依赖

yum install pcre-devel openssl-devel

./configure配置步骤,我们可以通过./configure –help指令可以查看可配置项如安装目录、启动用户、默认安装的模块、指定安装的模块等。此处给出一个简单的示例:

#安装操作系统依赖

./configure --prefix=$path --with-http_ssl_module --with-pcre

./configure配置步骤Nginx脚本会检查操作系统依赖等是否符合预期。如果,执行过程没有错误输出则配置正常,我们可以执行编译和安装步骤。

make

make install

待执行完成如上指令后,我们的Nginx已经完成安装。我们可以通过如下的指令管理Nginx。

$path/nginx -h                #查看帮助文档

$path/nginx -v|V              #-v查看版本号,-V可以查看版本号、编译参数更多详细信息

$path/nginx                     #启动Nginx服务

$path/nginx  - s quit         #停止Nginx服务

$path/nginx -s reload        #优雅重启Nginx

$path/nginx -t                 #验证配置文件正确性并退出

$path/nginx -T                 #验证配置文件正确性,并dump后退出

待启动Nginx后,可以通过浏览器访问http://127.0.0.1查看Nginx的欢迎页面。

Nginx目录结构

Nginx安装完成后在安装目录中中生成了一些文件和目录。conf目录存放配置文件,其中nginx.conf是主配置文件;html目录存放Nginx提供的默认页面;logs目录存放日志文件,包含错误日志和访问日志;sbin目录存放Nginx二进制文件,用于管理Nginx服务;*_temp目录:存放缓存文件等。

Nginx的主配置文件是conf/nginx.conf,通常我们通过修改该文件搭建Web服务器、反向代理服务器等。它分为全局配置、事件配置、HTTP配置、Stream配置和Mail配置几个部分。

全局配置主要Nginx启动用户、Worker进程个数等类似的全局配置。

事件配置主要配置事件类型、最大连接数等配置。

HTTP是我们较为常用的配置部分,它可以定义所有的HTTP相关的配置,如定义HTTP全局配置、定义虚拟机、定义Location等。

Stream配置中定义所有TCP|UDP相关的配置。

Mail配置中定义所有邮件相关的配置。

Nginx实现反向代理(Demo)

在Nginx的HTTP配置段增加一个虚拟主机www.zhanglaotang.com,将该域名的的请求代理到Nginx的首页。

server{

listen 80;

server_name www.zhanglaotang.com;

location / {

proxy_pass http://nginx.org/;

}

}

完成配置修改后,执行nginx -t 检查配置的正确性,并完成nginx -s reload优雅重启Nginx让其配置生效。

实验成功后,我们可以看到访问www.zhanglaotang.com返回的结果是Nginx的首页内容。

认识Nginx的更多相关文章

  1. accept_mutex与性能的关系 (nginx)

    注:运行环境CentOS 6+   背景      在对启动了20个worker的nginx进行压力测试的时候发现:如果把配置文件中event配置块中的accept_mutex开关打开(1.11.3版 ...

  2. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  3. 【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

    一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...

  4. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  5. nginx+php的使用

    原文来自:windows下配置nginx+php环境 按照他的步骤走,亲测可用! 但是这里他后面说的根目录可能有些人有点懵. 其实在设置的时候就设置了: 网站根目录就是www这个目录,如果没创建请自行 ...

  6. nginx的使用

    1.nginx的下载 解压后文件目录: 2.nginx的常用命令 nginx -s stop 强制关闭  nginx -s quit 安全关闭  nginx -s reload 改变配置文件的时候,重 ...

  7. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  8. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  9. nginx源码分析之模块初始化

    在nginx启动过程中,模块的初始化是整个启动过程中的重要部分,而且了解了模块初始化的过程对应后面具体分析各个模块会有事半功倍的效果.在我看来,分析源码来了解模块的初始化是最直接不过的了,所以下面主要 ...

  10. Nginx如何处理一个请求

    看了下nginx的官方文档,其中nginx如何处理一个请求讲解的很好,现在贴出来分享下.Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听 ...

随机推荐

  1. 74)PHP,Session的一些属性

    (1) (2)有效期在  会话周期结束(就是将浏览器关闭前) (3)有效路径:  整站都有效 (4)有效域:当前域 (5)是否安全传输:否 (6)以上的session数据的特征都是由一个问题导致的,就 ...

  2. Spring_IOC

    我们都知道,如果要在不同的类中使用同一个对象一般我们我们都需要在每一个类中都去new一个新的对象,也有的人会为这个对象写一个工具类,无论哪种方法都需要我们自己去创建,不但繁琐,而且相当耗损资源,所以才 ...

  3. bootstrap实现多选项及回显

    1.前端 <link rel="stylesheet" href="${ctxStatic}/js/bootstrap-select-1.12.2/dist/css ...

  4. webstrom IDE 正则替换

    ide:webstrom 其他IDE,可以自行测试. 目的. 将excel的table两列(一般是中文名,英文名,改为Javascript 对象) 从 场所内网IP地址 IP_ADDRESS 源外网I ...

  5. linux debain systemd 开机启动 nodejs 兼容原initd启动 forever 开机自启

    布署环境为debian 7.5 布署到一台新机器,系统版本为debian 8.0 原启动项 /etc/init.d/mongo_service 开机居然无法自起 开机自启动不能用了,看页面输出就发觉不 ...

  6. mac android sdk manager 无法更新(被墙)

    http://www.androiddevtools.cn/ 一句话,相见恨晚!! 想把以前的旧安卓项目拿到MAC上 环境就卡住了,以前的包是4.4的,想试试5.0的,更新不动 Android Too ...

  7. 位移&二进制转换&原码&反码&补码

    << 左移 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 格式 需要移位的数字 << 移位的次数 计算过程 1. 按二进制形式把所有的数字向左 ...

  8. JS做深度学习3——数据结构

    最近在上海上班了,很久没有写博客了,闲下来继续关注和研究Tensorflow.js 关于深度学习的文章我也已经写了不少,部分早期作品可能包含了不少错误的认识,在后面的博文中会改进或重新审视. 今天聊聊 ...

  9. LINQ之路 6:延迟执行(Deferred Execution) 笔记

    这里刚看的时候不理解. 这个特性在我们通过foreach循环创建查询时会变成一个真正的陷阱.假如我们想要去掉一个字符串里的所有元音字母,我们可能会写出如下的query: IEnumerable< ...

  10. POJ 2226 Muddy Fields 二分图(难点在于建图)

    题意:给定一个矩阵和它的N行M列,其中有一些地方有水,现在有一些长度任意,宽为1的木板,要求在板不跨越草,用一些木板盖住这些有水的地方,问至少需要几块板子? 思路:首先想到如果没有不准跨越草的条件则跟 ...