Home
> Nginx
-
【背景描述】
交付反馈一个客户请求我们的一个业务查询接口,在我们的后台日志观察客户的数据请求都是正常返回的,但是用户反馈,约有50%请求无法正常接收到结果。且对方提供了数据请求时候返回的报文header,如下:
结果返回正常时候的header头信息:
结果返回异常时候的header头信息:
【解决过程】
从两张图片来看,数据返回正常时候并没有“Content-Encoding: gzip“,即当传输的数据采用gzip时候,会造成请求结果异常。
我们前端采用的nginx作为代理转发服务器,检查gzip相关配置参数如下:
可以看到,对于...
阅读全文 →
-
一、nginx之tcp_nopush、tcp_nodelay、sendfile
1、TCP_NODELAY
你怎么可以强制 socket 在它的缓冲区里发送数据?
一个解决方案是 TCP 堆栈的 TCP_NODELAY选项。这样就可以使缓冲区中的数据立即发送出去。
Nginx的 TCP_NODELAY 选项使得在打开一个新的 socket 时增加了TCP_NODELAY选项。但这时会造成一种情况:
终端应用程序每产生一次操作就会发送一个包,而典型情况下一个包会拥有一个字节的数据以及40个字节长的包头,于是产生4000%的过载,很轻易地就能令网络发生拥塞。为了避免这种情况,TCP堆栈实现了等待数...
阅读全文 →
-
【背景说明】
研发有个需求,访问公司某个域名下的某个url时候需要认证,只有输入正确的用户密码才允许访问web内容。
【实现思路】
Nginx服务中的"ngx_http_auth_basic_module"模块可以实现此要求,默认情况下编译安装完nginx后,就已经安装启用了ngx_http_auth_basic_module模块,如果不需要这个模块,可以加上 --without-http_auth_basic_module关闭。
ngx_http_auth_basic_module模块指令:
语法: auth_basic string | off;
默认值: auth_basic off;
作用:默认表示不开启认证,后面如果跟上字符,这些字符会...
阅读全文 →
-
问题:
浏览器打开https://www.ttlsa.com/aaa.html,然后跳转到http://www.ttlsa.com/aaa.html
网站架构:用户--https--->nginx代理---http---->tomcat/nginx+php
nginx转发给后端的请求是http协议,后端程序跳转获取到的协议是http,返回一个redirect(http header中带Location:http://www.ttlsa.com/aaa.html),浏览器收到location,跳转到了location指定的地方。
解决方法
解决方法1:
在nginx代理中增加一个header,标志用户请求是http还是https,后端获取header决定跳转到http/https页面。这个方法需...
阅读全文 →
-
【写在前面】
对于Linux系统而言,普通用户只能使用1024以上的端口启动服务,而1024以内的端口只能由root用户使用,而通常像apache或者Nginx等服务,使用最多的是80和443端口,如果通过其他非root用户启动,就会报错如下:
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
一般情况下,线上的web服务都会使用root用户来启动,但是有时候为了安全或者是某些特殊...
阅读全文 →
-
【写在前面】
线上新项目,研发想实现使用Nginx做socket转发做负载均衡,其实说白了就是想实现基于TCP协议的后端业务的高可用。一般来说Nginx可以做http协议转发,并不支持tcp协议,但是从1.9.0版本开始增了“ngx_stream_core_module”模块,可以用于TCP协议的代理和负载均衡功能实现。
【模块介绍】
ngx_stream_core_module模块默认是没有编译的,需要编译安装Nginx时添加"--with-stream"配置参数。下面是官方网站上的一个示例:地址:http://nginx.org/en/docs/stream/ngx_stream_core_module.html
worker_proce...
阅读全文 →
-
从网上找到的关于Nginx 内置变量的相关解释,工作中会经常用到,在此记录下。
Nginx的内置变量:
$args, 请求中的参数;
$is_args, 如果已经设置$args,则该变量的值为“?”,否则为“”。
$content_length, HTTP请求信息头里的"Content-Length";
$content_type, 请求信息头里的"Content-Type";
$document_root, 针对当前请求所属的root指令设置的根目录路径;
$document_uri, 与$uri相同;
$host, 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$limit_rate, 对连接速率的限制;
$request_method, ...
阅读全文 →
-
负载均衡配置格式:
通常多个应用实例来做负载均衡是优化资源利用、最大化吞吐量、减少延迟、确保容错配置。Nginx可以通过不同的部署方案作为非常有效的HTTP负载均衡器,代理流量到后端服务器组。
首先,你得通过upstream设定后端服务器,这个指令放在http块里,分组里的服务器通过指令server配置,服务器可以写成IP地址与端口、域名、UNIX套接字(socket)等方式,其中如果域名可以被解析为多个地址,则这些地址都作为backend,下面是一个例子:
upstream backend {
server www.ceshi.com;
server 145.223...
阅读全文 →
-
报错现象:
经常会在Nginx虚拟主机的访问日志里有"GET /favicon.ico HTTP/1.1" 404 288 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)"这样的报错,但是又不影响访问,决定解决这个报错问题。
favicon.ico的作用:
一般用于作为缩略的网站标志,它显示在浏览器的地址栏、浏览器标签上或者在收藏夹上(如下图),是展示网站个性的缩略logo标志,也可以说是网站头像,目前主要的浏览器都支持favicon.ico,一般访问网站时候会自动搜寻网站下的/favicon.ico 文件(如果在网页上没有特别指明...
阅读全文 →
-
1xx – 信息提示
从100到199范围的HTTP状态码是信息报告码。基于各种原因考虑,大多数情况下我们 是很少看见这些代码的。首先,如果一个浏览器尝试访问一个网站,而网站返回这些代码时,它们往往都不会显示在屏幕上。它们只是浏览器使引用的内部码。另 外,这些代码不常见的另外一个原因是起初HTTP标准不允许使用这一范围的状态码。就其本身而言,它们也一直没有被广泛地使用。
状态代码
状态信息
含义
100
Continue
初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
101
Switching Pro...
阅读全文 →
-
写在前面:
公司最近需要对某个虚拟主机进行用户并发链接限制,具体需求是当某个IP超过指定的链接数时,返回服务繁忙的提醒页面。
实现过程:
Nginx限制IP连接数使用的是ngx_http_limit_conn_module模块,可以通过这个模块的中“limit_conn_zone”和“limit_conn”两个参数实现。
Nginx限制请求数使用的是ngx_http_limit_req_module模块,可以通过这个模块中“limit_req_zone”和“limit_req”两个参数实现。
ngx_http_limit_conn_module模块研究:
limit_conn_zone:
功能:用于定义一个zone,该zome将会被用于存储会话...
阅读全文 →
-
需求
秒杀、抢购并发限制、队列缓冲
下载带宽限制
防止攻击
nginx连接数限制模块
说明:nginx有很多模块、模块下面又分很多指令,下面就说说limit_conn_zone和limit_conn两指令
1、limit_conn_zone
语法:
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
nginx配置分为三个段:http、server、location,大概格式如下:
http {
server {
listen 80;
server_name www.tomener.com tomener.com;
location / {
ro...
阅读全文 →
-
写在前面:
由于公司网站之前没有做过日志切割,造成Nginx日志文件不断增长达到了几百G,现在要监控访问日志,这么大的日志分析起来非常不方便,所以现在需要每天把Nginx日志文件切割,然后以时间命名备份起来,方法如下:
方法一:
写脚本放到定时任务中,每天零点把旧的日志移动到备份目录中,并对nginx进程发送USR1信号使其重新生成日志并写入数据,然后删除60天之前的备份。
创建备份目录,并编写脚本:
# mkdir -p /opt/nginx-1.9.3/logs/logs_bak
# vi /opt/nginx-1.9.3/sbin/cut_nginx_log.sh
#!/bin/b...
阅读全文 →
-
Nginx是优秀的HTTP和反向代理服务器,京东各部门都在广泛使用,但普遍都面临着一些问题:
配置复杂,专业性强。
配置文件无法批量修改且配置变更依赖重启操作。
不同应用依赖不同模块、配置项,管理混乱。
同一应用的Nginx无法批量、快速扩容。
所有问题的根源在于Nginx是一个单机系统,虽然模块化、高性能,但在互联网高速发展的今天,像京东这样拥有大规模Nginx、业务集群的场景下,所有问题都有可能被无限放大,针对这种现状我们设计研发了JEN(JD EXTENDED NGINX),截止目前JEN已覆盖京东金融大部分核心业...
阅读全文 →