参考资料

  1. nginx配置文件详解
  2. Nginx的应用场景
  3. Nginx负载均衡策略详细说明以及案例
  4. PHP-FPM 性能优化
  5. Nginxexpires:页面缓存时间配置详细说明以及案例
  6. Nginxlimit_conn:并发连接数限制模块详细说明以及案例
  7. Nginx的基本配置文件结构
  8. Nginxtry_files 文件判断指令详细说明以及案例

Nginx的referer请求头控制模块主要用于控制请求的Referer头字段,通常用于防盗链、限制访问来源等场景。该模块可以通过配置来允许或拒绝特定来源的请求。

模块说明

  1. ngx_http_referer_module:这是Nginx内置的模块,用于处理Referer头字段。它可以通过配置来检查请求的Referer头,并根据配置的规则来决定是否允许请求。

  2. valid_referers:这是该模块的核心指令,用于定义合法的Referer来源。可以配置多个来源,支持通配符和正则表达式。

  3. $invalid_referer:这是一个内置变量,当请求的Referer头不符合valid_referers配置时,该变量的值为1,否则为0

配置案例

以下是一个简单的Nginx配置案例,用于实现防盗链功能:

server {
    listen 80;
    server_name example.com;

    location /images/ {
        # 定义合法的Referer来源
        valid_referers none blocked example.com *.example.com;

        # 如果Referer不合法,返回403 Forbidden
        if ($invalid_referer) {
            return 403;
        }

        # 允许访问图片资源
        root /var/www/html;
    }
}

配置解析

  1. **valid_referers none blocked example.com *.example.com;**:

    • none:允许没有Referer头的请求。

    • blocked:允许Referer头被防火墙或代理服务器修改的请求。

    • example.com:允许来自example.com的请求。

    • *.example.com:允许来自example.com子域名的请求。

  2. if ($invalid_referer) { return 403; }

    • 如果Referer头不符合valid_referers的配置,返回403 Forbidden状态码,拒绝访问。

其他案例

  1. 允许特定IP访问

    server {
        listen 80;
        server_name example.com;
    
        location /images/ {
            valid_referers 192.168.1.100;
    
            if ($invalid_referer) {
                return 403;
            }
    
            root /var/www/html;
        }
    }
  2. 使用正则表达式匹配Referer

    server {
        listen 80;
        server_name example.com;
    
        location /images/ {
            valid_referers ~^(www\.)?example\.com$;
    
            if ($invalid_referer) {
                return 403;
            }
    
            root /var/www/html;
        }
    }

通过这些配置,Nginx可以根据Referer头字段来控制请求的访问权限,从而实现防盗链等功能。