nginx 代理01(持续更新)
1、如果请求是post,而且请求原是188.188.3.171,处理方式403
if ($request_method ~* "POST") # $request_method 等同于request的method,通常是“GET”或“POST” # 如果访问request的method值为POST则返回“o” {set $test o;}if ($remote_addr = '188.188.3.171') //如果访问地址等于188.188.3.171则返回“k”同理 #if ($remote_addr != '188.188.3.171') //如果访问地址非188.188.3.171则返回“k”{Set $test "${test}k"; # ${test}=o,所以${test}k=ok}//如果满足上述条件则返回“ok”处理方式为返回403if ( $test = ok ){Return 403;#rewrite ^(.*) http://www.fengyuba.com permanent;#如果满足条件则重定向到www.fengyuba.com}
参数注释如下:
正则表达式匹配,其中:
* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
flag标记有:
* last 相当于apache里的[L]标记,表示完成rewrite
* break 终止匹配, 不再匹配后面的规则
* redirect 返回302临时重定向 地址栏会显示跳转后的地址
* permanent 返回301永久重定向 地址栏会显示跳转后的地址
nginx常用变量:
$args 此变量与请求行中的参数相等
$content_length 等于请求行的“Content_Length”的值。
$content_type 等同与请求头部的”Content_Type”的值
$document_root 等同于当前请求的root指令指定的值
$document_uri 与$uri一样
$host 与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样
$limit_rate 允许限制的连接速率
$uri 等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index
$server_protocol 等同于request的协议,使用“HTTP/1.0”或“HTTP/1.1”
$server_port 请求到达的服务器的端口号
$server_name 请求到达的服务器名
$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$request_uri 含有参数的完整的初始URI
$request_method 等同于request的method,通常是“GET”或“POST”
$request_filename 当前请求的文件的路径名,由root或alias和URIrequest组合而成
$request_body_file
$remote_user 等同于用户名,由ngx_http_auth_basic_module认证
$remote_port 客户端port
$remote_addr 客户端ip
$query_string 与$args一样
2、如果是.php或者是.php5结尾的
server {listen 80;server_name www.wokao.com;index index.html index.htm index.php;root /data/www/wokao;location ~ .*.(php|php5)?${Include test.conf;fastcgi_pass unix:/tmp/php-cgi.sock;#fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fcgi.conf;}
}
3、NGINX配置中的 events 模块详解
nginx events 模块主要是nginx 和用户交互网络连接优化的配置内容
nginx events模块主要包含了accept_mutex, multi_accept,worker_connections 和 use这几个指令
accept_mutex
这个配置主要可以用来解决常说的"惊群"问题。大致意思是在某一个时刻,客户端发来一个请求连接,Nginx后台是以多进程的工作模式,也就是说有多个worker进程会被同时唤醒,但是最终只会有一个进程可以获取到连接,如果每次唤醒的进程数目太多,就会影响Nginx的整体性能。如果将上述值设置为on(开启状态),将会对多个Nginx进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。
multi_accept
设置一个进程是否同时接受多个网络连接,默认为off
worker_connections
用来配置单个worker进程最大的连接数,nginx 默认连接数是1024,可以设置20480
use
用来设置Nginx服务器选择哪种事件驱动来处理网络消息,事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport注意:此处所选择事件处理模型是Nginx优化部分的一个重要内容,method的可选值有select/poll/epoll/kqueue等,使用linux内核在2.6以上,就是为了能使用epoll函数来优化Nginx
另外这些值的选择,我们也可以在编译的时候使用:–with-select_module、–without-select_module、 --with-poll_module、–without-poll_module来设置是否需要将对应的事件驱动模块编译到Nginx的内核。
events {accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为onmulti_accept on; #设置一个进程是否同时接受多个网络连接,默认为offuse epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventportworker_connections 1024; # 最大连接数
}
4、NGINX配置中的 http 模块详解
client_header_buffer_size
假设client_header_buffer_size的配置为1k,如果(请求行+请求头)的大小如果没超过1k,放行请求。如果(请求行+请求头)的大小如果超过client_header_buffer_size配置的1k,如果配置large_client_header_buffers 以配置为准,如果没配置large_client_header_buffers,请求失败
large_client_header_buffers
large_client_header_buffers 4 8k,则对请求有如下要求
1、请求行(request line)的大小不能超过8k,否则返回414错误
2、请求头(request header)中的每一个头部字段的大小不能超过8k,否则返回400错误(实际是494错误,但nginx统一返回400了)
curl -H "header1=aaa" -H "header2=bbb" -v http://127.0.0.1/,这里的header1=xxx和header2=xxx就是请求头中的头部字段
(请求行+请求头)的大小不能超过32k(4 * 8k)
实验client_header_buffer_size、large_client_header_buffers
1、修改nginx配置
vi nginx.confhttp {# 声明日志格式,request_length用来输出每一个请求的大小(请求行+请求头+请求体)log_format main '$remote_addr - $remote_user [$time_local] "$request" $request_length ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 指定访问日志的格式和存放路径access_log /usr/local/var/log/nginx/access.log main;# 请求行+请求头的标准大小为1kclient_header_buffer_size 1k;# 请求行+请求头的最大大小为2klarge_client_header_buffers 2 1k; }2、使用curl模拟http请求
返回 414错误
foo=''; for i in {1..1008}; do foo=${foo}"a"; done curl -v http://127.0.0.1:80\?$foo # 先找一个能curl无问题的页面,比如curl 127.0.0.1:8081无问题 curl请求明细
> GET /?1008个a HTTP/1.1 > Host: 127.0.0.1:80 > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 414 Request-URI Too Large < Server: nginx/1.17.2 < Date: Sat, 02 May 2020 01:45:57 GMT < Content-Type: text/html < Content-Length: 177 < Connection: close < <html> <head><title>414 Request-URI Too Large</title></head> <body> <center><h1>414 Request-URI Too Large</h1></center> <hr><center>nginx/1.17.2</center> </body> </html>nginx日志
这里显示的是0,但请求行的大小已超过1k了127.0.0.1 - - [02/May/2020:09:45:57 +0800] "GET /?1008个a HTTP/1.1\x0D" 0 414 177 "-" "-" "-"返回 494错误
foo='';bar=''; for i in {1..1012}; do foo=${foo}"a"; bar=${bar}"a"; done curl -H "header1: $foo" -H "header2: $bar" -v http://127.0.0.1:80curl请求明细
> GET / HTTP/1.1 > Host: 127.0.0.1:80 > User-Agent: curl/7.64.1 > Accept: */* > header1: 1012个a > header2: 1012个a > < HTTP/1.1 400 Bad Request < Server: nginx/1.17.2 < Date: Sat, 02 May 2020 01:48:45 GMT < Content-Type: text/html < Content-Length: 233 < Connection: close < <html> <head><title>400 Request Header Or Cookie Too Large</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>Request Header Or Cookie Too Large</center> <hr><center>nginx/1.17.2</center> </body> </html>nginx日志
127.0.0.1 - - [02/May/2020:09:48:45 +0800] "GET / HTTP/1.1" 2123 400 233 "-" "curl/7.64.1" "-"源码及流程图
include mime.types
mime.types 是一个文件,此文件记录了nginx能识别哪些类型的文件
[root@master01 nginx]# cd /etc/nginx/[root@master01 nginx]# ls nginx.conf nginx.conf[root@master01 nginx]# cat mime.typestypes {text/html html htm shtml;text/css css;text/xml xml;image/gif gif;image/jpeg jpeg jpg;application/javascript js;application/atom+xml atom;application/rss+xml rss;text/mathml mml;text/plain txt;text/vnd.sun.j2me.app-descriptor jad;text/vnd.wap.wml wml;text/x-component htc;image/png png;image/svg+xml svg svgz;image/tiff tif tiff;image/vnd.wap.wbmp wbmp;image/webp webp;image/x-icon ico;image/x-jng jng;image/x-ms-bmp bmp;font/woff woff;font/woff2 woff2;application/java-archive jar war ear;application/json json;application/mac-binhex40 hqx;application/msword doc;application/pdf pdf;application/postscript ps eps ai;application/rtf rtf;application/vnd.apple.mpegurl m3u8;application/vnd.google-earth.kml+xml kml;application/vnd.google-earth.kmz kmz;application/vnd.ms-excel xls;application/vnd.ms-fontobject eot;application/vnd.ms-powerpoint ppt;application/vnd.oasis.opendocument.graphics odg;application/vnd.oasis.opendocument.presentation odp;application/vnd.oasis.opendocument.spreadsheet ods;application/vnd.oasis.opendocument.text odt;application/vnd.openxmlformats-officedocument.presentationml.presentationpptx;application/vnd.openxmlformats-officedocument.spreadsheetml.sheetxlsx;application/vnd.openxmlformats-officedocument.wordprocessingml.documentdocx;application/vnd.wap.wmlc wmlc;application/x-7z-compressed 7z;application/x-cocoa cco;application/x-java-archive-diff jardiff;application/x-java-jnlp-file jnlp;application/x-makeself run;application/x-perl pl pm;application/x-pilot prc pdb;application/x-rar-compressed rar;application/x-redhat-package-manager rpm;application/x-sea sea;application/x-shockwave-flash swf;application/x-stuffit sit;application/x-tcl tcl tk;application/x-x509-ca-cert der pem crt;application/x-xpinstall xpi;application/xhtml+xml xhtml;application/xspf+xml xspf;application/zip zip;application/octet-stream bin exe dll;application/octet-stream deb;application/octet-stream dmg;application/octet-stream iso img;application/octet-stream msi msp msm;audio/midi mid midi kar;audio/mpeg mp3;audio/ogg ogg;audio/x-m4a m4a;audio/x-realaudio ra;video/3gpp 3gpp 3gp;video/mp2t ts;video/mp4 mp4;video/mpeg mpeg mpg;video/quicktime mov;video/webm webm;video/x-flv flv;video/x-m4v m4v;video/x-mng mng;video/x-ms-asf asx asf;video/x-ms-wmv wmv;video/x-msvideo avi; } [root@master01 nginx]#++++++++++'MIME-type和Content-Type的关系'++++++++++
1)HTTP服务器在'响应'一份'报文主体'时,在HTTP'报文头部'插入'解释自身数据类型'的MIME头部信息-->'Content-Type'
2)当web'服务器收到'静态的资源文件请求时,依据'请求文件的后缀名'在服务器的'MIME配置文件中找'到对应的'MIME Type',再根据MIME Type'设置HTTP Response的Content-Type',然后'客户端如浏览器'根据Content-Type的值'处理文件'
Content-Type详解
① 服务端如何处理静态资源文件
媒体类型通常是通过 'HTTP' 协议,由 Web 服务器过'Content-Type值'来告知'浏览器'的
媒体类型通常是通过 'HTTP' 协议,由 Web 服务器过'Content-Type值'来告知'浏览器'的
例如:'响应头' -->Content-Type: text/html② 客户端如何处理Content-Type值请求
浏览器是'如何区分'它们,进而决定'什么内容'用'什么形式'来显示呢?
nginx中关于媒体类型
nginx访问静态文件不下载
① nginx中的 mime.types文件
'include'表示'纳入mime.types文件'的配置
举例: 形如text'/html格式'的字符串就是用来说明'数据类型'的
1)'/'前的是'主'类型
2)'/之后'的是该主类型下的'子类型'
备注:详细的类型定义在'RFC2046'中
nginx压缩ttf文件踩坑 mine.types的作用
gzip_types
解决nginx下加载eot|otf|ttf|woff|svg等404 错误问题
② default_type
作用:在'mime.type'文件中找不到'文件'映射的'type'时'采用'默认的'default_type'
如果web程序'没设置,'Nginx也'没找到'对应文件的'扩展名'的'type'话,就使用'默认的Type'
③ types
四 案例讲解
比如:当我们打开'chrome浏览器'看一个'PNG格式的图片'的时候,Nginx是这样'发送格式信息'的:
1)服务器上'有wzj.png'这个文件,后缀名是png;
2)根据'include mime.types'查找到这个文件的'数据类型'应该是'image/png';
3)将'Content-Type'的值设置为'image/png',然后发送给'客户端(浏览器)'
1)如果处理'本地的'文件,在'没有人告诉'浏览器某个文件的 MIME Type 的情况下,浏览器也会做一些'默认的处理' 2)'默认的处理'和你'在操作系统中'给文件配置的 'MIME Type 有关' Windows 下: 打开注册表的"HKEY_LOCAL_MACHINESOFTWAREClassesMIMEDatabaseContent Type"主键,可以看到'所有 MIME Type' 的配置信息Linux下:通过一个'文本文件静态'关联数据库,负责将'application'(应用程序描述文件)与'MIME type'(Shared MIME Database)对应起来Centos7该'数据库'为:/usr/share/applications/mimeinfo.cacheLinux MIME Type
+++++++++ 'Content-Type更通用的格式' +++++++++Content-Type: [type]/[subtype]; parameter用于定义网络文件的'类型'和网页的'编码',决定浏览器将以'什么形式'、'什么编码读取'这个文件Content-Type 标头是'服务器'告诉客户端'实际返回的内容'的'内容类型'++++++++++'语法格式'++++++++++Content-Type: text/html; charset=utf-8① 查看文件的MIME Type
格式: mimetype filename 备注: mimetype命令'需要安装'yum install perl-File-MimeInfo.noarch -y
②根据文件的MIME type找到打开方式gio mime mime_type五 思考
(1)浏览器对于一个文件类型是如何判断渲染显示还是下载
浏览器的'原则'是能'打开'就打开-->'在自己的媒体类型中',不能打开'就下载'1)每个'浏览器内置支持'的 Content-Type 类型表各不相同,这导致了'某些类型字符串'在'某些浏览器下'不被识别2)另外如果'出现错误'的 Content-Type 类型,各个浏览器又会'以不同的方式'处理
思考: 如果客户端请求-->'request'的'Content-Type'和服务器响应-->'response'的'Content-Type'不一致呢?(2)对于特定的文件类型,强制让其显示内容,而不是不能识别导致下载
常见: 'application/octet-stream'是'HTTP规范中'Content-Type的一种.意思是:'未知'的'应用程序'文件,浏览器一般'不会自动执行'或'询问执行',表示这是个'二进制流',需要'下载到本地'后由'用户端环境决定'如何使用备注: '如果'提交文件的话,只能'提交一个文件',后台'接收参数'只能有'一个',而且只能是流(或者字节数组)nginx配置让任何文件在浏览器中显示文本text/plain或者xml,而不是下载
已知: 对于'text/plain'格式的文件,可以在'任何浏览器'中'直接打开'而不会下载需求: 在nginx中配置'perl'这种特殊结尾的文件为'直接打开',而不是下载+++++++++'从三个粒度来解析'+++++++++主要作为'对比'实验① 默认是下载
说明: nginx的无法识别'perl结尾的文件',能识别'pl和pm'结尾的文件,'并且'如果安装了对应的模块,并在nginx种做了相应的配置,则会'解析该脚本'后返回内容给客户端
② 方式1:全局
vim /etc/nginx/mime.types说明: 最好不要'一种后缀文件'对应'多种媒体类型'注意: 修改之后一定要'restart','reload'不生效备注: 可以'写在同一行',以'空格隔开';也可以'另起一行'细节: 这个方法修改后'影响所有nginx网站'的配置
③ 方式2:只针对某种文件类型(推荐)
备注: 甚至可以'自定义文件'类型,但是浏览器可能'不能'按照该种格式解析-->因为是'伪造'的单独打开'某个网站'的配置文件,在server中修改案例: 所有目录下'以perl结尾的文件'显示为'text/plain'格式location ~ .*\.perl$ {add_header Content-Type text/plain; }④ 方式3:只针对某个站点的某个目录下的文件
location /perl/ {'location嵌套'location ~* .*\.perl$ {add_header Content-Type text/plain;}⑤ 效果展示
(6)强制设置所有文件都是下载的
header中Content-Disposition的作用与使用方法
location / {root html;add_header Content-Disposition "attachment; filename=$1"; index index.html }(7)nginx支持播放mkv视频
#nginx.conf #在server > location块内加入 types{video/webm mkv; }
default_type application/octet-stream
如果访问的类型,在 mime.types 中没匹配上,默认使用二进制流的方式传输显示内容
log_format main
log_format main '$remote_addr|$remote_user|[$time_local]|"$request"|''$status|$body_bytes_sent|$http_host|"$http_referer"|''"$http_user_agent"|$http_x_forwarded_for|$upstream_cache_status|''"$upstream_http_content_type"|$request_time|$upstream_response_time|$bytes_sent|$request_length|''"$upstream_addr"|$uuid|$span_id';此配置为 nginx 日志中,显示的信息
nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式;另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,可以参加ngx_http_log_module。一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。
log_format指令用来设置日志的记录格式,它的语法如下: log_format name format {format ...} 其中name表示定义的格式名称,format表示定义的格式样式。log_format有一个默认的、无须设置的combined日志格式设置,相当于Apache的combined日志格式,其具体参数如下: log_format combined '$remote_addr-$remote_user [$time_local]' ‘"$request"$status $body_bytes_sent’‘"$http_referer" "$http_user_agent"’也可以自定义一份日志的记录格式,不过要注意,log_format指令设置的名称在配置文件中是不能重复的。假设将Nginx服务器作为Web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,不能获取到客户端的真实IP地址了。 原因是经过反向代理后,由于在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。 通过$remote_addr变量拿到的将是反向代理服务器的IP地址。但是,反向代理服务器在转发请求的HTTP头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址。 这时候,要用log_format指令设置日志格式,让日志记录X-Forearded-For信息中的IP地址,即客户的真实IP。例如,创建一个名为mylogformat的日志格式,再$http_x_forwarded_forlog_for变量记录用户的X_Forwarded-For IP 地址: log_format mylogformat '$http_x_forwarded_for_$remote_user [$time_local]' ‘"$request"$status $body_bytes_sent’‘"$http_referer" "$http_user_agent"’ 在日志格式样式中,变量$remote_addr和$http_x_forwarded_for用于记录IP地址; $remote_user用于记录远程客户端用户名称; $time_local用于记录访问时间与时区; $request用于记录请求URL与HTTP协议; $status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404; $body_bytes_sent用于记录发送客户端的文件主体内容大小; $http_referer用于记录是从哪个页面链接访问过来的; $http_user_agent用于记录客户浏览器的相关信息。一般来说:nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:
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,具体可设置的参数格式及说明如下:
参数 说明 示例 $remote_addr 客户端地址 211.28.65.253 $remote_user 客户端用户名称 -- $time_local 访问时间和时区 18/Jul/2012:17:00:01 +0800 $request 请求的URI和HTTP协议 "GET /article-10000.html HTTP/1.1" $http_host 请求地址,即浏览器中你输入的地址(IP或域名) www.wang.com 192.168.100.100 $status HTTP请求状态 200 $upstream_status upstream状态 200 $body_bytes_sent 发送给客户端文件内容大小 1547 $http_referer url跳转来源 https://www.baidu.com/ $http_user_agent 用户终端浏览器等信息 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C; $ssl_protocol SSL协议版本 TLSv1 $ssl_cipher 交换数据中的算法 RC4-SHA $upstream_addr 后台upstream的地址,即真正提供服务的主机地址 10.10.10.100:80 $request_time 整个请求的总时间 0.205 $upstream_response_time 请求过程中,upstream响应时间 0.002如下是在nginx的LB代理层使用过的一个配置(nginx.conf中配置):
log_format main '$remote_addr $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''$http_user_agent $http_x_forwarded_for $request_time $upstream_response_time $upstream_addr $upstream_status';然后在nginx.conf文件或vhosts/*.conf文件中的access_log日志中指定级别为main。如下:
access_log logs/wiki_access.log main; error_log logs/wiki_error.log;........ 110.156.114.121 - [11/Aug/2017:09:57:19 +0800] "GET /rest/mywork/latest/status/notification/count?_=1502416641768 HTTP/1.1" 200 67 "http://wiki.wang-inc.com/pages/viewpage.action?pageId=11174759" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 - 0.006 0.006 12.129.120.121:8090 200 112.116.25.18 - [11/Aug/2017:09:57:24 +0800] "POST /json/startheartbeatactivity.action HTTP/1.1" 200 234 "http://wiki.wang-inc.com/pages/resumedraft.action?draftId=12058756&draftShareId=014b0741-df00-4fdc-90ca-4bf934f914d1" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 - 0.023 0.023 12.129.120.121:8090 200其中错误日志 error log 级别分为 debug、info、notice、 warn、error、crit,默认为error ,crit记录的日志最少,而 debug 记录的日志最多,如果你的 nginx 遇到问题,比如502频繁出现,但是看默认的error og并没有看到有意义的信息,那么可以调一下错误日志的级别,调成error 级别时,错误日志记录的内容会更加丰富,该级别在日志名后边定义格式如下,而且也可以将不同的错误类型分开存储如,可以定义多条 error_log
error_log logs/error.log; # 不写则是全部类型错误 error_log logs/error.log notice; # notice 类型错误 error_log logs/error.log info;每个日志级别包括更高级别。例如,如果您将日志级别设置为wam,则Nginx还将记录emror,crit,alert 和 emerg 消息。未指定log_level参数时,默认为error。
debug-调试消息。 info-信息性消息 notice-公告。 wamn-警告。 error-处理请求时出错。 crit-关键问题。需要立即采取行动。. alert -警报。必须立即采取行动。 emerg-紧急情况。系统处于无法使用的状态
sendfile
使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。 未开启sendfile。再发个比方:咱们现在有两台电脑,我们需要从PC1拿点东西去PC2,那我们就得先拿U盘去PC1里面拷贝,然后再用U盘拷贝到PC2中,而如果开启了这个sendfile,那就相当于直接隔空传过去,省去了拷贝的过程。
sendfile off;
咱们的Nginx是假设在CentOS操作系统上的,当服务过来的时候是通过CentOS的网络接口然后转发给Nginx。Nginx拿到信息后会根据其内容去硬盘(SSD)中找到那个目标文件,然后Nginx会把这个文件完整的读一遍,读到自己的内存中再交给应用程序,应用程序也把拿到的文件完整的读进自己的内存,再转发到CentOS的网络接口(当然这里面还有DMA [ Direct Memory Access直接访问内存 ] 的调度,网络接口的缓存和内核的缓存)网络接口再把其发送出去。这里的层层缓存就相当于上面所说的层层复制。
sendfile on;
这里通过Nginx会给内核发送一个信号,此时的应用程序不会再去把文件读取进自己的内存了,而是直接发送这个 sendfile() 信号(当然这其实是一个方法,里面会写明需要传出的文件和socket)给CentOS的网络接口,网络接口在收到信号后回去找到这个目标文件,然后发送出去。
keepalive_timeout 65;
连接的超时时间限制。keepalive_timeout:表示设置客户端连接保持活动的超时时间,单位是秒。在超过这个时间之后,服务器会关闭连接,因此如果您上传数据量较大,连接时间较长,也需要修改该参数的值。完成修改后,重启nginx即可。
client_max_body_size
client_max_body_size:2048 表示客户端请求服务器最大允许大小,单位是兆。如果请求的数据量大于client_max_body_size中设置的值,HTTP协议会报错413"Request Entity Too Large",因此当您上传的数据量较大时,需要将参数值改大。
client_max_body_size 413"Request Entity Too Large"client_header_buffer_size large_client_header_buffers 414 Request-URI Too Large、400 Request Header Or Cookie Too Large
相关文章:
nginx 代理01(持续更新)
1、如果请求是post,而且请求原是188.188.3.171,处理方式403 if ($request_method ~* "POST") # $request_method 等同于request的method,通常是“GET”或“POST” # 如果访问request的method值为POST则返回“o” {set…...
初阶C语言——操作符【详解】
文章目录1.算术操作符2.移位操作符2.1 左移操作符2.2 右移操作符3.位操作符按位与按位或按位异或4.赋值操作符复合赋值符5.单目操作符5.1单目操作符介绍6.关系操作符7.逻辑操作符8.条件操作符9.逗号表达式10.下标引用、函数调用和结构成员11表达式求值11.1 隐式类型转换11.2算术…...
37k*16 薪,年后直接上岗,3年自动化测试历经3轮面试成功拿下阿里Offer....
前言 转眼过去,距离读书的时候已经这么久了吗?,从18年5月本科毕业入职了一家小公司,到现在快4年了,前段时间社招想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,前几天拿到了阿里…...
利用Rust与Flutter开发一款小工具
1.起因 起因是年前看到了一篇Rust iOS & Android|未入门也能用来造轮子?的文章,作者使用Rust做了个实时查看埋点的工具。其中作者的一段话给了我启发: 无论是 LookinServer 、 Flipper 等 Debug 利器,还是 Flutt…...
零入门kubernetes网络实战-16->使用golang给docker环境下某个容器里添加一个额外的网卡
《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 上一篇文章,我们使用了golang在veth pair链接的网络命名空间里添加了网卡, 本篇文章,我尝试,在docker环境下…...
音频信号处理笔记(二)
文章目录1.1.3 过零率1.1.4 谱质心和子带带宽1.1.5 短时傅里叶分析法1.1.6 小波变换相关课程: 音频信号处理及深度学习教程傅里叶分析之掐死教程(完整版)更新于2014.06.06 - 知乎 (zhihu.com)1.1.3 过零率 过零率:是一个信号符号…...
钓鱼网站+bypassuac提权
本实验实现1 :要生成一个钓鱼网址链接,诱导用户点击,实验过程是让win7去点击这个钓鱼网站链接,则会自动打开一个文件共享服务器的文件夹,在这个文件夹里面会有两个文件,当用户分别点击执行后,则…...
合并两个有序链表——递归解法
题目描述21. 合并两个有序链表难度简单2922收藏分享切换为英文接收动态反馈将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1:输入:l1 [1,2,4], l2 [1,3,4]输出:[1,1,2,3,4,4]示例…...
ADRC自抗扰控制总结
目录 前言 1.ADRC形式 1.1形一 1.2形二 2.被控对象 3.仿真分析 3.1仿真模型 3.2仿真结果 4.学习问题 前言 前面的3篇文章依次介绍了微分跟踪器TD、状态观测器ESO和非线性状态误差反馈NLSEF三部分内容,至此ADRC的结构已经介绍完毕,现在对分块学习…...
3年工作之后是不是还在“点点点”,3年感悟和你分享....
经常都有人问我软件测试前景怎么样,每年也都帮助很多朋友做职业分析和学习规划,也很欣慰能够通过自己的努力帮到一些人进入到大厂。 2023年软件测试行业的发展现状以及未来的前景趋势 最近很多测试人在找工作的时候,明显的会发现功能测试很…...
【自动化测试】web自动化测试验证码如何测?如何处理验证码问题?解决方案......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 在对安全性有要求的…...
面试浅谈之 C++ STL 篇
面试浅谈之 C STL 篇 一 🏠 概述 HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是面试浅谈系列,收录在专栏面试中 😜😜😜 本系列将记录一些阿呆个人整理的面试题…...
【PTA Advanced】1144 The Missing Number(C++)
目录 题目 Input Specification: Output Specification: Sample Input: Sample Output: 思路 代码 题目 Given N integers, you are supposed to find the smallest positive integer that is NOT in the given list. Input Specification: Each input file contains…...
oracle的sqlnet.ora文件配置传输加密算法
sqlnet.ora文件位于ORACLE_HOME/network/admin目录中。sqlnet.ora文件中增加如下:SQLNET.ENCRYPTION_SERVER REQUIRED SQLNET.ENCRYPTION_TYPES_SERVER (RC4_256) SQLNET.CRYPTO_CHECKSUM_SERVER REQUIRED SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER MD5SQLNET.ENCRYP…...
RK3568存储性能测试
USBU盘储存性能参数(USB3.0接口)参数测试条件最小典型最大单位说明写速度写入1GB数据—32.6—MB/sU盘型号:KODAK,32GB USB3.0读速度读取1GB数据—66.7—MB/s 备注HW356X-CORE-4GB-32GBHW356X-GKA,操作系统:LinuxU盘储存性能参数(U…...
Homekit智能家居一智能灯泡
一、什么是智能灯 传统的灯泡是通过手动打开和关闭开关来工作。有时,它们可以通过声控、触控、红外等方式进行控制,或者带有调光开关,让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块,可与手机、家庭智能助手、或其他智能…...
轻量级 Java 权限认证框架——Sa-Token
文章目录Sa-Token 介绍SpringBoot 集成 Sa-TokenSa-Token 功能登录认证会话查询Token 查询权限认证权限校验角色校验注解鉴权注册 Sa-Token 拦截器关闭注解校验路由拦截鉴权注册 Sa-Token 路由拦截器[记住我] 模式密码加密Sa-Token 集成 Redis方式1、使用 jdk 默认序列化方式方…...
算法复习(四、五、六)
动态规划 动态规划算法的有效性依赖于问题本身所具有的两个重要性质:最优子结构、重叠子问题 关于动态规划算法和备忘录方法的适用条件: 要求: 用分治法和动态规划法分别解决最大子段和问题(第四步求最优解不需要掌握ÿ…...
SORT与DeepSORT简介
一、MOT( mutil-object tracking)步骤 在《DEEP LEARNING IN VIDEO MUTIL-OBJECT TEACKING: A SURVEY》这篇基于深度学习多目标跟踪综述中,描绘了MOT问题的四个主要步骤 1.跟定视频原始帧 2.使用目标检测器如Faster-rcnn, YOLO, SSD等进行检测,获取目标…...
TCP/IP网络编程——多播与广播
完整版文章请参考: TCP/IP网络编程完整版文章 文章目录第 14 章 多播与广播14.1 多播14.1.1 多播的数据传输方式以及流量方面的优点14.1.2 路由(Routing)和 TTL(Time to Live,生存时间),以及加入组的办法14…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...














