nginx 基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 基础相关的知识,希望对你有一定的参考价值。

nginx概述

nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。

这里主要通过三个方面简单介绍nginx
 反向代理
 负载均衡
 nginx特点

正向代理

说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理

在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
技术分享图片

反向代理

明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用nginx进行反向代理实现的,并且通过封装nginx和其他的组件之后起了个高大上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官网查看具体的信息:http://tengine.taobao.org/
技术分享图片
通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色

反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!

2. 负载均衡

我们已经明确了所谓代理服务器的概念,那么接下来,nginx扮演了反向代理服务器的角色,它是以依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?

这里提到的客户端发送的、nginx反向代理服务器接收到的请求数量,就是我们说的负载量

请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则

所以~将服务器接收到的请求按照规则分发的过程,称为负载均衡。
技术分享图片

特性:

1模块化设计,较好的扩展性
2高可靠性
3支持热部署:不停机更新配置文件,升级版本,更换日志文件
4低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存
5event-driven,aio,mmap,sendfile

基本功能:

1静态资源的web服务器
2http协议反向代理服务器
3pop3/imap4协议反向代理服务器
4FastCGI(LNMP),uWSGI(python)等协议
5模块化(非DSO),如zip,SSL模块

nginx的程序架构

web服务相关的功能:
虚拟主机(server)
支持 keep-alive 和管道连接
访问日志(支持基于日志缓冲提高其性能)
url rewirte
路径别名
基于IP及用户的访问控制
支持速率限制及并发数限制
重新配置和在线升级而无须中断客户的工作进程
Memcached 的 GET 接口
 master/worker结构
 1一个master进程:
 负载加载和分析配置文件、管理worker进程、平滑升级
 2一个或多个worker进程
 处理并响应用户请求
 3缓存相关的进程:
    cache loader:载入缓存对象
    cache manager:管理缓存对象
### nginx模块
1nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载

模块分类:

1核心模块:core module
2标准模块:
? HTTP 模块: ngxhttp
HTTP Core modules 默认功能
HTTP Optional modules 需编译时指定
? Mail 模块 ngxmail

? Stream 模块 ngxstream*
3 第三方模块
技术分享图片

1核心模块:是 Nginx 服务器正常运行 必不可少 的模块,提供 错误日志记录 、配置文件解析 、 事件驱动机制 、 进程管理 等核心功能
2标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等
3可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊
的服务,比如: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全
协议 SSL 支持等
4邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、
IMAP 协议和 SMTP协议的支持
5第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如:Json 支持、 Lua 支持等

nginx的功用

1 静态的web资源服务器
html,图片,js,css,txt等静态资源
2 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
3 http/https协议的反向代理
4 imap4/pop3协议的反向代理
5 tcp/udp协议的请求转发(反向代理)

nginx目录结构和命令

1 ls /usr/local/nginx/
html是测试页,sbin是主程序
2 ls /usr/local/nginx/sbin/
nginx 只有一个程序文件
3 ls /usr/local/nginx/html/
50x.html index.html 测试网页

Nginx:默认为启动nginx

-h 查看帮助选项
-V 查看版本和配置选项
-t 测试nginx语法错误
-c filename 指定配置文件(default: /etc/nginx/nginx.conf)
-s signal 发送信号给master进程,signal:stop, quit, reopen, reload
示例: nginx -s stop 停止nginx
nginx -s reload 加载配置文件
-g directives 在命令行中指明全局指令

nginx配置

1 配置文件的组成部分:
主配置文件:nginx.conf
子配置文件 include conf.d/*.conf
fastcgi, uwsgi,scgi等协议相关的配置文件
mime.types:支持的mime类型
2 主配置文件的配置指令:
directive value [value2 ...];
注意:
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由Nginx模块引入,可直接引用
自定义变量:由用户使用set命令定义
set variable_name value;
引用变量:$variable_name

    #### 主配置文件结构:四部
1 main block:主配置段,即全局配置段,对http,mail都有效
    event {
 ...
           } 事件驱动相关的配置
2 http {
    ...
   } http/https 协议相关配置段
3 mail {
  ...
   } mail 协议相关配置段
4 stream {
    ...
  } stream 服务器相关配置段

#### http协议相关的配置结构
     http {
            ...
            ... 各server的公共配置
            server { 每个server用于定义一个虚拟主机
                     ...
                          }
            server {
                      ...
                   server_name 虚拟主机名
                    root 主目录
                   alias 路径别名
                   location [OPERATOR] URL { 指定URL的特性
                                    ...
                                 if CONDITION {
                                   ...
                                 }
                         }
               }
}

nginx配置

Main 全局配置段常见的配置指令分类
   1正常运行必备的配置
   2优化性能相关的配置
   3用于调试及定位问题相关的配置
   4事件驱动相关的配置
   5帮助文档
    http://nginx.org/en/docs/

正常运行必备的配置:

1、user
 指定worker进程的运行身份,如组不指定,默认和用户名同名
Syntax: user user [group];
Default: user nobody nobody;
Context: main
2、pid /PATH/TO/PID_FILE;
 指定存储nginx主进程PID的文件路径
3、include file | mask;
 指明包含进来的其它配置文件片断
4、load_module file ;
模块加载配置文件: /usr/share/nginx/modules/*.conf
指明要装载的动态模块路径:/usr/lib64/nginx/modules

性能优化相关的配置:

1、worker_processes number | auto
 worker进程的数量;通常应该为当前主机的cpu的物理核心数
2、worker_cpu_affinity cpumask ...
worker_cpu_affinity auto [cpumask] 提高缓存命中率
CPU MASK: 00000001:0号CPU
00000010:1号CPU
10000000:7号CPU
worker_cpu_affinity 0001 0010 0100 1000;
worker_cpu_affinity 0101 1010;
3、worker_priority number
指定worker进程的nice值,设定worker进程优先级:[-20,20]
4、worker_rlimit_nofile number
worker进程所能够打开的文件数量上限,如65535

    ? 事件驱动相关的配置:

events {

     ...
     }
1、worker_connections number
每个worker进程所能够打开的最大并发连接数数量,如10240
总最大并发数:worker_processes * worker_connections
2、use method
指明并发连接请求的处理方法,默认自动选择最优方法
use epoll;
3、accept_mutex on | off 互斥
处理新的连接请求的方法;on指由各个worker轮流处理新请求,Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可获得连接,造成“惊群”,影响性能

调试和定位问题:

1、daemon on|off
是否以守护进程方式运行nignx,默认是守护进程方式
2、master_process on|off
是否以master/worker模型运行nginx;默认为on
off 将不启动worker
3、error_log file [level]
错误日志文件及其级别;出于调试需要,可设定为debug;但debug仅在编译时使用了“--with-debug”选项时才有效
方式:file /path/logfile;
stderr:发送到标准错误
syslog:server-address[,parameter=values]:发送到syslog memory:size 内存
level:debug|info|notice|warn|error|crit|alter|emerg

http协议的相关配置:

 http {
      ... ...
server {
    ...
    server_name
     root
location [OPERATOR] /uri/ {
           ...
  }
}
server {
                         ...
        }
}

以上是关于nginx 基础的主要内容,如果未能解决你的问题,请参考以下文章

nginx.conf 忽略了 nginx-ingress 配置映射片段

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

linux学习:Nginx--常见功能配置片段与优化-06

201555332盛照宗—网络对抗实验1—逆向与bof基础