zoukankan      html  css  js  c++  java
  • nginx 一些配置

    X-Frame-Options 响应头

    X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, </iframe> 或者 <object> 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。


    X-Frame-Options:值有三个

      (1)DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
      (2)SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。
      (3)ALLOW-FROM https://example.com/:表示该页面可以在指定来源的 frame 中展示。

    nginx 配置

    可以在https server location 配置

    location / {
    root /data/nginx/example-app;
    index index.html;
    add_header X-Frame-Options SAMEORIGIN;
    }

    验证(浏览器登录访问)

    proxy_read_timeout

    应用场景

    通过nginx 代理上传文件给后端服务,由于文件太大上传时间较长,后端服务日志显示超时,原因就是nginx 等待超时所以断开了。

    配置

            location /pay-api {
           ...  ...
                proxy_read_timeout   120s;

    说明

    该指令设置与代理服务器的读超时时间默认60s。它决定了nginx会等待多长时间来获得请求的响应。这个时间不是获得整个response的时间,而是两次reading操作的时间。

    client_max_body_size

    应用场景

    通过nginx 代理服务器,上传大文件被限制,通过更改此参数调整允许上传文件大小。

    配置

    location /pay-api {
           ...  ...
                client_max_body_size 100m;      #调整为100M

    说明

    如果后端是Php 服务,文件上传大小限制得瓶颈也可能在php 端,两端都有解除限制。

    根据客户端类型返回相应地址

    应用场景

    如果网站的后端架构PC 与移动端是分离的,也就是分别部署的,那么当PC浏览器访问的是移动端的网站地址时,那么就会根据其客户端类型判断进而返回一个PC端的URL。

    server {
      listen 80;
      server_name m.kzf.com;
    
      if ($http_user_agent ~* (Windows|Macintosh)) {
          return http://www.kzf.com;
      }
    }
    View Code

    default server 配置

    显示配置

    vi defaul.conf

    server { listen
    80 default_server; server_name _; root /opt/nginx/html;
    }
    default_server 的作用就是当请求过来后根据域名找不到相应的server name 就会匹配此处的规则。


    隐式配置


    defaul server 分为两种上面的为显示配置,还有一种是隐式配置,所谓隐式配置就是没有确切的配置,就会默认加载的第一个配置文件里面的第一个server 配置为default server。


    应用场景
    一般正常提供访问的地址都是定义server name 为域名,为了禁止ip 访问就会通过default server 匹配到ip 访问的请求,然后此类访问返回403 禁止IP 访问。

    加载顺序
    nginx 批量载入配置 conf.d/*conf 时会按 ascii 排序载入,这就会以 server_a.conf server_b.conf server_c.conf 的顺序载入,如果没有生命 default_server 的话,那 server_a 会作为默认的 server。另外如果主配置文件中有server 配置,因为朱配置文件最先加载所以此处的server作为default_server的优先级是最大的。

    referer指令实现防盗链配置

    有一些后端服务以接口的形式通过前端页面来访问的,也就是说前端页面里面嵌套的后端的访问地址,为了安全后端接口只允许前端页面里面访问请求后端接口,而不允许其他未知网站跳转到后端。可以通过nginx 配置

    server {
        listen       80;
        server_name  www.asdf.com;
       location /api {
            valid_referers  none blocked  server_names www.qq.com;  #none blocked 等这些条件是或的关系,就是满足一
            if ($invalid_referer) {
                   return 403;
            }
            proxy_pass http://backend.service.com;
       }
    }

    valid_referers 指令详解

    该指令后面可以接 none blocked serevr_names string或者是正则表达式

    none 代表没有referer ,如果直接访问后端接口 http://backend.service.com/api 那么请求头里面是没有referer 字段的,也就是none ,也就是根据实际情况决定是否允许直接访问接口进而决定是否配置none。

    blocked 代表有referer但是被防火墙或者是代理给去除了

    string或者正在表达式 用来匹配referer

    nginx会通过查看referer字段和valid_referers后面的referer列表进行匹配,如果匹配到了就invalid_referer字段值为0 否则设置该值为1

    通过curl 测试验证配置是否生效

    curl http://www.asdf.com/api -H  'Referer:http://www.qq.com'      正常转发到后端

    curl http://www.asdf.com/api                         refere不存在,也就是None ,如果配置了none 就会正常转发到后端

    curl http://www.asdf.com/api -H  'Referer:http://www.baidu.com'    返回403

    注意返回301 重定向情况:
    当location 后面配置路径有/ 时候,但是用户请求的url 后面没有/ 那么请求到达nginx 后就会重定向,添加缺失的/ 。

    示例如下:
    location /api/ {
            proxy_pass http://backend.service.com;
       }
    curl http://www.asdf.com/api    #请求的url 中未带/ ,返回代码301 ,避免这种情况就需要加上/ 或者location 中的路径去掉/。

    rewrite 指令的相对路径和绝对路径区别

    当nginx 前面还有一层slb 做转发的时候,并且slb监听端口与nginx 监听端口不一致的时候,rewrite 指令的使用相对路径与绝对路径就有很大不同。

    前提条件:url 为 http://asdf-kzf.com   经过slb 的80 转发到了nginx 的4438 端口

    相对路径配置

     server {   
      listen 4438;
      server_name  xxx;
      
      location / {                           
            rewrite ^/$  /test permanent;
        } 
    }

    此配置浏览器显示转发的路径重定向为http://asdf-kzf.com:4438/test ,但是此请求到了slb 无法识别此端口,所以请求有问题。

    绝对路径配置

     server {   
      listen 4438;
      server_name  xxx;
      
      location / {                           
            rewrite ^/$ https://asdf-kzf.com/test permanent;
        } 
    }

    次请求
    http://asdf-kzf.com/test   由于是绝对路径转发所以没有nginx 端口,所以相当于重新发起了请求到slb ,所以此配置是对的
    
    

    总结:当nginx 前面没有代理,或者其代理与它本身端口是相同的,此时可以使用相对路径进行rewrite ,否则使用绝对路径。



  • 相关阅读:
    线索二叉树的构建和遍历------小甲鱼数据结构和算法
    小甲鱼数据结构和算法-----二叉树的构建和前序遍历
    python爬虫爬取煎蛋网妹子图片
    C语言实现汉诺塔问题
    C语言实现中缀表达式转后缀表达式
    深度优先算法--判断迷宫的一个起点能否到达一个终点
    python 爬取36K新闻
    栈的操作实现逆波兰表达式的计算
    python 实现汉诺塔问题
    【POJ 3258】River Hopscotch
  • 原文地址:https://www.cnblogs.com/fanggege/p/12049092.html
Copyright © 2011-2022 走看看