何为Nginx?

  Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。最初是为了解决C10k的问题,由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。

其特性有:

  √模块化设计,较好的扩展性

    Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。

    模块类型:

      核心模块:core modules

      标准模块:Standard HTTP modules、Optional HTTP modules、Mail modules

      第三方模块

  √高可靠性

    master/worker,一个主进程和多个工作进程。工作进程是单线程的,且不需要特殊授权即可运行;

    master:加载配置文件、管理worker进程、平滑升级...

      worker:http服务,http代理,fastcgi代理...

  √支持热部署

    不停机更新配置文件、更换日志文件、更新服务器程序版本

  √低内存消耗

    1w个keep-alive连接模式下的非活动连接仅消耗2.5M内存


编译安装Nginx

  [此处以CentOS 6.5编译安装Nginx-1.10.2版本为例进行说明]

  安装前的依赖包(组):

    ①zlib-devel

    ②pcre-devel

    ③openssl-devel

    ④Development Tools & Server Platform Development

  编译三步骤走起:

 ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_gunzip_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-file-aio --with-http_v2_module
make && make install

Nginx的配置

  主配置文件:nginx.conf

  配置指令:必须以分号结尾,且支持使用变量

    内置变量:由模块引入,可直接调用

    自定义变量:定义->set variable_name value;引用->$variable_name

  配置文件结构:

    main block(全局配置段)

    events(事件驱动配置段)

    http(http协议配置段)

    mail(mail配置段)

  接下来逐一介绍各配置段:

  main block:

    正常运行必备的配置

      ①指定用于运行worker进程的用户和组

Syntax:    user user [group];
Default: user nobody nobody;
Context: main

        ②指定nginx进程的pid文件路径

Syntax:    pid file;
Default: pid nginx.pid;
Context: main

        ③单个worker进程所能够打开的最大文件数

Syntax:    worker_rlimit_nofile number;
Default: —
Context: main

    优化性能的配置

      ①worker的进程数;通常应为CPU的核心数减1

Syntax:    worker_processes number | auto;
Default: worker_processes ;
Context: main

        

Syntax:    worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
Default: —
Context: main

    示例:worker_cpu_affinity 0001,0010 ...;  

/*
CPUMASK:有几颗CPU就有几位二进制数字
0000 0001 第一个CPU
0000 0010 二
0000 0100 三
0000 1000 ... */

        ③worker_priority nice;

          nice值:[-20,19],对应的优先级是100-139;

    用于调试/定位问题的配置

      ①daemon on | off;

       是否以守护进程方式启动nginx进程(默认是on)

       ②master_process on | off;

        是否以master/worker模型启动nginx进程,调试时可关闭此项

       ③error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [level];       

/*错误日志文件的记录方式及日志级别

    方式:
file /PATH/TO/SOME_LOG_FILE
stderr 发送到错误输出
syslog:server=address[,parameter=value] 发送给syslog服务器
memory:size 记录到内存中,可一定程度减轻磁盘IO压力 level:
debug(依赖于configure时的--with-debug选项),info,notice,warn,error,crit,alert,emerg
/*

  events

    ①worker_connections number;

      设定单个worker进程能够打开的最大并发连接数,只能用在events中,默认值是512,受限于worker_rlimit_nofile number所设定的数量       

        当前系统Nginx所能承受的最大并发连接数:worker_processes*worker_connections

      ②use method;

        指明并发连接请求处理时使用的方法(select,poll,epoll...)

     ③accept_mutex on | off;

       是否打开worker的负载均衡机制(worker基于轮询方式处理请求),默认是开启的,依赖于main配置段中的lock_file此项定义的锁文件

  http  

   ngx_http_core_module的核心配置

    A.定义套接字相关功能的配置

      ①server {...}

       配置一个虚拟主机

server {
listen PORT;
server_name HOSTNAME;
root /PATH/TO/DOCUMENTROOT;
} /*
(1)基于PORT的虚拟主机
listen指令要使用不同的端口;
(2)基于Hostname的虚拟主机
server_name指令指向不同的主机名;
(3)基于IP的虚拟主机
listen IP:PORT;
*/

      ②listen

