Nginx的基本概念

1)Nginx是什么?能做什么?

Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好

2)反向代理

【1】正向代理

在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问,如下图

【2】反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率

简单的说就是,用户访问反向代理服务器然后通过反向代理服务器来转发到你想要访问到的内容(服务器)这就是反向代理

3)负载均衡

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡*(Load Balance)*其意思就是分摊到多个操作单元上进行执行,例如Web服务器FTP服务器企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

4)动静分离

为了加快网站的解析速度,将网站的动态请求和静态请求通过不同的服务器来解析,加快原来单个服务器解析的速度

Nginx安装、常用命令和配置文件

1)linux中安装

去官网下载 最新稳定版http://nginx.org/en/download.html

  • 安装相关依赖(pcre、openssl、zlib 、 gcc )

    (1)安装pcre 依赖

    ​ Linux系统需要联网,下载压缩包

    ​ 执行命令

    wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
    

    ​ 下载完之后解压 tar -xvf pcre-8.37.tar.gz

    ​ 解压完进入pcre-8.37 直接执行 ./configure ,执行完之后使用命令 make && make install

    ​ 之后检查是否安装完成 pcre-config --version

    ​ (2)安装 openssl、zlib 、 gcc

    ​ 执行命令

    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
    
  • 安装nginx

    将下载好的压缩包传到linux系统中,解压 tar -xvf nginx-1.16.1.tar.gz

    进入解压目录 执行 ./configure

    最后一步 make && make install

    安装成功之后,可以在 /usr/local目录下有个nginx 目录,进入 nginx 目录可以看到有一个 sbin 进入该目录之后 运行 ./nginx 启动服务

    查看默认端口 进入 cd /usr/local/nginx/conf

    找到nginx.conf

    vim nginx.conf

    所以默认为 80 端口,之后在要开防火墙,如果是服务器,则要开安全组

    之后就可以通过 ip地址直接访问

2)常用命令

  • 查看nginx 的版本号

    在sbin 目录下 ./nginx -v

  • 启动

    在sbin 目录下 ./nginx

  • 关闭nginx

    在sbin 目录下 ./nginx -s stop

  • 重加载

    ./nginx -s reload

3)配置文件

第一部分 全局块

例如:worker_processes 1 这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约

第二部分 events 块

events 涉及的指令主要影响Nginx服务器与用户的网络的链接

如:worker_connections 1024;支持做大连接数

第三部分 http块

这算是Nginx服务器配置中最频繁的部分代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

http块又包括http全局块server块

【location 块】

一个 server 块可以配置多个 location 块。

这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称

(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓

存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

nginx配置实例

反向代理

修改nginx配置如上图:当访问192.168.17.129时ngnix服务器会转发到匹配中的 location中的proxy_pass 的地址中

详解location的匹配指令

= 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求

~ 用于表示uri包含正则表达式,井且区分大小写

* 用于表示uri包含正则表达式,并且不区分大小写
^
用于不含正则表达式的uri 前,要求Nginx服务器找到标识uri和请求字符串匹配度最高的location 后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配

注意: 如果uri包含正则表达式,则必须要有~或者 ~* 标识

通过nginx配置集群

在企业级项目中绝对离不开,多台服务器组成集群,所以我们可以通过nginx来配置集群环境

upstream myserver {
	server ip地址:8080;
	server IP地址:8081;
}
server {
        listen       80;
        server_name  myloadbalancing.com;

        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
			proxy_pass http://myserver;  # 转发路径
			proxy_connect_timeout 600;
			proxy_read_timeout 600;
        }
}

负载均衡策略

  1. 轮询(默认)

  2. 权重(weight)

    权重越高,被访问的几率就越大,配置也是很简单,如下:

    upstream myserver {
    	server ip地址:8080 weight=10;
    	server IP地址:8081 weight=3;
    }
    
  3. ip分配(ip_hash)

    同你访问的ip来指定访问那个,ip不换就一直是访问一个,配置方法

    upstream myserver {
        ip_hash
        server ip地址:8080;
        server IP地址:8081;
    }
    
  4. fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配

    upstream myserver {
        server ip地址:8080;
        server IP地址:8081;
        fair
    }
    

Nginx动静分离

Nginx动静分离基本概念

Nginx 动静分离简单的来说就是把动态请求和静态请求分开,切记不能理解为单纯的把动态页面和静态页面物理的分离,通过location 指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏
览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires 来缓存),我这里设置3d,表示在这3天之内访问这个URL, 发送个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。

怎么配置

#静态文件交给nginx处理
		location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|
		zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
		{
			root /static;
			expires 30d; #30天
		}
		#静态文件交给nginx处理
		location ~ .*\.(js|css)?$
		{
			root /static;
			expires 1h;#一小时
		}


Nginx的高可用集群

为了高可用,单单一个nginx服务是不够的,假如Nginx宕机了那系统就崩了,所以我们需要两台以上的服务器来做高可用

在这之前你需要安装 keepalived

yum install keepalived -y

安装之后,在etc里面生成目录keepalived, 有文件keepalived.conf.
具体步骤请移步:https://www.cnblogs.com/woniusky/p/11050499.html

nginx原理

master和worker

master:读取并验证配置文件nginx.conf;管理worker进程;

worker:每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;注意Worker进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。

nginx是怎么做到热部署的

修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

只有不断的努力才会有更大的惊喜等着你去发现!!