nginx优化

1.gzip压缩优化

1、优点:
a.节约带宽,省钱
b.传输速度快,用户体验好
2、使用模块:
nginx依赖ngx_http_gzip_module模块。
apache使用的是mod_deflate压缩功能
3、需要压缩的内容:纯文本(js,css,html),对于图片,视频,FLASH什么的不压缩,gzip_types参数控制,压缩占用cpu。
部署模板
http {
.......
    gzip  on;    #开启gzip压缩功能
    gzip_min_length  1k; #设置允许压缩的页面最小字节数; 表示文件小于几个字节不用压缩
    gzip_buffers     4 16k; #设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存
    gzip_http_version 1.1;  #识别http协议的版本,早期浏览器可能不支持gzip自解压,用户会看到乱码
    gzip_comp_level 9; #设置gzip压缩等级,等级1-9,最小的压缩最快 但是消耗cpu
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;   #制定压缩的类型,线上配置时尽可能配置多的压缩类型!
    gzip_disable "MSIE [1-6]\.";  #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip_vary on;  #启用应答头"Vary: Accept-Encoding"
}

2.expires缓存调优

1.简单的来说,nginx expires就是为用户访问的网站内容设定一个过期时间,当用户第一次访问这些内容时,会把这些内容存储在用户浏览器本地,这样用户第二次或者继续访问该网站时,浏览器会检查加载已经缓存在用户的浏览器本地内容,就不会在服务器进行下载了,直到内容被清除为止。
2.作用:可以将网站的图片。视频,css js等网站元素更改机会少的设置在客户端进行本地缓存时间长点,将代码缓存的时间短点。类似与apache的expires
3.优点:降低网站带宽,节省成本。|加快用户访问速度,提升用户访问体验|减少服务器成本|这是个比较重要的功能
nginx默认安装了expires功能
示例:
修改配置文件nginx.conf ,location字段中的设置

vim nginx.conf

location ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$

{
expires 3650d;

}

3.网络IO事件模型优化

设置连接超时时间   
keepalive_timeout  指令  Nginx 服务器与客户端保持连接的超时时间
send_timeout 指令        Nginx 服务器响应客户端的超时时间
client_header_buffer_size  指令 Nginx 服务器允许的客户端请求头部的缓冲区大小,默认为1KB
large_client_header_buffers 指令 
multi_accept 指令       Nginx 服务器时候尽可能多的接收客户端的网络连接请求,默认值为off 。

4.隐藏软件名和版本号

**更改源码隐藏软件名称及版本号**
在nginx编译安装之前,先更改,之后再编译安装
1、更改版本号,修改nginx-1.3.4/src/core/nginx.h
[root@oldboy /]# cd /home/oldboy/tools/
[root@oldboy tools]# cd nginx-1.6.2/src/core
[root@oldboy core]# sed -n '13,17p'nginx.h
#define NGINX_VERSION  "1.6.2" 修改为想要的版本号如2.4.3
#define NGINX_VER "nginx/" NGINX_VERSION 将nginx修改为想要修改的软件名称,如Apache。
修改后查看header结果:
[root@S1-SERVER nginx-1.3.4]# curl -I 10.0.0.182
HTTP/1.1 200 OK
Server:Apache/2.4.3
2、修改nginx-1.6.12/src/http/ngx_http_header_filter_module.c
需要修改的字符串
[root@M-SERVER http]# grep 'Server:nginx' ngx_http_header_filter_module.c
static char ngx_http_server_string[] ="Server:nginx" CRLF;
[root@M-SERVER http]# sed -i 's#Server:nginx#Server:Apache#g' ngx_http_header_filter_module.c
修改后的字符串
[root@M-SERVER http]# grep 'Server:Apache' ngx_http_header_filter_module.c
static char ngx_http_server_string[] ="Server:Apache" CRLF;
3)修改ngx_http_special_response.c
#vi nginx-1.3.4/src/http/ngx_http_special_response.c
static u_char ngx_http_error_full_tail[]=
"<hr><center>"NGINX_VER"</center>"CRLF
"</body>"CRLF
"</html>"CRLF
;
static u_char ngx_http_error_tail[]=
"<hr><center>nginx</center>"CRLF
"</body>"CRLF
"</html>"CRLF
;
修改为:
static u_char ngx_http_error_full_tail[]=
"<hr><center>"NGINX_VER"(http://oldboy.blog.51cto.com)</center>"CRLF"
</body>"CRLF
"</html>"CRLF
;
static u_char ngx_http_error_tail[]=
"<hr><center>Apache</center>"CRLF
"</body>"CRLF
"</html>"CRLF
;
**隐藏版本号**
在nginx配置文件的http标签内加入“server_tokens off; ”参数,也可以放大server标签和location标签中,如下:
http {
..........
server_tokens off;
..........
}
/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx -s reload
再此查看如下,浏览器访问错误页面也就没有版本号了
[root@c66-kslx conf]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx

