jz彪悍一只猫

nginx 优化

nginx是什么

nginx是一个轻量级高性能的http和反向代理服务器,具有正向代理、反向代理、负载均衡、动静分离、高可用集群,支持平滑升级、

nginx的工作原理

 

 

nginx优化

1、添加用户认证

auth_basic “password”;

auth_basic_user_file “ /usr/local/nginx/pass”; #pass文件名随意,网站用户信息的存放的路径。

Yum -y install httpd-tools    安装可以生成认证文件的工具

Htpasswd -c /usr/local/nginx/pass tom  #创建认证文件并创建tom账户,-c不能重复使用。

2、开启加密功能

 

Openssl genrsa > cert.key   #生成私钥

Openssl req -x509 -key cert.key > cert.pem  #根据私钥生成公钥

在实际的生成环境中,公钥和私钥是花钱购买的,会得到一个证书,证书包含公钥和私钥;不是自己生成的。

3、开启nginx主机状态信息

 

 

active connections – 活跃的连接数量

server accepts handled requests — 总共处理了11989个连接 , 成功创建11989次握手, 总共处理了11991个请求

reading — 读取客户端的连接数.

writing — 响应数据到客户端的数量

waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.

4、修改连接数量和worker数量

根据cpu 个数和内核数修改worker的数量

根据系统所能打开的最大打开文件数修改worker_connections的数量

cat /proc/sys/fs/file-max 查看系统的最大文件打开数量

vim /etc/sexurity/limits.conf  永久修改文件打开数量,不能超过系统所允许

临时修改为ulimit -n 10000

5、修改地址栏过长导致的报错

Client_header_ buffer_size 100k;#客户端请求的包头数据url长度,包括地址栏的信息

Large_client_header_buffers   4  100k;   #如果上述的容量不够,则再开启四个100k

6、定义客户端缓存nginx网页数据

定义对静态页面的缓存时间

 

7、开配置Nginx支持PHP动态网站,因为有大量PHP脚本需要执行,因此还需要开启Nginx的各种fastcgi缓存,加速PHP脚本的执行速度。

 fastcgi_buffers 8 16k;                  #缓存php生成的页面内容,8个16k

 fastcgi_buffer_size 32k;              #缓存php生产的头部信息,32k

 fastcgi_connect_timeout 300;         #连接PHP的超时时间,300秒

 fastcgi_send_timeout 300;             #发送请求的超时时间,300秒

 fastcgi_read_timeout 300;           #读取请求的超时时间,300秒启支持php动态解析

8、利用memcached解决重复登录问题

需要安装php-pcel-memcache memcached与php关联起来

安装memcache  

 

php 文件中修改配置文件

 

9、使用varnish加速网站服务

安装varnish pcer-devel  readline python-docutils

解压安装varnish

创建varnish用户

cp /etc/example.vcl/  /usr/local/etc/default.vcl

vim /etc/usr/local/etc/default.vcl  

 

Varnish -f /usr/local/etc/default.vcl  启动varnish

 

10、删除不要的模块—without

--without-http_autoindex_module  

--without-http_ssimodule  删除自动索引文件目录模块

11、隐藏版本信息

server_tokens off; 隐藏具体的版本号

12、限制用户访问频率

DDOS攻击者会发送大量的并发连接,占用服务器资源(包括连接数、带宽等),这样会导致正常用户处于等待或无法访问服务器的状态

nginx_http_limit_req_module模块  可以有效降低ddos攻击的风险

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

 server {

        listen 80;

        server_name localhost;

        limit_req zone=one burst=5;}

限制并发数量

Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用limit_conn_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看下:

    http {

limit_conn_zone $binary_remote_addr zone=myip:10m;

limit_conn_zone $server_name zone=myServerName:10m;

    }

 

    server {

        location / {

            limit_conn myip 10;

            limit_conn myServerName 100;

            rewrite / http://www.lijie.net permanent;

        }

    }

 

13、拒绝非法请求

 

#如果用户使用非GET或POST方法访问网站,则retrun返回错误信息

 if ($request_method !~ ^(GET|POST)$ ) {

                     return 444;

               }    

14、防止buffer溢出

当客户端连接服务器时,服务器会启用各种缓存,用来存放连接的状态信息。

如果攻击者发送大量的连接请求,而服务器不对缓存做限制的话,内存数据就有可能溢出(空间不足)

client_body_buffer_size  1k;

client_header_buffer_size 1k;

client_max_body_size 1k;

large_client_header_buffers 2 1k;

15、隐藏版本信息和头部信息

在配置文件中添加server_tokens off;治标不治本,php探针还可以看到

1,修改src/core/nginx.h(Nginx内部名称的)

#define NGINX_VERSION "1.12.0"

#define NGINX_VER "nginx/" NGINX_VERSION

2,修改src/http/ngx_http_header_filter_module.c(HTTP ResponseHeader)

 static u_char ngx_http_server_string[] = "Server: nginx" CRLF

3,修改src/http/ngx_http_special_response.c(修改错误页的底部Footer)

static u_char ngx_http_error_tail[] = 下的nginx信息

15 页面出错了如何排查

先看页面,看具体哪个页面出错,是否复现,不复现需要考虑是否偶发现象,复现则查看f12信息,包括路由跳转是否正确(request url拼接正确),状态码,console报错信息,如果未能定位到根因,查看对应组件应用日志,定位具体原因,包括连接超时(如关联组件挂了无法连接),网络问题,代码问题,数据写入格式问题等,如果非平台性问题,联系开发人员去解决,是平台性问题则去依次排查各组件及配置

15Rewrite全局变量是什么?

变量

含义

$args

这个变量等于请求行中的参数,同$query_string

$content length

请求头中的Content-length字段。

$content_type

请求头中的Content-Type字段。

$document_root

当前请求在root指令中指定的值。

$host

请求主机头字段,否则为服务器名称。

$http_user_agent

客户端agent信息

$http_cookie

客户端cookie信息

$limit_rate

这个变量可以限制连接速率。

$request_method

客户端请求的动作,通常为GET或POST。

$remote_addr

客户端的IP地址。

$remote_port

客户端的端口。

$remote_user

已经经过Auth Basic Module验证的用户名。

$request_filename

当前请求的文件路径,由root或alias指令与URI请求生成。

$scheme

HTTP方法(如http,https)。

$server_protocol

请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr

服务器地址,在完成一次系统调用后可以确定这个值。

$server_name

服务器名称。

$server_port

请求到达服务器的端口号。

$request_uri

包含请求参数的原始URI,不包含主机名,如”/foo/bar.php?arg=baz”。

$uri

不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。

$document_uri

与$uri相同。

16nginx访问常用脚本

1.根据访问IP统计UV

awk '{print $1}'  access.log|sort | uniq -c |wc -l

 

2.统计访问URL统计PV

awk '{print $7}' access.log|wc -l

 

3.查询访问最频繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

 

4.查询访问最频繁的IP

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

 

5.根据时间段统计查看日志

cat  access.log| sed -n '/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p'|more

 

6.查看nginx的并发量

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

posted on 2020-10-25 19:08  jz彪悍一只猫  阅读(152)  评论(0)    收藏  举报

导航