①listen address[:port] [default_server] [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size];
ssl //限制只能通过ssl连接提供服务
default_server //默认虚拟主机
backlog=number //后援队列
rcvbuf=size //接收缓冲大小
sndbuf=size //发送缓冲大小 ②listen port [default_server] [ssl]; ③listen unix:path [default_server] [ssl];
//多用于本地间,基于unix sock通过本地回环接口进行通信(不会经由内核中的协议栈)

         ③server_name name ...;

        指明当前server的主机名,当有多个时,以空白字符分隔,有优先级如下

全名(精确匹配):the exact name

左侧匹配:the longest wildcard name starting with an asterisk, e.g. “*.example.com”

右侧匹配:the longest wildcard name ending with an asterisk, e.g. “mail.*”

正则匹配:the first matching regular expression (in order of appearance in the configuration file),e.g. “~^.*\.example\..*$”

//支持使用*表示任意长度的任意字符
//支持使用~起始的正则表达式模式匹配

        ④tcp_nodelay on | off;

          对keepalived模式下的连接是否启用延迟发送功能,仅能用在http,server,location中,默认是开启的

       ⑤sendfile on | off;

         是否启用sendfile(在内核中构建响应报文)功能(默认关闭),最好启动起来

    B.定义路径相关的配置

      ①root path;       

          设置web资源路径映射,用于指明用户请求的url所对应的本地文件系统上的文档所在的目录路径

           可用上下文:http,server, location, if in location

       ②location

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
//根据用户请求的URI来匹配定义的location,匹配到时,此请求将被响应的location块中的指令处理;可用在server和location上下文 其中:
=:URI精确匹配
~:正则表达式模式匹配,区分字符大小写
~*:正则表达式模式匹配,不区分字符大小写
^~:对URI左侧进行正则表达式匹配,不区分字符大小写 //匹配优先级:=>^~>~/~*>不带符号
/*示例*/
location = / {
[ configuration A ]
} location / {
[ configuration B ]
} location /documents/ {
[ configuration C ]
} location ^~ /images/ {
[ configuration D ]
} location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}

        ③alias path;

       定义路径别名,文档映射的一种机制;仅用于location中 

/*示例*/

location /i/ {
alias /data/w3/images/;
}
相当于www.a.com/data/w3/images/ location /i/ {
root /data/w3/images/;
}
相当于www.a.com/data/w3/images/i/ /*
root指令,给定的路径对于location中的/uri/左侧的/;
alias指令,给定的路径对应于location中的/uri/右侧的/;
*/

        ④index file ...;

          默认主页面

          可用上下文:http,server,location

       ⑤error_page code ... [=[response]] uri;       

           根据用户请求的资源的http响应的状态码实现错误页面重定向,[=[response]] 可自定义响应码;

          可用上下文:http,server,location

       ⑥try_files file ... uri;

       try_files file ... =code;

            用在server,location上下文;表示当用户请求的资源不存在时,尝试访问try_files 后面定义的file,可能有多个,第一个没有就访问第二个,以此类推;如果都访问不到,则应用最后的uri

    C.定义客户端请求的相关配置

      ①keepalive_timeout timeout [header_timeout];      

          设定保持连接的超时时长;0表示禁止长连接;默认为75s

          用在http,server,location上下文

       ②keepalive_requests number;        

          在一次长连接上所允许请求的资源的最大数量,默认为100

           用在http,server,location上下文

       ③keepalive_disable none | browser ...;          

          对哪种浏览器禁用长连接

          用在http,server,location上下文

          如 keepalive_disable msie6

       ④send_timeout time;

          向客户端发送响应报文的超时时长,是指两次写操作之间的间隔时长

          用在http,server,location上下文

       ⑤client_body_buffer_size size;         

           接收客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,其将被暂存到磁盘上

          用在http,server,location上下文

       ⑥client_body_temp_path path [level1 [level2 [level3]]];      

         设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量

         用在http,server,location上下文

