文章目录

  • Nginx概述
  • Nginx架构原理
    • 1、多线程模型
    • 2、模块化
  • Nginx安装
    • Nginx下载地址
    • Nginx安装
  • Nginx命令
  • Nginx目录结构
    • 站点配置文件
    • Scgi、Fastcgi、Uwcgi配置文件
    • Nginx编码转换映射文件
    • http协议的Content-Type与扩展名
    • 配置系统守护进程管理器
    • Nginx日志轮询,日志切割
    • Nginx终端管理命令
    • Nginx模块目录
    • Nginx默认站点目录
    • Nginx的帮助手册
    • Nginx的缓存目录
    • Nginx的日志目录
  • Nginx配置文件
    • 概述
    • 模块
      • CoreModule
    • EventModule
      • HttpModule
  • Nginx配置网站
  • Nginx日志管理
    • 概述
    • log_format详解
    • nginx日志切割
  • Nginx目录索引
    • 1、目录索引模块简述
    • 2、配置
    • 3、配置站点目录浏览功能
  • Nginx监控
    • 1、概述
    • 2、配置
    • 3.访问监控页面
  • Nginx访问控制
    • 基于IP的访问控制(http_access_module)
    • 基于用户登陆认证(http_auth_basic_module)
  • Nginx访问限制
    • **1、概述**
    • 2、Nginx连接限制
    • 3、Nginx请求限制
    • 4、Nginx请求限制重定向
  • Nginx虚拟站点
    • 1.基于域名虚拟主机配置实战
    • 2、基于端口虚拟主机配置实战
    • 3、基于IP地址
    • 4、基于虚拟主机别名配置实战
  • Nginx Location

Nginx概述

Nginx是一个开源且高性能、可靠的Http、web服务、代理服务

  • 开源:可以直接获取源码;
  • 高性能:支持海量高并发;
  • 可靠行:服务稳定;

常见的Http、web服务

  • Apache 最早的web服务

  • Nginx

  • IIS

  • GWS

  • BWS

  • Lighttpd

优势

  • 高性能、高并发
  • 支持高并发,并在处理高并发的性能,比其他web服务器更优

高可靠性

  • 宕机时间:99.999%(5分15秒) ;一年的秒数-(一年的秒数*0.99999)=一年的宕机时间
  • Nginx服务器不需要定期重启维护

轻量且高扩展

  • 功能模块少,但可以根据需要下载核心代码作为插件使用
  • 代码模块化,易读,便于二次开发,支持第三方模块,对开发人员友好

众多企业的选择

  • Nginx技术成熟,许多公司大规模使用;
  • 适用于当前主流框架趋势,微服务、云框架、中间层
  • 统一了技术栈,降低了维护成本、降低了技术更新成本

支持热部署

  • 可以在服务运行期间更新迭代、代码部署

  • 事件模型的选择更优

  • nginx采用Epoll网络模型

    • Epoll网络模型:当用户发起请求,epoll模型会直接处理,效率更高,且无连接限制
  • Apache采用select模型

    • select模型:当用户发起请求,select模型就会进行一次遍历扫描,导致性能降低

Nginx架构原理

1、多线程模型

概述
进程是操作系统资源分配的最小单位,由于CPU数量有限,多个进程通过被分配的时间片来获取CPU的使用权。

系统在进行内核管理和进程调度时,要执行"保存进程上下文、更新控制信息、选择另一就绪进程、恢复就绪进程、等"

一系列操作,因为频繁切换进程造成资源的消耗

Nginx采用master(主进程)-workers(工作进程)工作机制

1、主进程服务工作进程配置的加载和启动与停止等操作;
2、工作进程负责处理具体请求,每个工作进程处理多个连接;
3、工作进程相互之间独立,但又共享内存;
4、每个连接由一个工作进程全权处理,不需要进行进程的切换,避免了切换进程引发的资源消耗问题
5、共享内存允许多个进程访问一个内存地址,一个进程改变内存中的内容后,其他进程也可以使用改变后的内容

workers工作机制

1、客户端向master(主进程)发起请求来连接
2、master(主进程)加载workers(工作进程)来争抢客户端连接
3、连接后workers(工作进程)访问PHP-fpm、tomcat等服务

