
nginx
文章平均质量分 86
nginx知识点
赶路人儿
一个十年以上编程人员,擅长使用java、python、C++等语言,具有广告投放、个性化推荐引擎等超大规模系统开发经验。
展开
-
http协议之Range
http协议中可能会遇到:请求取消或数据传输中断,这时客户端已经收到了部分数据,后面再请求时最好能请求剩余部分(断点续传);或者,对于某个较大的文件,能够支持客户端多线程分片下载...以上在我们平时应用中已经有很多产品支持了,其中原理就和http协议中的Range有关。HTTP协议博大精深,设计有很多巧妙的地方,Range也许就是一处吧。原创 2023-01-12 19:25:38 · 8683 阅读 · 1 评论 -
SO_REUSEPORT socket选项介绍以及在nginx上的配置
SO_REUSEPORT是socket的一个选项:1)开启内核的网络链接分配负载均衡:允许多个进程/线程 bind/listen相同的IP/PORT,提升了新链接的分配性能。2)在内核级解决了惊群问题:每个进程可以 bind/listen相同的IP/PORT,相当于每个进程拥有独立的 listen socket 的完全队列,避免了共享 listen socket 的资源争抢,提升了并发的吞吐。内核通过哈希算法,将新链接相对均衡地分配到各个开启了 reuseport 属性的的进程。原创 2022-12-15 18:32:39 · 3321 阅读 · 0 评论 -
Nginx反向代理,当后端为Https时的一些细节和原理
Nginx反向代理,当后端为Https时的一些细节和原理转载 2022-11-08 14:20:22 · 11278 阅读 · 3 评论 -
Nginx proxy_cache 使用示例
动态网站使用缓存是很有必要的。前段时间使用了 nginx proxy_stroe 来保存静态页面,以达到缓存的目的。当然 proxy stroe 用来做缓存是不够好的方案(stroe存储在磁盘,而proxy_cache使用的是内存)。缓存这一块当然还有 squid 之类的独立缓存服务器。如果使用 nginx 为 web 服务器,还要加个 squid 来缓存,是觉得多了一个 http 请求层。幸好 nginx 0.7 有了 proxy_cache 来做这个缓存的事。之前来有个 ncache 是新浪员工开发的原创 2022-07-09 23:24:21 · 804 阅读 · 0 评论 -
Nginx 通过upstream反向代理报 400 Bad Request
通过nginx做反向代理,配置如下:现象:返回的http状态吗400.查看日志没有抱错。原因:Host 为空。解决方法:设置host值搜索该问题时,了解到:如果upstream转发域名时也会遇到这个问题,描述如下:所出现的现象就是,从 192.168.1.10 或者 192.168.1.11 请求 192.168.1.11 的 12345 端口,都会返回 400。最初给请求头加上了 Host ,比如 或者 ,但还是报错,于是只好抓包进行查看,包括经过 Nginx 12345 端口转发的原创 2022-07-09 00:25:48 · 11774 阅读 · 4 评论 -
nginx下location的root和alias指令配置总结
Nginx配置中location、root和alias的关系一直很让人困惑,查询好多资料也没能搞明白,于是自己进行了实际操作、总结如下。1、root指令:说明:在location和root上,后面可以带/ 也可以不带/ ,效果一样。# tree /data/root//data/root/├── file1.html└── r├── file2.html└── t└── file3.htmlhttp://9.135.136.52/ :openresty默认首页;原创 2021-12-12 19:02:49 · 11686 阅读 · 1 评论 -
Nginx -- proxy_pass配置
一、proxy_pass作用域: location不影响浏览器地址栏的url 设置被代理server的协议和地址 协议可以为http或https 地址可以为域名或IP二、配置规则2.1 测试环境 测试机: 172.16.200.160 my.yemao.com 172.16.200.143 test.yemao.com 2.2 url 后带 / (则不会加上location中的匹配路径)在proxy_pass中的代理url后加上/,代理转发的u..转载 2021-12-10 10:10:50 · 14555 阅读 · 1 评论 -
nginx获取get、post请求参数
使用nginx原生指令、和lua的方法,获取http协议的get、post方法的参数原创 2021-06-09 23:09:30 · 28015 阅读 · 1 评论 -
centos6.9安装systemtap+ FlameGraph 对nginx内存占用生成火焰图
一台centos上安装了nginx 1.8.0,现需要对其内存使用情况进行查看,具体操作步骤如下。查看centos的内核版本:# uname -aLinux online123.virtual 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux1、下载systemTap依赖:下载kernel-devel-[版本号]、kernel-debuginfo-[版本号]、k原创 2021-02-02 21:54:48 · 849 阅读 · 1 评论 -
HTTP 请求头中的 X-Forwarded-For
通过名字就知道,X-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中。X-Forwarded-For 请求头格式非常简单,就这样:X-Forwarded-For: client, prox原创 2020-08-01 14:47:25 · 24365 阅读 · 0 评论 -
http 协议中的content-type
content-type可以位于请求头、响应头,分别代表:Request头:请求的与实体对应的MIME信息(post请求时的请求体) Response头:返回内容的MIME类型由于http1.0版规定,头信息必须是 ASCII 码类型(文本),后面的实体数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用。同样,在请求时,通过它可以告诉服务器post请求体属于那种格式。1、响应头中的content-type:在响应中,Conte原创 2020-07-18 19:45:05 · 3827 阅读 · 0 评论 -
HTTP 协议中的 Transfer-Encoding
Transfer-Encoding,是一个 HTTP 头部字段,字面意思是「传输编码」。实际上,HTTP 协议中还有另外一个头部与编码有关:Content-Encoding(内容编码)。Content-Encoding 通常用于对实体内容进行压缩编码,目的是优化传输,例如用 gzip 压缩文本文件,能大幅减小体积。内容编码通常是选择性的,例如 jpg / png 这类文件一般不开启,因为图片格式已经是高度压缩过的,再压一遍没什么效果不说还浪费 CPU。而 Transfer-Encoding 则是用来改变转载 2020-07-18 17:37:55 · 2792 阅读 · 1 评论 -
Openresty base64编码
OpenResty目前内建支持的有Base64和JSON两种格式,下面我们介绍base64.Base64格式使用64个字符,可以把任意数据转换为ASCII码可见字符串,应用得非常普遍。OpenResty使用ngx.encode_base64和ngx.decode_base64这两个函数实现了标准的Base64编码和解码:local str = "1234" local enc = ngx.encode_base64(str) -- 编码为“ MTizNA==”local dec= ngx转载 2020-07-09 22:00:26 · 4305 阅读 · 0 评论 -
openresty对响应进行压缩
前面文章介绍了如何使用子请求的方式让nginx帮我们做zip压缩,见:https://blog.csdn.net/liuxiao723846/article/details/107126974这里我们再介绍一种zlib的方式。(注:zlib的压缩不是gzip格式)原创 2020-07-09 20:11:38 · 652 阅读 · 0 评论 -
nginx收集request_body、response_body
1、收集request_body:对于get请求,request_body始终是空,对于post请求,request_body是参数信息。request_body的获取有两种方式:使用nginx ngx_http_core模块的$request_body; openresty中使用lua脚本。# 首先修改配置文件,我这里采集的日志只有request_body字段vim /opt/nginx/conf/nginx.conflog_format main $request_body;转载 2020-07-08 21:10:18 · 22057 阅读 · 0 评论 -
lua-resty-kafka模块使用
github:https://github.com/doujiang24/lua-resty-kafka安装该客户端是使用纯lua脚本写的,借助了openresty的cosocket api实现了非阻塞IO。不过该客户端支持的kafak协议不是很完全。这种纯lua的模块安装很简单,直接解压,然后将对应的文件拷贝到openresty下即可。(先下载安装openresty)cd /usr/localwget https://github.com/doujiang24/lua-resty-kaf原创 2020-07-08 19:51:19 · 4111 阅读 · 5 评论 -
获取nginx响应头、响应体
在原生nginx中无法获取响应相关信息。我们可以在openresty中借助lua来获取这些信息。worker_processes 1;error_log logs/error.log;events { worker_connections 1024;}http { log_format log_req_resp '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_byte转载 2020-07-08 18:29:22 · 8780 阅读 · 0 评论 -
lua-zlib模块安装、使用
github:https://github.com/brimworks/lua-zlib在nginx上对gzip数据进行解压需要使用lua,借助一个库:lua-zlib, lua是一个和C语言结合紧密的脚本语言,实际上lua-zlib就是一个C语言编写的库,我们现在需要做的就是将其编译成一个动态链接库zlib.so,让lua来引用。注:lua-zlib这个库可以对gzip解压,无法压缩成gzip,只能压缩成deflate。编译该库时需要lua环境,由于安装了openresty(内置了lua环境)原创 2020-07-08 17:25:16 · 6402 阅读 · 0 评论 -
如何压缩 HTTP 请求正文
上文介绍了HTTP 协议中的 Accept-Encoding/Content-Encoding 机制。这套机制可以很好地用于文本类响应正文的压缩,可以大幅减少网络传输,从而一直被广泛使用。但 HTTP 请求的发起方(例如浏览器),无法事先知晓要访问的服务端是否支持解压,所以现阶段的浏览器没有压缩请求正文。有一些通讯协议基于 HTTP 做了扩展,他们的客户端和服务端是专用的,可以放心大胆地压缩请求正文。例如 WebDAV 客户端就是这样。实际的 Web 项目中,会存在请求正文非常大的场景,例如发表长.转载 2020-07-04 17:20:03 · 1897 阅读 · 0 评论 -
HTTP 协议中的 Content-Encoding
Accept-Encoding 和 Content-Encoding 是 HTTP 中用来对「采用何种编码格式传输正文」进行协定的一对头部字段。它的工作原理是这样:浏览器发送请求时,通过 Accept-Encoding 带上自己支持的内容编码格式列表;服务端从中挑选一种用来对正文进行编码,并通过 Content-Encoding 响应头指明选定的格式;浏览器拿到响应正文后,依据 Content-Encoding 进行解压。当然,服务端也可以返回未压缩的正文,但这种情况不允许返回 Content-Encodi转载 2020-07-04 17:12:11 · 2004 阅读 · 0 评论 -
nginx lua 响应进行gzip压缩
最近在用nginx lua做一个项目时,由于放回结果在100kb左右,所以需要进行gzip压缩,节约网络带宽,但是在lua端又没有很好的压缩办法,所以想到了曲线救国的方案。我们只需要在nginx端再开一个server,然后反向代理lua的接口,通过设置代理gzip压缩来达到将lua返回值进行压缩的结果。经过试验,最终一个80kb的返回值,通过gzip level 1(最快压缩方式)压缩后,仅仅7kb,我们原本峰值300mb的带宽瞬间掉到20mb以下,效果立竿见影,cpu压力有所上升,但是整体性能还是维持转载 2020-07-04 17:04:42 · 1417 阅读 · 0 评论 -
开始使用 VeryNginx
VeryNginx是一个功能强大而对人类友好的 Nginx 扩展程序,这是作者的原话。很久之前我就看到过这个项目,直到最近我才在本站试用了一把,确实好用,于是想通过本文把它介绍给更多人。VeryNginx 主要由两部分组成:基于 lua-nginx-module 开发的 Lua 脚本,以及基于 HTML/CSS/JS 开发的 Web 控制面板 —— 用于生成和管理 Lua 脚本所需配置。lua-nginx-module 能让 Lua 脚本直接跑在 Nginx 内部,比用 C 语言开发 Nginx .转载 2020-07-04 17:01:34 · 1562 阅读 · 0 评论 -
nginx访问静态文件不下载
1、什么是MIME-TYPE?MIME——Multipurpose Internet Mail Extension(多用途因特网邮件扩展)最初是为了满足电子邮件支持多字符集及附件而出现的。MIME Type 不是个人指定的,是经过 ietf 组织协商,以 RFC 的形式作为建议的标准发布在网上的,大多数的 Web 服务器和用户代理都会支持这个规范。2、MIME与HTTP协议除了支持电子邮件...原创 2019-10-09 21:13:11 · 9428 阅读 · 0 评论 -
openresty+lua实现流量百分比分配
1、安装openresty:#!/bin/bash#NGINX_SERVER_IP="10.153.167.190"SOURCE_DIR="/data/jenkins_data"TARGET_DIR="/usr/local"NGINX_SOURCE_FILE="openresty-1.9.7.3.tar.gz"NGINX_TARGET_FILE="openresty-1.9.7.3...原创 2019-08-17 16:53:15 · 2633 阅读 · 0 评论 -
nginx location中多个if里面proxy_pass
1、首先我们回顾一下nginx中location的相关知识1)location的匹配指令:~ #波浪线表示执行一个正则匹配,区分大小写 ~* #表示执行一个正则匹配,不区分大小写 ^~ #^~表示普通字符匹配,不是正则匹配。如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 = #进行普通字符精确匹配 @ #"@" 定义一个命名的...原创 2018-10-18 16:59:46 · 48290 阅读 · 0 评论 -
Nginx处理请求的11个阶段(agentzh的Nginx 教程学习记录)
Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-read、server-rewrite、find-config、rewrite、post-rewrite、preaccess、access、post-access、try-files、content 以及 log。1、post-read最先执行的 post-read 阶段在 Nginx 读取并解析完请求头(r...转载 2018-10-18 15:20:43 · 451 阅读 · 0 评论 -
nginx rewrite 指令last break区别
nginx 的官方注释是这样的:last stops processing the current set of ngx_http_rewrite_module directives followed by a search for a new location matching the changed URI;break stops processing the curre...转载 2018-10-18 11:23:42 · 693 阅读 · 0 评论 -
nginx常用的内置变量以及重定向
一、nginx内置常用变量:$arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值;$args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah; $query_string #与$args相同,二者的区别是args可以修改,query_string只读;$binary_remote_addr #二进制的客...原创 2018-10-18 11:02:24 · 3904 阅读 · 0 评论 -
nginx动静分离,排除某个路径下的静态资源
我们的web项目在nginx上做了一次动静分离,在nginx上的配置:location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /data/vangogh/; expires 1d; #使用expires缓存模块,缓存到客户端30天 } ### refus...原创 2018-07-17 12:40:54 · 12072 阅读 · 0 评论 -
nginx访问静态文件
假设在nginx服务器上,/data/test目录下有文件a.json,按照如下方式配置nginx,http { server { listen 80; charset utf-8; root /data/test; index index.html index.htm...原创 2018-04-27 17:35:53 · 1543 阅读 · 0 评论 -
nginx 配置$Query String
实际开发中经常有根据请求参数来路由到不同请求处理者的情况,根据POST请求参数需要些nginx插件,这里主要简单介绍下如何根据GET参数来路由。1、location进行路径最常见的是通过location进行路径匹配的时候,但是没办法使用正则表达一起捕获这个路径和querstring的参数。如果我们想通过URL里面的Query String进行不同的rewrite,应该如何处理呢?答案就是$...原创 2017-02-08 12:36:10 · 42174 阅读 · 0 评论 -
nginx之gzip
搜索Nginx的模块,发现和Gzip相关的模块有如下几个:Gzip: Gzip responses.Gzip Precompression: Serves precompressed versions of static files.Gunzip: On-the-fly decompressing of gzipped responses.这些都是和Response相关的Gzip,原创 2016-11-06 18:05:40 · 464 阅读 · 0 评论 -
nginx之tcp_nopush、tcp_nodelay
1、TCP_NODELAY你怎么可以强制 socket 在它的缓冲区里发送数据?一个解决方案是 TCP 堆栈的 TCP_NODELAY 选项。这样就可以使缓冲区中的数据立即发送出去。Nginx的 TCP_NODELAY 选项使得在打开一个新的 socket 时增加了TCP_NODELAY选项。但这时会造成一种情况:终端应用程序每产生一次操作就会发送一个包,而典型情况下一原创 2016-09-23 11:53:58 · 14918 阅读 · 0 评论 -
http Cache-control
Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。原创 2016-05-18 20:10:40 · 771 阅读 · 0 评论 -
nginx的server_name配置
1)server_name指令主要用于配置基于名称虚拟主机(在http > server 里面),server_name指令在接到请求后的匹配顺序分别为:1.准确的server_name匹配,例如:server {listen 80;server_namessdr.infowww.ssdr.info;...} 2.以*通配符开始的字符串:server {原创 2016-04-16 17:32:44 · 2632 阅读 · 0 评论 -
Nginx实现多个站点使用一个端口(配置Nginx的虚拟主机)
Nginx 是一个轻量级高性能的 Web 服务器, 并发处理能力强, 消耗资源小, 无论是静态服务器还是网站, Nginx 表现更加出色, 作为 Apache 的补充和替代使用率越来越高,目前很多大型网站都在使用Nginx做为 Web 服务器,例如:人人网。另外淘宝研发大军针对大访问量网站的需求,对Nginx做了专门的定制,添加了很多高级功能和特性(Tengine),Tengine的性能和稳定性已转载 2016-04-13 18:14:17 · 1121 阅读 · 0 评论 -
nginx日志切割
Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息。一条典型的Web访问日志如下:112.97.37.90 - - [14/Sep/2013:14:37:39 +0800] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Lin转载 2016-03-27 00:11:06 · 886 阅读 · 0 评论 -
TIME_WAIT问题小结
1、TIME_WAIT的产生原因因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭。先发FIN包的一方执行的是主动关闭;后发FIN包的一方执行的是被动关闭。主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL时长。TIME_WAIT问题小结 – 网易杭州QA – 网易杭州 QA TeamMSL指的是报文段的最大生存时间,如果报文段在网络活动了MSL转载 2016-02-26 10:12:06 · 2914 阅读 · 0 评论 -
nginx+tomcat负载均衡、动静分离
一、负载均衡:1、准备工作:0)安装nginx和tomcat;1)在/usr/local/nginx/conf 目录下建立一个conf.d 文件夹2) 修改nginx.conf配置文件,在http block下加上如下内容:include conf.d/*.conf; 2、配置:1)在conf.d文件夹下建立tomcat.conf文件,内容:#upstre原创 2015-10-28 13:20:30 · 1361 阅读 · 0 评论 -
Nginx和Tomcat负载均衡实现session共享
以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架。 此框架的优势: 1、支持Tomcat6和Tomcat7 2、操作粘性或不黏性Session 3、没有单点故障转载 2015-10-28 13:08:38 · 780 阅读 · 0 评论