欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!

  ngx_http_headers_module模块允许将"Expires"和"Cache-Control"头字段以及任意字段添加到响应头中。

  响应头处理模块 语法及语义

  add_header

   语法:add_header name value [always];

   语义:如果响应码等于200、201(1.3.10)、204、206、301、302、303、304、307(1.1.16、1.0.13)或308(1.13),则将制定字段添加到响应头中。参数值可以包含变量。

   可以指定多个add_header指令,当且仅当add_header当前级别上未定义任何指令时,这些指令才从先前的配置级别继承。

   如果指定了always(1.7.5),则无论响应码为何值,都将添加标头字段。

  add_trailer

   语法:add_trailer name value [always];

   语义:如果响应码等于200、201、206、301、302、303、307或308,则将指定的字段添加到响应的末尾。参数值可以包含变量。

   可以指定多个add_trailer指令,当且仅当add_trailer当前级别上未定义任何指令时,这些指令才从先前的配置级别继承。

   如果指定了always,则无论响应码为何值,都将添加标头字段。

  expires

   语法:expires [modified] time;

   语义:如果响应码等于200、201(1.3.10),204、206、301、302、303、304、307(1.1.16、1.0.13)或308(1.13.0),则启用或禁用添加或修改"Expires"和"Cache-Control"响应标头字段。该参数可以是正数或负数时间。

   "Expires"头:告知浏览器资源有效性的截止日期,截止日期之内有效,截止日期之外需重新获取资源。

   "Cache-Control"头:"Expires"头有一个非常大的缺陷,它使用一个固定的时间,要求服务器与客户端的时钟保持严格的同步,并且这一天到来后,服务器还得重新设定新的时间。

   Http1.1引入了"Cache-Control",它使用max-age指定资源的有效时间,从请求开始在max-age时间内浏览器使用缓存,之外的使用请求,这样就可以消除"Expires"头的限制,如果对浏览器兼容性要求很高的话,可以两个都使用。

  响应头处理模块 示例

worker_processes  1;

error_log  logs/error.log;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  securitit;

        location / {
	    # 增加自定义响应头.
	    add_header Securitit-header yn;
	    # 增加自定义响应头.
	    add_trailer Securitit-trailer yn;
	    # 设置超时时间.
	    expires 1m;

	    root html;
	    index index.html;
        }

    }

}

  通过浏览器访问http://192.168.20.9/index.html,查看响应头,可以看到修改的Expires以及自定义的Securitit-hreader头及内容。

NGINX覆盖响应头 nginx 添加响应头_add_header

NGINX覆盖响应头 nginx 添加响应头_add_header_02

  总结

  Http的头信息,在Http协议应用过程中是一个很重要的信息载体。服务器一般通过响应头信息来告知客户端应该具备或执行哪些行为。

  Nginx作为反向代理,将原始服务器隐藏在其之后,其提供的响应头处理模块用处还是很大的:

  · 客户端缓存:

  包括expires、Cache-Control等响应头,可以告知客户端如何处理资源以及如何进行资源缓存。

  · CORS跨域解决方案:

  出于安全性的考虑,浏览器的同源策略不允许Ajax调用当前源以外的资源,但是随着微服务、前后端分离等开发和部署方式的出现,跨域俨然成为了必不可少的功能。

  CORS的出现正是为了解决此类问题,需要服务器告知浏览器可跨域的设置:

  Access-Control-Allow-Origin:要么请求时Origin字段的值,要么是一个*,表示接受指定域名的请求。

  Access-Control-Allow-Methods:表明服务器支持跨域请求的方法,多个值以逗号分隔。

  Access-Control-Request-Headers:表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段,多个值以逗号分隔。

  Access-Control-Allow-Credentials:表示是否允许浏览器发送cookie, 需要在服务器配置。

  Access-Control-Max-Age:"预检"请求的缓存时间。

  Nginx作为反向代理服务器时,可以在反向代理中统一设置,避免进行后端应用或其集群的改造。

  · P3P 头设置

  在某些业务场景下,可能需要允许浏览器发送第三方Cookie,以便应用可以正常提供服务。例如传统Web软件开发过程中,可能经常性通过标签嵌套第三方网站,以达到系统集成的目的,此时若不设置P3P头的话,标签内嵌的系统可能会无法使用Cookie。

  上面的情况,在应用开发时时无法预见的,可以使用Nginx进行P3P头设置,达到效果。

  · 其他情况

  作为反向代理,可以把它当做应用的一部分,进行流量接入,需要进行响应头操作的行为,都可以在Nginx中设置,但是一定要注意设置的权限范围,以避免有安全隐患的行为波及不相关业务。

  若文中存在错误和不足,欢迎指正!