PHP-FPM:一个PHPFastCGI(快速连接)管理器
Tomcat:免费的开放源代码的Web 应用服务器

2、模块化

Nginx的模块化意味着高度的可靠性、扩展性、可定制性
具体分类:

  1. 核心模块(core)

提供了Nginx服务运行的基本服务; 如Nginx进程管理、CPU亲缘性、内存管理、配置文件解析、日志等功能;

  1. 事件模块(event)

负责进行连接处理,针对不同系统的I/O网络模型和自动根据系统平台选择最有效的I/O网络模型的方法;

  1. HTTP模块(http)

提供处理Http服务的核心功能和部分功能模块

  1. Mail模块(mail)

提供邮件代理的功能

  1. Stream模块(stream)

提供TCP/UDP连接的代理和负载相关功能 ,四层代理和负载均衡

  1. Upstream模块

提供七层代理和负载均衡的功能

Nginx安装

Nginx下载地址

  • 源码包下载地址:http://nginx.org/en/download.html
  • RPM包下载地址:http://nginx.org/packages/

Nginx版本

  • Mainline version:主线版本,也叫开发版。最新版本,但没经过大量测试
  • Stable version:稳定版本,通过大量的测试,相对比较稳定的版本,生产环境使用该版本
  • Legacy version:往期的稳定版

Nginx安装

1、源码编译

2、yum安装

  • epel源(不要使用)
    wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
    yum install -y nginx

  • 官方源(最新版,不建议)
    http://nginx.org/en/linux_packages.html#RHEL
    yum install -y nginx

3、RPM包安装(推荐)

  • 下载匹配的RPM包
    http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm
    yum localinstall -y nginx-1.20.2-1.el7.ngx.x86_64.rpm

Nginx命令

