Linux:Nginx总结
文章目录
- 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的模块化意味着高度的可靠性、扩展性、可定制性
具体分类:
- 核心模块(core)
提供了Nginx服务运行的基本服务; 如Nginx进程管理、CPU亲缘性、内存管理、配置文件解析、日志等功能;
- 事件模块(event)
负责进行连接处理,针对不同系统的I/O网络模型和自动根据系统平台选择最有效的I/O网络模型的方法;
- HTTP模块(http)
提供处理Http服务的核心功能和部分功能模块
- Mail模块(mail)
提供邮件代理的功能
- Stream模块(stream)
提供TCP/UDP连接的代理和负载相关功能 ,四层代理和负载均衡
- 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配置文件
概述
- Nginx的主配置文件/etc/nginx/nginx.conf为纯文本类型文件
- 整个配置文件以区块的形式组织,一般每个区块以{}表示开始与结束
核心模块(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.访问网站
- 通过服务器的IP直接访问(不推荐)
- 通过假域名方式访问(推荐方式)
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连接限制
- 连接限制语法
定义了一个会话状态存储区域,里边记录会话状态的信息
语法: 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:正整数; 表示具体的限制连接数量
- 配置实战
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总结相关推荐
- CentOS 5.4下的Memcache安装步骤(Linux+Nginx+PHP+Memcached)
CentOS 5.4下的Memcache安装步骤分享,想要配置Linux+Nginx+PHP+Memcached运行环境的朋友可以参考下 一.源码包准备 服务器端主要是安装memcache服务器端,目 ...
- 在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 ...
- linux最基础安装,Linux Nginx最基础的十大安装步骤(2)
四.修改php-fpm配置文件 rm -f /usr/local/webserver/php/etc/php-fpm.conf vi /usr/local/webserver/php/etc/php- ...
- linux+nginx+mysql+php系统修改文件上传大小限制
linux+nginx+mysql+php系统修改文件上传大小限制 对于LNMP框架的一些网站,上传文件大小会受到多个方面的限制,一个是nginx本身的限制,限制了客户端上传文件的大小,会报错&quo ...
- 阿里云服务器部署php的laravel项目,在阿里云买ECS 搭建 Linux+Nginx+Mysql+PHP环境的
在阿里云买ECS的时候选择自己习惯的镜像系统,我一般都是使用Linux Ubuntu,所以,以下的配置都是在Ubuntu 14.04稳定支持版的环境中搭建Linux+Nginx+Mysql+PHP环境 ...
- Angular Web App部署Linux Nginx Https
Angular Web App部署Linux Nginx Https 提示:这篇文章是基于内网的 互联网就开始将 WEB 服务从 HTTP 迁移到 HTTPS,而现在为了更快的推进 HTTPS 的普及 ...
- linux nginx 安装出错,Linux Nginx安装以及可能出现错误
Linux Nginx安装以及可能出现错误 转载请标明出处 http://coderknock.com安装过程 从 http://nginx.org/download/nginx-1.9.15.tar ...
- dt程序网站服务器配置,ZKWeb 官网与演示站点的部署步骤 (Linux + Nginx + Certbot)
因为没有给域名续费,加上私人时间不足,ZKWeb 的官网和演示站点已经停止了几个月的时间. 最近时间开始变多,所以重新购买了别的域名和服务器把官网和演示站点重新部署上去. 在此前站点是托管在共享主机上 ...
- nginx php重定向,Thinkphp linux nginx重定向配置
thinkphp 重定向在linux nginx中需要更多配置,以下为nginx.conf文件,注意红色字体部分: user www www; worker_processes auto; erro ...
- nginx curl linux,linux nginx 下通过curl url方式,符以后的参数无效
linux nginx 下通过curl url方式,&符以后的参数无效 nginx转发get请求丢失参数 ngixn转发,接口为get请求时参数会丢失,post不会出现问题.原因:get请求参 ...
最新文章
- linux grep 基本正则表达式与扩展正则表达式使用解析
- 团队行为心理学读书笔记(3)领导力背后的行为心理学
- 在win server 2003上安装SQL Server 2008的步骤
- sqlserver2000中字符串类型的日期如何比较大小
- 绿坝花季护航,为何如此吸引眼球?
- 计算机注册表管理,注册表命令,教您电脑怎么打开注册表编辑器
- 郑中基 英雄寞 08版射雕英雄传片头曲 LRC歌词
- ppt如何替换其他mo ban_超实用办公软件小技巧之PPT~
- ivr cti_简而言之,网络威胁情报(CTI)— 1
- excel表格打印每页都有表头_excel怎样打印每页都有表头
- 二阶常系数偏微分线性变量代换化简
- 制作VMware 6.X安装源安装流程
- 国内10个千年古镇 绝美春色洗涤你的眼
- windows linux 共享鼠标,在Ubuntu/Windows下配置Synergy-键盘鼠标共享
- 图解CPU生产全过程——以intel CORE i7为例,展望CPU架构
- Ps算法Python实现:图层混合模式-色相
- HashMap为什么用链表加红黑树?目的是什么?原理是什么
- 勒索软件攻击创新高,邮件安全需警惕
- python爬虫爬取b站_python爬虫11 | 这次,将带你使用python爬取b站上的NBA形象大使蔡徐坤和他的球友们-Go语言中文社区...
- 【模型】Model predictive control (MPC)控制策略简介
热门文章
- iOS-关于浏览、搜索等历史记录本地存储的思路
- matlab用i3怎么,i3处理器-matalb速度差不多10倍DSP-C语言
- 爬虫(一)爬虫原理和网页构造
- STM32中HAL库与标准库的区别
- bad magic number in 'application': b'\x03\xf3\r\n': ImportError
- c语言 dct变换,C语言实现DCT变换编码
- Android 自制手机USB驱动
- 归并排序算法原理及实现
- form表单加密传输
- 服务器项目前端调用摄像头失败,浏览器调用摄像头失败:NotSupportedError Only secure origins are allowed...