/*示例*/

/var/tmp/body 2 1 2

        2:两位16进制数字(256种变化)为一级子目录
1:一位16进制数字(16种变化)为二级子目录
2:两位16进制数字(256种变化)为三级子目录

    D.对客户端请求进行限制的配置

      ①limit_rate rate;

         限制响应给客户端的传输速率,单位是bytes/second,0表示无限制

        用在http,server,location,if in location上下文

       ②limit_except method ... { ... };        

         限制对指定的请求方法之外的其他方法的使用

        仅能用在location上下文

//示例:

limit_except GET POST {
allow 192.168.1.0/32;
deny all;
} //表示除了GET和POST之外的其他请求方法仅允许192.168.1.0/32中的主机使用

     E.文件操作优化的相关配置

      ①aio on | off | threads[=pool];     

         是否启用aio功能,默认是关闭的

        用在http,server,location上下文

       ②directio size | off;

          设定直接IO的大小或关闭此功能,默认是关闭的

        用在http,server,location上下文

       ③open_file_cache off;

       open_file_cache max=N [inactive=time];      

         对打开的文件是否进行缓存

        用在http,server,location上下文

/*
nginx可以缓存以下三种信息:
(1)文件的描述符/文件大小和最近一次的修改时间
(2)打开的目录结构
(3)没有找到的或者没有权限访问的文件的信息
*/ max=N //可缓存的缓存项上限;到达后会使用LRU算法实现缓存管理
[inactive=time] //缓存项的超时时长,在此处指定的时长内未被命中的缓存项即为非活动项

        ④open_file_cache_errors on | off;    

        是否缓存查找时发生错误的文件一类的信息

        用在http,server,location上下文

       ⑤open_file_cache_min_uses number;      

         在open_file_cache指令的inactive参数指定的时长内,至少命中此处指定的次数方可不被归类到非活动项

        用在http,server,location上下文

       ⑥open_file_cache_valid time;      

           缓存项有效性的检查频率,默认是60s

        用在http,server,location上下文

  ngx_http_access_module:实现基于IP的访问控制功能模块    

        ①allow address | CIDR | unix: | all;

      ②deny address | CIDR | unix: | all;

        可用上下文:http, server, location, limit_except

//示例:

location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}

  ngx_http_auth_basic_module:基于http协议进行basic认证

      ①auth_basic string | off;

      ②auth_basic_user_file file;

      认证用的账号密码文件,格式:name:password:commet

       可用上下文:http, server, location, limit_except

//示例:

location /admin/ {
auth_basic "admin";
uth_basic_user_file /etc/nginx/.ngxpasswd;
} //密码格式:
htpasswd命令
如:# htpasswd -c -m /etc/nginx/.ngxpasswd tom
# htpasswd -m /etc/nginx/.ngxpasswd alice

  

  ngx_http_stub_status_module:用于输出nginx的基本状态信息,用在server和location上下文

//示例:

location /basic_status {
stub_status;
} //显示效果:
Active connections: 291 //处于活动状态的客户端连接数量包括等待的连接
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106 //其中:
reading:处于读取客户端请求报文首部的连接数
writing:处于向客户端发送响应报文过程中的连接数
waiting:处于等待客户端发送请求的空闲连接数

  ngx_http_referer_module:是用来阻止访问一个在referer头域值无效请求的网站。要记住,制造要求与适当的referer字段值是很容易的,所以该模块的目的是阻止这样的请求,但要彻底阻断正常的浏览器发送请求的质量流量。还应考虑常规浏览器可能无法发送referer字段即使有效的请求。

    ①valid_referers none | blocked | server_names | string ...;

     定义合法的referer数据

      用在server,location上下文

none //请求报文首部没有referer首部

blocked //请求报文的referer首部没有值

server_names //其值是主机名

arbitrary string //直接字符串,可以使用*作为通配符

regular expression //被指定的正则表达式模式匹配到的字符串;要使用~开头

//示例:

valid_referers none blocked server_names  *.example.com example.* www.example.org/galleries/~\.google\.;