nginx = systemctl start nginx               (启动Nginx)
nginx -s reopen = systemctl restart nginx  (重启Nginx)
nginx -s reload = systemctl reload nginx   (重新加载Nginx配置文件)
nginx -s stop = systemctl stop nginx       (关闭Nginx)
nginx -s quit       (处理完所以请求后关闭Nginx)
nginx -t            (检查配置文件是否有错误)
nginx -p prefix     (设置前缀路径(默认是:/usr/share/nginx/)
nginx -c filename   (设置配置文件(默认是:/etc/nginx/nginx.conf)
nginx -g directives (设置配置文件外的全局指令)

Nginx目录结构

站点配置文件

  **主配置文件:/etc/nginx/nginx.conf**

子配置文件:/etc/nginx/conf.d/

Scgi、Fastcgi、Uwcgi配置文件

/etc/nginx/fastcgi_params
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params

Nginx编码转换映射文件

/etc/nginx/win-utf
/etc/nginx/koi-utf
/etc/nginx/koi-win

http协议的Content-Type与扩展名

/etc/nginx/mime.types

配置系统守护进程管理器

/usr/lib/systemd/system/nginx.service

Nginx日志轮询,日志切割

/etc/logrotate.d/nginx

Nginx终端管理命令

  **/usr/sbin/nginx**

/usr/sbin/nginx-debug

Nginx模块目录

/etc/nginx/modules
/usr/lib64/nginx
/usr/lib64/nginx/modules

Nginx默认站点目录

/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html

Nginx的帮助手册

  **/usr/share/doc/nginx-1.12.2**

/usr/share/man/man8/nginx.8.gz

Nginx的缓存目录

/var/cache/nginx

Nginx的日志目录

/var/log/nginx

Nginx配置文件

概述

  1. Nginx的主配置文件/etc/nginx/nginx.conf为纯文本类型文件
  2. 整个配置文件以区块的形式组织,一般每个区块以{}表示开始与结束

核心模块(CoreModule)
事件驱动模块(EventModule)
内核模块(HttpCoreModule)

CoreModule层下可以有Event、HTTP
HTTP模块层允许有多个Server层, Server主要用于配置多个网站
Server层又允许有多个Location, Location主要用于定义网站访问路径

模块

CoreModule

  • user nginx; #Nginx进程所使用的用户

  • worker_processes 1; #Nginx运行的work进程数量(建议与CPU数量一致或auto:等于物理核心数)

  • error_log /var/log/nginx/error.log warn #Nginx错误日志存放路径

  • pid /var/run/nginx.pid #Nginx服务运行后产生的pid进程号

EventModule

events { worker_connections 1024 //每个worker进程支持的最大连接数use epoll; //事件驱动模型, epoll默认
}

HttpModule

 //公共的配置定义在http{}http { //http层开始 include mime.types; //引入MIME类型映射表文件默认值_type application/octet-stream; //浏览器检测文件类型access_log /var/log/nginx/access.log main //访问日志sendfile on; //启用零复制机制keepalive_timeout 65; //保持连接超时时间65s//使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)server {listen 80; //监听端口, 默认80server_name localhost; //提供服务的域名或主机名//控制网站访问路径location / {root /usr/share/nginx/html; //存放网站代码路径index index.html index.htm; //服务器返回的默认页面文件}//指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaitonerror_page 500 502 503 504 /50x.html;}...//第二个虚拟主机配置server {...}//包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件include /etc/nginx/conf.d/*.conf; } //http层结束

Nginx配置网站

1、新增配置文件
在子配置文件目录(conf.d)下写入文件(web.conf);ps:一定要以’.conf’结尾
vim /etc/nginx/conf.d/web.conf
方法一

server {server_name www.web.conf;    #网站域名listen 80; #监听的端口号,默认为80root /web/www   #项目入口绝对路径,站点文件存放的目录index index.html     #入口可以解析的文件类型,可以吧index.html/php/htm改成自己需要的文件名和类型}

方法二

server {server_name www.web.com;listen 80;location / {   #location 属于请求级别配置root /web/wwwindex index.html}}

2、创建项目入口与站点文件
创建站点

mkdir -p /web/www

放入配置文件

vim /web/www/index.html
hello world

3、检查配置文件

cd /etc/nginx/conf.d

检查web.conf是否有语法错误

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf 语法 is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

4、重载nginx服务

systemctl restart nginx  #重启:关闭再开启nginx
systemctl reload nginx      #重新加载nginx配置文件
nginx -s reopen  #重启
nginx -s reload     #重新加载配置文件

5.访问网站

  1. 通过服务器的IP直接访问(不推荐)
  2. 通过假域名方式访问(推荐方式)
Windows修改 C:\Windows\System32\drivers\etc\hosts
10.0.0.7 www.web.com

3.使用ping命令测试域名解析是否正常

ping www.web.com

Nginx日志管理

概述

Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。
日志格式通过log_format 命令定义格式。
nginx的日志包含了两类,一类是error.log,一类是access.log。
可以查看日志配置cat /etc/nginx/nginx.conf

log_format详解

1、log_format的作用是定义日志格式语法

语法格式:log_format combined "......";

2、nginx日志默认格式语法

log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# log_format=定义日志的命令,固定格式
# main 定义日志格式的名称,用于引用
# "...." =日志的内容格式

3、Nginx日志格式允许包含的内置变量

$remote_addr # 记录客户端IP地址
$remote_user # 记录客户端用户名
$time_local # 记录通用的本地时间
$time_iso8601 # 记录ISO8601标准格式下的本地时间
$request # 记录请求的方法以及请求的http协议
$status # 记录请求状态码(用于定位错误信息)
$body_bytes_sent # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent # 发送给客户端的总字节数
$msec # 日志写入时间。单位为秒,精度是毫秒。
$http_referer # 记录从哪个页面链接访问过来的
$http_user_agent # 记录客户端浏览器相关信息
$http_x_forwarded_for #记录客户端IP地址
$request_length # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time # 请求花费的时间,单位为秒,精度毫秒# 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。

4、access_log和error_log配置

写在server{}
语法: access/error_log 路径 mian;
路径为存放日志文件的路径,一般为 logs/web-[access/error].log;
相对路径就是在nginx安装路径也就是/etc/nginx/

5、Nginx日志配置实践

server {listen 80;server_name code.tf.com;#将当前的server网站的访问日志记录至对应的目录,使用main格式access_log /var/log/nginx/web-access main;error_log /var/log/nginx/web-error main;location / {root /code;}#当有人请求改favicon.ico时,不记录日志location /favicon.ico {access_log off;return 200;}
}

nginx日志切割

使用logrotate切割日志
logrotate 可以直接执行,后面跟配置文件就可以了,
如:

logrotate -f /etc/logrotate.d/nginx
-f 强制执行

cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {daily # 每天切割日志missingok # 日志丢失忽略rotate 52 # 日志保留52天compress # 日志文件压缩delaycompress # 延迟压缩日志notifempty # 不切割空文件create 640 nginx adm # 日志文件权限sharedscriptspostrotate # 切割日志执行的命令if [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid`fiendscript
}

Nginx目录索引

1、目录索引模块简述

ngx_http_autoindex_module 模块处理以斜杠字符 (‘/’) 结尾的请求URL,并生成目录列表。

当 ngx_http_index_module 模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module 模块。

2、配置

Nginx默认是不允许列出整个目录浏览下载

语法:  autoindex on | off;
默认值:    autoindex off;
作用域:    http, server, location

autoindex常用参数

autoindex_exact_size off;默认为on,显示出文件的确切大小,单位是bytes。修改为off,显示出文件的大概大小,单位是kB或者MB或者GB。autoindex_localtime on;默认为off,显示的文件时间为GMT时间。修改为on,显示的文件时间为文件的服务器时间。charset utf-8,gbk;默认中文目录乱码,添加上解决乱码。

3、配置站点目录浏览功能

location / {root /web/www;//开启目录浏览autoindex on;autoindex_localtime on;autoindex_exact_size off;charset utf-8,gbk;
}

Nginx监控

1、概述

ngx_http_stub_status_module 用于展示 Nginx 连接状态信息。需要 --with–http_stub_status_module 模块支持

语法:stub_status;
默认值:无
作用域:server、location

2、配置

 location /nginx_status {#开启监控监控stub_status;#监控不计入运行日志access_log off;
}

3.访问监控页面

www.web.com/nginx_status
Active connections: 2
server accepts handled requests
4 4 61
Reading: 0 Writing: 1 Waiting: 1Active connections # 当前活动的TCP连接数
accepts 4 # 当前的TCP总连接数
handled 4 # 成功的TCP连接数
requests 61 # 总的http请求数
Reading # 请求
Writing # 响应
Waiting # 等待的请求数,开启了keepalive# 注意, 一次TCP的连接,可以发起多次http的请求, 如下配置参数可验证
keepalive_timeout 0; # 类似于关闭长连接
keepalive_timeout 65; # 65s没有活动则断开连接

Nginx访问控制

基于IP的访问控制(http_access_module)

1、Nginx基于IP的访问控制

//允许配置语法
语法: allow address | CIDR | unix: | all;
默认值: —
作用域: http, server, location, limit_except//拒绝配置语法
语法: deny address | CIDR | unix: | all;
默认值: —
作用域: http, server, location, limit_except

2、访问控制配置示例

#拒绝指定的IP, 其他全部允许
location /nginx_status {stub_status;access_log off;deny 10.0.0.1;allow all;
}#只允许谁能访问, 其它全部拒绝
location / {root html;index index.html index.htm;allow 10.0.0.0/24;allow 127.0.0.1;deny all;
}

基于用户登陆认证(http_auth_basic_module)

配置语法

语法: auth_basic string | off;
默认值: auth_basic off;
作用域: http, server, location, limit_except

用户密码记录配置文件

语法: auth_basic_user_file file 验证文件所在位置;
默认值: -
作用域: http, server, location, limit_except

需要安装依赖组件

yum install httpd-tools
htpasswd -b -c /etc/nginx/auth_conf 用户 密码

可在http,server,location下添加如下信息

auth_basic "access auth,input your password!";
auth_basic_user_file /etc/nginx/auth_conf;

Nginx访问限制

1、概述

  • ngx_http_limit_conn_module 模块
    可以根据定义的key来限制每个键值的连接数,如同一个IP来源的连接数。

  • limit_conn_module 连接频率限制

  • limit_req_module 请求频率限制

  • http协议的连接与请求
    HTTP是建立在TCP,在完成HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上进行HTTP请求。
    HTTP请求建立在一次TCP连接基础上,一次TCP连接至少产生一次HTTP请求

  • 客户端的IP地址作为键。
    remote_addr 变量的长度为7字节到15字节
    binary_remote_addr 变量的长度是固定的4字节,IPv6时占用16B
    如果共享内存空间被耗尽,服务器将会对后续所有的请求返回503错误(Service Temporarily Unavailable)

2、Nginx连接限制

  1. 连接限制语法

定义了一个会话状态存储区域,里边记录会话状态的信息

语法: limit_conn_zone key zone=name:size;
默认值: —
作用域: http
说明:
$variable 使用Nginx内置变量作为键(一般经常使用客户端的IP地址作为键:① $remote_addr变量的长度为7字节到15字节存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。② $binary_remote_addr变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态)。zone=name定义区域名称(名称随意起,在limit_conn配置项中调用时对应就好),size定义各个键共享内存空间大小。
如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。

使用由limit_conn_zone定义的拦截规则, 并设置具体的限制连接数量

语法: limit_conn zone number;
默认值: —
作用域: http, server, location功能:   使用由limit_conn_zone定义的拦截规则, 并设置具体的限制连接数量,当超过这个数字时返回503(Service )错误。即limit_conn是对某个在limit_conn_zone中定义的存储区域key对应的总的网络连接数进行限流。可以按照IP来限制IP维度的总连接数,或者按照服务域名来限制某个域名的总的连接数。(只有那些被nginx处理的且已经读取了整个请求头的请求连接才会被计数器统计)。说明: zone_name是上面 limit_conn_zone 中的zone定义的,即由limit_conn_zone(zone=name)定义的名称; 表示使用定义的哪个限制规则;number:正整数; 表示具体的限制连接数量
  1. 配置实战
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;...
server {...
location / {//同一时刻只允许一个客户端IP连接limit_conn conn_zone 1;}
}

3、Nginx请求限制

定义了一个会话状态存储区域,里边记录会话状态的信息

语法: limit_req_zone key zone=name:size rate=rate;
默认值: —
作用域: http
说明:  $variable 使用Nginx内置变量作为键zone=name 定义区域名称(名称随意起,在limit_conn指令中调用时对应就好),size 定义各个键共享内存空间大小。如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。rate 速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数,所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 “30r/m”。例:        limit_req_zone $binary_remote_addr zone=test:10m rate=10r/m;  # limit_req_zone 固定字段、访问限制的指令# $binary_remote_addr=客户端IP地址# zone=req_addr=定义的名称 用与limit_req zone=的引用# 10m=临时存储的容量# # 定义一个通过binary_remote_addr这个标识来做限制,生成一个大小为10M,名字为test的内存区域,# 用来存储访问的频次信息,限制相同标识的客户端的访问频次为1分钟10次(即6秒一次)

设置使用哪个共享内存限制域和允许被处理的最大请求数阀值。

语法: limit_req zone=name [burst=number] [nodelay];
默认值: —
作用域: http, server, location
功能:如果请求的频率超过了限制域配置的值,请求处理会被延迟,所以所有的请求都是以定义的频率被处理的。超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阀值,这时,这个请求会被终止,并返回503(Service Tempporarily Unavailable)错误,这个阀值的默认值为0说明burst可选项。后面接整数,表示最大允许超过频率限制的请求数(这个配置的意思是设置一个大小为number的缓冲区,当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内等待,但是这个等待区里的位置只有number个,超过的请求会直接报503的错误然后返回。)nodelay可选项。如果不希望超过的请求被延迟,可以使用 nodelay 参数(如果设置,会在瞬时提供处理(burst + rate)个请求的能力,请求超过(burst + rate)的时候就会直接返回503,永远不存在请求需要等待的情况;如果没有设置,则所有请求会依次等待排队)

第一种:不加burst和不加nodelay的情况:

limit_req zone=test;
# 使用上面例子中定义的名为test的limit_req_zone
#(其定义的限制频率为每分钟的请求数为10个,即每6秒1次),
#假设同一客户端在同一时刻发起100个请求(前提这100个请求在服务器在6秒内收到),
#那么,服务器只会成功响应一次请求,对于其余99次请求服务器均不予响应并直接返回了503。

第二种:只加burst和不加nodelay的情况:

limit_req zone=test burst=5;
# 使用上面例子中定义的名为test的limit_req_zone(其定义的限制频率为每分钟的请求数为10个,即每6秒1次),
#假设同一客户端在同一时刻发起100个请求,那么,服务器只会成功响应5+1=6次请求,
#但是这6次成功的请求会延时限制
#(其中第一次成功被服务器处理的请求是在6秒内,
#第二次是在大于6秒小于12秒内请求成功的,
#第三次则为大于十二秒小于十八秒内请求成功的,以此类推),
#对于其余94次请求服务器均不予响应并直接返回了503
#(这是因为设置了burst=5,在服务器接收到100个并发请求后
#先处理1个请求,同时将5个请求放入burst缓冲队列中,等待处理。
#而超过(burst+1)数量的请求就被直接抛弃了,即直接抛弃了94个请求。)。
#第三种:加burst和加nodelay的情况:
limit_req zone=test burst=5 nodelay;
# 使用上面例子中定义的名为test的limit_req_zone(其定义的限制频率为每分钟的请求数为10个,即每6秒1次),
#假设同一客户端在同一时刻发起100个请求(前提这100个请求在服务器在30秒内收到),
#那么,服务器只会成功响应5+1=6次请求,
#但是没有时间的限制(即只要服务器处理速度够快,可以在1秒内处理完这6个请求),
#对于剩下的94个请求,直接返回503,下一秒如果继续向服务端发送10个请求,服务端会直接拒绝这10个请求并返回503。
#因为设定了每6s处理1个请求,所以直到30s之后,才可以再处理一个请求,
#即如果此时向服务端发送10个请求,会返回9个503,一个200

总结:

limit_req zone=req_zone;严格依照在limti_req_zone中配置的rate来处理请求超过rate处理能力范围的,直接drop表现为对收到的请求无延时
limit_req zone=req_zone burst=number;依照在limti_req_zone中配置的rate来处理请求同时设置了一个大小为number的缓冲队列,在缓冲队列中的请求会等待慢慢处理超过了burst缓冲队列长度和rate处理能力的请求被直接丢弃表现为对收到的请求有延时
limit_req zone=req_zone burst=number nodelay;依照在limti_req_zone中配置的rate来处理请求同时设置了一个大小为number的缓冲队列,当请求到来时,会爆发出一个峰值处理能力,对于峰值处理数量之外的请求,直接丢弃在完成峰值请求之后,缓冲队列不能再放入请求。如果rate=10r/m,且这段时间内没有请求再到来,则每6s缓冲队列就能回复一个缓冲请求的能力,直到恢复到能缓冲number个请求位置。

2、配置实战

limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
...
server {... location / {#1r/s只接收一个请求,其余请求拒绝处理并返回错误码给客户端limit_req zone=req_zone;#请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503#limit_req zone=req_zone burst=3 nodelay;}
}

4、Nginx请求限制重定向

在nginx请求限制的过程中,我们可以自定义一个返回值,也就是错误页面的状态码。默认情况下是503

1)修改默认返回状态码

server {listen 80;server_name game.tf.com;charset utf-8,gbk;location / {root /code;index index.html index.htm;limit_req zone=req_zone burst=3 nodelay;#修改返回状态码为:478limit_req_status 478}
}

2)页面不好看,重定向页面

server {listen 80;server_name game.tf.com;charset utf-8,gbk;location / {root /code;index index.html index.htm;limit_req zone=req_zone burst=3 nodelay;limit_req_status 478#重定错误页面error_page 478 /err.html;}
}

Nginx虚拟站点

所谓虚拟主机,及在一台服务器上配置多个网站

1)不同的IP地址,不同的域名;基于IP
2)相同的IP地址,不同的端口,不同的域名;基于端口
3)相同的IP地址,相同的端口,不同的域名;基于域名

1.基于域名虚拟主机配置实战

1、创建web站点目录

mkdir -p /web/{www,bbs}
echo 'hello 1' > /web/www/index.html
echo 'hello 2' > /web/bbs/index.html

2、编写不同域名的站点配置文件

vim  /etc/nginx/conf.d/www.conf
server {listen 80;server_name www.server.com;root /soft/code/www;index index.html;
}vim /etc/nginx/conf.d/bbs.conf
server {listen 80;server_name bbs.server.com;root /soft/code/bbs;index index.html;
}

2、基于端口虚拟主机配置实战

仅修改listen监听端口即可, 但不能和系统端口出现冲突
访问网站需要加上端口,例:www.server.com:8081

vim  /etc/nginx/conf.d/www.conf
server {listen 8081;server_name www.server.com;root /soft/code/www;index index.html;
}vim /etc/nginx/conf.d/bbs.conf
server {listen 8082;server_name bbs.server.com;root /soft/code/bbs;index index.html;
}

3、基于IP地址

1.配置多个IP

ifconfig ens33:0 10.0.0.8/24

2.修改nginx配置文件

vim /etc/nginx/conf.d/www.conf
server {server_name www.tf.com;listen 10.0.0.7:80;root /web/www;index index.html;access_log /etc/nginx/logs/www_access.log;error_log /etc/nginx/logs/www_error.log;
}vim /etc/nginx/conf.d/blog.conf
server {server_name blog.tf.com;listen 10.0.0.8:80;root /web/blog;index index.php index.html;access_log /etc/nginx/logs/blog_access.log;error_log /etc/nginx/logs/blog_error.log;location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}
}

3.重启nginx

systemct restart nginx

4.修改客户端的本地hosts文件

C:\Windows\System32\drivers\etc\hosts
...
10.0.0.7 www.tf.com
10.0.0.8 blog.tf.com

4、基于虚拟主机别名配置实战

默认配置方式

     vim /etc/nginx/conf.d/www.confserver {listen 80;server_name www.server.com;}server {listen 80;server_name server.com;}

别名配置方式

 vim /etc/nginx/conf.d/www.confserver {listen 80;server_name www.server.com server.com;...}

测试访问, 带www和不带www是一样的

 [root@web01 ~]# curl server.comGo[root@web01 ~]# curl www.server.comGo

Nginx Location

使用 Nginx Location 可以控制访问网站的路径, 但一个 server 可以有多个 location 配置

1、语法

location [=|^~|~|~*|!~|!~*|/] /uri/ { ...
}

2、Location 语法优先级排列

匹配符      匹配规则                    优先级
=          精确匹配                    1
^~          以某个字符串开头                2
~           区分大小写的正则匹配          3
~*          不区分大小写的正则匹配     4
!~          区分大小写不匹配的正则     5
!~*         不区分大小写不匹配的正则        6
/           通用匹配,任何请求都会匹配到   7

3.配置网站验证 location 优先级

vim /etc/nginx/conf.d/test.conf
server {listen 80;server_name tf.com;location / {default_type text/html;return 200 "location /";}location =/ {default_type text/html;return 200 "location =/";}location ~ / {default_type text/html;return 200 "location ~/";}
}

4、测试Location效果

# 优先级最高符号=
[root@web01 ]# curl tf.com
location =/
# 注释掉精确匹配=, 重启Nginx
[root@web01 ~]# curl tf.com
location ~/
# 注释掉~, 重启Nginx
[root@web01 ~]# curl tf.com
location /

5、Locaiton应用场景

# 通用匹配,任何请求都会匹配到location / {}
# 严格区分大小写,匹配以.php结尾的都走这个location location ~ \.php$ {fastcgi_pass http://127.0.0.1:9000;}
# 严格区分大小写,匹配以.jsp结尾的都走这个location location ~ \.jsp$ {proxy_pass http://127.0.0.1:8080;}
# 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条locationlocation ~* .*\.(jpg|gif|png|js|css)$ {rewrite (.*) http://cdn.tftanstic.com$request_uri;}
# 不区分大小写匹配location ~* "\.(sql|bak|tgz|tar.gz|git)$" {default_type text/html;return 403 "启用访问控制成功";}

Linux:Nginx总结相关推荐

  1. CentOS 5.4下的Memcache安装步骤(Linux+Nginx+PHP+Memcached)

    CentOS 5.4下的Memcache安装步骤分享,想要配置Linux+Nginx+PHP+Memcached运行环境的朋友可以参考下 一.源码包准备 服务器端主要是安装memcache服务器端,目 ...

  2. 在linux+nginx+mysql+php环境下安装 phpmyadmin

    环境 1, CentOS 7 2, nginx1.12.2 (Linux 利用yum源安装nginx) 3, php7.0 (Linux 利用yum源安装php7.0+nginx) 4, mysql5 ...

  3. linux最基础安装,Linux Nginx最基础的十大安装步骤(2)

    四.修改php-fpm配置文件 rm -f /usr/local/webserver/php/etc/php-fpm.conf vi /usr/local/webserver/php/etc/php- ...

  4. linux+nginx+mysql+php系统修改文件上传大小限制

    linux+nginx+mysql+php系统修改文件上传大小限制 对于LNMP框架的一些网站,上传文件大小会受到多个方面的限制,一个是nginx本身的限制,限制了客户端上传文件的大小,会报错&quo ...

  5. 阿里云服务器部署php的laravel项目,在阿里云买ECS 搭建 Linux+Nginx+Mysql+PHP环境的

    在阿里云买ECS的时候选择自己习惯的镜像系统,我一般都是使用Linux Ubuntu,所以,以下的配置都是在Ubuntu 14.04稳定支持版的环境中搭建Linux+Nginx+Mysql+PHP环境 ...

  6. Angular Web App部署Linux Nginx Https

    Angular Web App部署Linux Nginx Https 提示:这篇文章是基于内网的 互联网就开始将 WEB 服务从 HTTP 迁移到 HTTPS,而现在为了更快的推进 HTTPS 的普及 ...

  7. linux nginx 安装出错,Linux Nginx安装以及可能出现错误

    Linux Nginx安装以及可能出现错误 转载请标明出处 http://coderknock.com安装过程 从 http://nginx.org/download/nginx-1.9.15.tar ...

  8. dt程序网站服务器配置,ZKWeb 官网与演示站点的部署步骤 (Linux + Nginx + Certbot)

    因为没有给域名续费,加上私人时间不足,ZKWeb 的官网和演示站点已经停止了几个月的时间. 最近时间开始变多,所以重新购买了别的域名和服务器把官网和演示站点重新部署上去. 在此前站点是托管在共享主机上 ...

  9. nginx php重定向,Thinkphp linux nginx重定向配置

    thinkphp 重定向在linux nginx中需要更多配置,以下为nginx.conf文件,注意红色字体部分: user  www www; worker_processes auto; erro ...

  10. nginx curl linux,linux nginx 下通过curl url方式,符以后的参数无效

    linux nginx 下通过curl url方式,&符以后的参数无效 nginx转发get请求丢失参数 ngixn转发,接口为get请求时参数会丢失,post不会出现问题.原因:get请求参 ...

最新文章

  1. linux grep 基本正则表达式与扩展正则表达式使用解析
  2. 团队行为心理学读书笔记(3)领导力背后的行为心理学
  3. 在win server 2003上安装SQL Server 2008的步骤
  4. sqlserver2000中字符串类型的日期如何比较大小
  5. 绿坝花季护航,为何如此吸引眼球?
  6. 计算机注册表管理,注册表命令,教您电脑怎么打开注册表编辑器
  7. 郑中基 英雄寞 08版射雕英雄传片头曲 LRC歌词
  8. ppt如何替换其他mo ban_超实用办公软件小技巧之PPT~
  9. ivr cti_简而言之,网络威胁情报(CTI)— 1
  10. excel表格打印每页都有表头_excel怎样打印每页都有表头
  11. 二阶常系数偏微分线性变量代换化简
  12. 制作VMware 6.X安装源安装流程
  13. 国内10个千年古镇 绝美春色洗涤你的眼
  14. windows linux 共享鼠标,在Ubuntu/Windows下配置Synergy-键盘鼠标共享
  15. 图解CPU生产全过程——以intel CORE i7为例,展望CPU架构
  16. Ps算法Python实现:图层混合模式-色相
  17. HashMap为什么用链表加红黑树?目的是什么?原理是什么
  18. 勒索软件攻击创新高,邮件安全需警惕
  19. python爬虫爬取b站_python爬虫11 | 这次,将带你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友们-Go语言中文社区...
  20. 【模型】Model predictive control (MPC)控制策略简介

热门文章

  1. iOS-关于浏览、搜索等历史记录本地存储的思路
  2. matlab用i3怎么,i3处理器-matalb速度差不多10倍DSP-C语言
  3. 爬虫(一)爬虫原理和网页构造
  4. STM32中HAL库与标准库的区别
  5. bad magic number in 'application': b'\x03\xf3\r\n': ImportError
  6. c语言 dct变换,C语言实现DCT变换编码
  7. Android 自制手机USB驱动
  8. 归并排序算法原理及实现
  9. form表单加密传输
  10. 服务器项目前端调用摄像头失败,浏览器调用摄像头失败:NotSupportedError Only secure origins are allowed...