当前位置 主页 > 服务器问题 > nginx问题汇总 >

    Linux服务器下nginx的安全配置详解(3)

    栏目:nginx问题汇总 时间:2018-09-26 16:23

    4、 经过多层CDN之后取得原始用户的IP地址,nginx 配置

    map $http_x_forwarded_for $clientRealIp {    ## 没有通过代理,直接用 remote_addr  "" $remote_addr;     ## 用正则匹配,从 x_forwarded_for 中取得用户的原始IP    ## 例如  X-Forwarded-For: 202.123.123.11, 208.22.22.234, 192.168.2.100,...    ## 这里第一个 202.123.123.11 是用户的真实 IP,后面其它都是经过的 CDN 服务器  ~^(?P<firstAddr>[0-9\.]+),?.*$  $firstAddr;} ## 通过 map 指令,我们为 nginx 创建了一个变量 $clientRealIp ,这个就是 原始用户的真实 IP 地址,## 不论用户是直接访问,还是通过一串 CDN 之后的访问,我们都能取得正确的原始IP地址

    5、隐藏版本信息

    server_tokens  off;proxy_hide_header    X-Powered-By;//或者编译的时候修改源代码

    6、禁用非必要的方法

    if ($request_method !~ ^(GET|HEAD|POST)$ ) {  return  444;}

    7、禁用扩展名

    location ~* .(txt|doc|sql|gz|svn|git)$ {  deny all;}

    8、合理配置响应头

    add_header Strict-Transport-Security "max-age=31536000";add_header X-Frame-Options deny;add_header X-Content-Type-Options nosniff;add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://a.disquscdn.com; img-src 'self' data: https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; frame-src https://disqus.com";

    Strict-Transport-Security(简称为 HSTS)可以告诉浏览器,在指定的 max-age 内,始终通过 HTTPS 访问

    X-Frame-Options 用来指定此网页是否允许被 iframe 嵌套,deny 就是不允许任何嵌套发生

    9、拒绝一些User-Agents

    if ($http_user_agent ~* LWP::Simple|BBBike|wget) {  return 403;}

    10、防止图片盗链

    valid_referers blocked www.example.com example.com;if ($invalid_referer) {  rewrite ^/images/uploads.*\.(gif|jpg|jpeg|png)$ /2018img/2018/09/11103222.jpg last}11、控制缓冲区溢出攻击client_body_buffer_size 1K;client_header_buffer_size 1k;client_max_body_size 1k;large_client_header_buffers 2 1k; client_body_timeout  10;client_header_timeout 10;keepalive_timeout   5 5;send_timeout     10;

    解释说明
    1、client_body_buffer_size 1k-(默认8k或16k)这个指令可以指定连接请求实体的缓冲区大小。如果连接请求超过缓存区指定的值,那么这些请求实体的整体或部分将尝试写入一个临时文件。
    2、client_header_buffer_size 1k-指令指定客户端请求头部的缓冲区大小。绝大多数情况下一个请求头不会大于1k,不过如果有来自于wap客户端的较大的cookie它可能会大于1k,Nginx将分配给它一个更大的缓冲区,这个值可以在large_client_header_buffers里面设置。
    3、client_max_body_size 1k-指令指定允许客户端连接的最大请求实体大小,它出现在请求头部的Content-Length字段。如果请求大于指定的值,客户端将收到一个”Request Entity Too Large” (413)错误。记住,浏览器并不知道怎样显示这个错误。
    4、large_client_header_buffers-指定客户端一些比较大的请求头使用的缓冲区数量和大小。请求字段不能大于一个缓冲区大小,如果客户端发送一个比较大的头,nginx将返回”Request URI too large” (414)