5.防盗链优化

简单的说,就是某些不法的网站,通过在其自身网站程序里未经许可非法调用其他网站的资源,然后在自己的网站上显示这些调用的资源,达到了填充自身网站显示的效果,但是浪费了调用资源网站的网站流量,造成其他网站的带宽及服务压力吃紧,甚至宕机。
解决办法
(1)图片,视频上打水印,品牌。
(2)防火墙控制,根据ip控制。
(3)防盗链(根据referer控制)
https://blog.csdn.net/Lcongming/article/details/117913080

6.禁止恶意域名解析
影响用户,而且不利于SEO,影响网站收录权重,甚至由于恶意域名没有备案等原因导致服务器被关闭

打开Nginx配置文件/etc/nginx/sites-available/default,在server添加或修改如下:
server {
    listern 80 default;
    server_name  domin or ip;
    #【1】此处禁止非己域名解析到ip
    if ($host !~ ^(youdomain.cn|www.yourdomain.cn|others.yourdomain.cn)$ ) {
            return  400;
    }
    #此处禁止ip访问网站
    if ($host ~* "\d+\.\d+\.\d+\.\d+"){
    return 400;
    }
    ..........
}
server_name 后面要填写domin或IP"",不然nginx会启动失败。

7.禁止通过ip地址访问网站
避免别人恶意指向自己的IP

#禁止IP访问  
server  {  
       listen 80 default;  
       server_name _;      #设置这个句后,后面禁止ip访问后,可以通过域名访问
       server_name www.example.com example.com  #可以通过example.com域名访问服务器
       return 500;  # 添加这句,当用IP访问时,返回500错误码
   }

8.http请求方法优化

目的是:更快的获取到内容。 避免页面加载时间过长,出现请求超时等影响用户体验的问题
限制客户端请求的HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 501;
    }
    上面的配置实现了只允许GETHEADPOST请求,其他请求会直接跳转501

9.防dos攻击单ip并发连接的控制,与连接速率控制

限制请求率
限制连接的数量
关闭慢连接
设置ip黑名单和白名单

10.严格设置web站点目录的权限

设置权限不能是777

11.优化fastCGI的一个超时时间

在确认url没有问题的情况下 报404等错误,一般是 http 请求时间超过了 nginx 所配置的最大连接时间,服务器自动断开连接,并返回 404 资源未找到的错误
解决办法是 更改 nginx.conf 配置文件中的 keepalive_timeout 的值(默认65秒)使浏览器和服务器连接时长增大。为了方便测试,可以改成 600s 即10分钟,

12.启动nginx工作进程的数量,一般设为和cpu核心数相同

为什么要设为cpu核心数相同
1)Ngnix一般只做高并发代理,基本没用IO操作,算是CPU密集操作,所以再处理时基本是瞬时完成的,很少出现IO阻塞。
2)进程与CPU调度的关系,单个核心处理多个进程的时候,是排队处理的,所以将Worker进程数量设置超过核心数是没有太大意义的
如果有四颗CPU内核,就可以进行如下配置:

worker_processes 4;

worker_cpu_affinity 1000 0100 0010 0001;
worker_cpu_affinity配置仅对linux操作系统有效,linux操作系统使用sched_setaffinit()系统调用实现这个功能

13.设置单个工作进程worker的最大并发连接数

#配置Nginx worker进程最大打开文件数
worker_rlimit_nofile 65535;
放置位置:主标签段,不在任何区块    

模板示例

worker_processes  2;  #启动nginx工作进程的数量
error_log logs/error.log;
 
#配置Nginx worker进程最大打开文件数
worker_rlimit_nofile 65535;     
 
user www www;
events {
    #单个进程允许的客户端最大连接数
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    #访问日志配置
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    #隐藏版本号
    server_tokens on;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值