nginx的奇淫怪招

news/2024/7/9 18:30:26 标签: 运维, epoll, 操作系统

前言

nginx作为Web服务器之一,说不出的优点,哈哈。之前用过Apache,发现有点臃肿,不够nginx灵活(个人意见,不喜勿喷)。用了一段nginx,发觉有几点优化nginx是可以做的。有兴趣的朋友请看看


1、gzip压缩优化

开启网站gzip压缩功能,是nginx优化的最简单也是最容易入手的一个手段。假如你的网站是500K,压缩后是350K左右。

gzip配置的常用参数

gzip
决定是否开启gzip模块
param:on|off
example:gzip on;gzip_buffers 
设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间
param1:int
param2:int(k) 后面单位是k
example: gzip_buffers 4 8k;gzip_comp_level
设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
param:1-9
example:gzip_com_level 1;gzip_min_length
当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩
param:int
example:gzip_min_length 1000;gzip_http_version
用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项,目前此项基本可以忽略
param: 1.0|1.1
example:gzip_http_version 1.0gzip_proxied
Nginx做为反向代理的时候启用,
param:off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any]
expample:gzip_proxied no-cache;
off – 关闭所有的代理结果数据压缩
expired – 启用压缩,如果header中包含”Expires”头信息
no-cache – 启用压缩,如果header中包含”Cache-Control:no-cache”头信息
no-store – 启用压缩,如果header中包含”Cache-Control:no-store”头信息
private – 启用压缩,如果header中包含”Cache-Control:private”头信息
no_last_modified – 启用压缩,如果header中包含”Last_Modified”头信息
no_etag – 启用压缩,如果header中包含“ETag”头信息
auth – 启用压缩,如果header中包含“Authorization”头信息
any – 无条件压缩所有结果数据gzip_types
设置需要压缩的MIME类型,非设置值不进行压缩
param:text/html|application/x-javascript|text/css|application/xml
example:gzip_types text/html;复制代码

在Linux下,编译nginx的配置文件

vi /etc/nginx/nginx.conf复制代码

然后配置为下:

server {

    listen 80; #监听端口
    server_name localohst; #监听域名
    gzip on; #开启gizip
    gzip_buffers 32 4K;#压缩在内存中缓冲32块 每块4K
    gzip_comp_level 6 ;#压缩级别 推荐6
    gzip_min_length 4000;#开始压缩的最小长度4bit
    gzip_types text/css text/xml apploation/x-javascript;#只对CSS、XML、JS文件进行压缩。 默认压缩text/html 不需要指定,否则报错
    
    location / {
        root /var/www/a; #根目录定位
        index index.html;
                }
        }复制代码

配置后,重启nginx即可。


访问网站后,可以F12查看Network,再看到Content-Encoding:gzip代表开启成功。



2、expires缓存

nginx可以通过设置expires页面缓存时间,达到不缓存或者是一直缓存的状态,减少服务器请求之外,也提升网站负载能力。


配置格式:expires[time|epoch|max|pff]

time:默认单位(s)
  expires 60s;//缓存60秒 s(second)代表秒
  expires 1h;//缓存2小时 h(hour)代表小时
  expires 30d;//缓存30天 d(day)代表天
  expires 12m;//缓存12个月 m(month)代表月

epoch:指定“Expires”的值为 1 January, 1970, 00:00:01 GMT。 

max:指定“Expires”的值为 31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。 