if ($invalid_referer) {
return 403;
}

    

Nginx简介与基础配置的更多相关文章

  1. nginx安装及基础配置(含jdk安装及配置)

    0.jdk安装配置 #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz m ...

  2. Nginx 平滑升级、Nginx的一些基础配置

    # Nginx 平滑升级 # 方案一:使用Nginx服务信号进行升级 # 1.将就版本的sbin目录下可执行nginx进行备份(mv nginx nginxold) # 2.将新版本 configur ...

  3. nginx简介和配置gd

    转自:https://www.cnblogs.com/zhouxinfei/p/7862285.html nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也 ...

  4. 超详细Nginx的安装和配置教程

    一. 编译安装nginx 下载nginx安装包 wget http://nginx.org/download/nginx-1.8.0.tar.gz 也可以选择其他版本,官网:http://nginx. ...

  5. nginx简介与配置

    nginx简介 nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行. nginx由俄罗斯的程序 ...

  6. nginx 的基础配置[转]

    nginx 的基础配置 分类: 工具软件2013-11-13 23:26 11人阅读 评论(0) 收藏 举报   目录(?)[-] 管理配置文件 全局配置 虚拟机server配置 location配置 ...

  7. Nginx简介及配置实用

    Nginx简介 Nginx是一个高性能的HTTP和反向代理服务器: 支持的操作系统众多,windows.linux. MacOS X: 可实现负载均衡: Rewrite功能强大: 电商架构大部分都采用 ...

  8. 【netcore基础】CentOS 7.6.1810 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动

    之前写过一篇Ubuntu的环境搭建博客,感觉一些配置大同小异,这里重点记录下 nginx 作为静态 angular 项目文件服务器的配置 参考链接 [netcore基础]ubuntu 16.04 搭建 ...

  9. 【netcore基础】ubuntu 16.04 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动

    今天来整理下 netcore 在 linux(ubuntu) 上的运行环境搭建 对应版本 ubuntu 16.04 .net core 2.1 nginx version: nginx/1.10.3 ...

随机推荐

  1. poj1363 Rails Central Europe 1997

    P.S.: 输出换行 三个方法 1.直接按照要求做 根据给的数,需要push,pop哪些数据,具有唯一性 数最多进栈一次,出栈一次 O(n) Source Code Problem: User: co ...

  2. wpf datagrid 如何自定义行的控件实例,(textbox 并选中则全选)

    主要是为了用户输入方便 按回车,选中下一列,text自动获取焦点,输入状态 获取控件实例  https://blog.csdn.net/m15188153014/article/details/486 ...

  3. Postgraduate

    https://account.chsi.com.cn/passport/login?entrytype=yzgr&service=https%3A%2F%2Fyz.chsi.com.cn%2 ...

  4. 一张图轻松掌握 Flink on YARN 应用启动全流程(上)

    Flink 支持 Standalone 独立部署和 YARN.Kubernetes.Mesos 等集群部署模式,其中 YARN 集群部署模式在国内的应用越来越广泛.Flink 社区将推出 Flink ...

  5. luoguP3414 SAC#1 - 组合数

    题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数 ...

  6. C++——类的多继承

    多继承概念 一个类有多个直接基类的继承关系称为多继承 多继承声明语法 class  派生类名 : 访问控制  基类名1 ,  访问控制  基类名2 ,  … , 访问控制  基类名n { 数据成员和成 ...

  7. LUOGU P4394 [BOI2008]Elect 选举 (背包)

    传送门 解题思路 一眼看上去就像个背包,然后就是\(0/1\)背包改一改,结果发现过不了样例.后来想了一下发现要按\(a\)从大到小排序,因为如果对于一个>=总和的一半但不满足的情况来说,把最小 ...

  8. element table初始化默认选中以及切换页码的时候保留选中状态

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- impor ...

  9. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  10. java_网络编程之上传文件案例

    初期成果: 客户端: package FileUpload; import java.io.*; import java.net.Socket; import java.util.Scanner; p ...