-1:指定“Expires”的值为当前服务器时间-1s,即永远过期。(负数:Cache-Control: no-cache,正数或零:Cache-Control: max-age = #(# 为您指定时间的秒数))。 

off:不修改“Expires”和”Cache-Control”的值。复制代码


例:

server {

    listen 80;  #监听端口
    server_name localohst;  #监听域名

    location /  {
        root /var/www/a;  #根目录定位
        index index.html index.php;
        }

    location ~ .*\.(jpg|jpeg|gif|png|js|css)$ {
        expires 5d;  #只对图片、JS及CSS缓存5天
        }

       }复制代码

expires配置使用方法不仅限于上面的例子。



3、事件模型优化

这一个事件模型,说真的,我也看得一脸懵逼,建议大家有兴趣的直接看这里。

那讲到优化,nginx的连接处理特点是:不同的操作系统采用不同的IO模型。在linux下,使用的是epoll的IO多路复用模型。

我们打开events模块(详细),配置如下:

events {accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为onmulti_accept on; #设置一个进程是否同时接受多个网络连接,默认为offuse epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventportworker_connections 1024; # 最大连接数client_header_buffer_size 4k;open_file_cache max=2000 inactive=60s;open_file_cache_valid 60s;open_file_cache_min_uses 1}复制代码


4、隐藏版本号

随便暴露nginx的版本号是灰常危险的,所以通过以下方式隐藏:

启动nginx /usr/local/nginx/sbin/nginx ,是在配置文件中加入server_tokens off;参数禁止版本信息泄漏。


改完后,重启nginx即可。


5、防盗链优化

防盗链是什么?简单来说就是防止别人随意调用网站的图片,要想实现防盗链,直接打开nginx.conf,添加下面的配置:

location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ {
        valid_referers blocked www.baidu.com google.com;  
        if ($invalid_referer) {
            return 404;
        }
}
## jpg|jpeg|JPG|png|gif|icon,这些是你想要屏蔽的文件类型,可以根据情况修改。
##只需要把文中 www.baidu.com google.com 修改为你允许显示你网站图片的其他网站域名,注意中间用空格分开,而不是逗号。

##假如要设置整个目录,可以这样写
location ~ ^/images/ {
	valid_referers none blocked www.baidu.com google.com;
	if ($invalid_referer) {
		return 404;
	}
	#rewrite ^/ http://a.timgle.com/404.jpg;
}
复制代码


6、禁止恶意域名解析

总会有一些无聊的人,喜欢把域名解析到别人服务器上,但是不怕,有办法:

在nginx.conf下添加下面的配置:

server
{
    listen 80 default;
    server_name _;
    return 500;
}
复制代码


最后

其实nginx优化还有很多很多,我这里就不一一举例出来了。

希望大家还有什么问题都可以与我交流探讨,互相学习学习。




http://www.niftyadmin.cn/n/836948.html

相关文章

鼠标像素拾取器的实现(坐标RGB)

环境:jdk1.2包: import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.Point;import java.awt.Robot;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.StringSelection;import java.awt.d…

mysql修改数据库结构用哪一项,mysql alter修改数据库表结构用法

1.alter操作表字段(1)增加字段alter table 表名 add 字段名 字段类型;alter table student add name varchar(10);(2)修改字段alter table 表名 change 旧字段名 新字段名 字段类型;alter table 表名 modify 字段名 字段类型;//修…

vue常用的小知识点

2019独角兽企业重金招聘Python工程师标准>>> 一、this.$nextTick方法 是一个更新视图的方法。在某些时候需要修改数据或dom时不会更新,可以通过this.$nextTick方法实现更新视图更新数据、dom结构。 例:this.$nextTick(function () { console.…

asp.net mvc 上传excel文件并读取excle内容转成DataTable(Spire.Office.3.6.0)

CSDN的编辑器乱码了!请点击这里看不乱码的: https://blog.csdn.net/djk8888/article/details/80938469本文配套源码下载:https://download.csdn.net/download/djk8888/10502601 一个需求:将一个Excel文件中的数据导入到数据库中去…

PXC安装

PXC安装第一节点传入percona-release-0.1-6.noarch.rpm 文件[rootlocalhost ~]# yum install -y percona-release-0.1-6.noarch.rpm[rootlocalhost ~]# yum install Percona-XtraDB-Cluster-57传入my.cnf 文件克隆两个虚拟机[rootlocalhost ~]# mv my.cnf /etc/my.cnf[rootloca…

天兔插件监控mysql

Lepus3.8-天兔mysql数据库监控系统搭建 原创ixhao2016-08-24 02:36:23评论(11)3183人阅读Lepus3.8-天兔mysql数据库监控系统搭建lepus是一款开源的数据库监控软件,能详细的监控各种数据库状态,如mysql慢查询和主从状况。 这是web监控页面: wK…

【笔记】如何做好一场技术演讲——前期准备

唯有精心准备刻意训练方能成就精彩演讲。演讲最重要的是主题,所以首先要明确主题。然后,就需要设定好演讲的主线。对于技术类的分享,有一个相对固定的模式:who-what&when-why-how-future-recapwho:自我介绍&#x…

在线生成二维码的api接口

<img width"150" height"150" src"http://qr.liantu.com/api.php?texthttps://blog.csdn.net/djk8888" /> 替换红色字体(text...的参数)的值为你要的网址url即可