Mac版 Nignx安装 及echo模块和配置举例

  1. brew安装
    命令:brew install nginx
    配置目录:/usr/local/etc/nginx/
    启动:sudo nginx
    重启:sudo nginx -s reload
    关闭:ps -ef| grep nginx 查看进程号 、 kill -9 进程号(强制关闭 不建议使用 ) nginx -s stop(建议使用)
    验证:浏览器访问localhost:8080 看到如下页面
    在这里插入图片描述

  2. 编译安装
    下载地址:nginx官网(Mac默认下载到了/Users/XXX/Downloads/目录下)
    解压:tar -xzvf nginx-1.14.1.tag.gz
    进入目录: cd nginx-1.14.1/
    进行编译:./configure 、sudo make 、sudo make install
    编译后目录: /usr/local/nginx/ (可以把nginx命令放在环境变量里 export PATH=${PATH}:/usr/local/nginx/sbin)
    使用方式:同上

  3. echo模块
    前提条件:nginx是编译安装 可以手动引入echo模块 brew安装我是没找到安装echo模块的方法 因为没有configure
    下载地址:echo模块
    解压:tar -xzvf echo-nginx-module-0.61.tar.gz
    保存目录:例如/Users/makexin/Downloads/echo-nginx-module-0.61
    进入nginx目录:cd nginx-1.14.1/
    载入模块:./configure --prefix=/usr/local/nginx --add-module=/Users/makexin/Downloads/echo-nginx-module-0.61
    进行编译:./configure 、sudo make 、sudo make install

  4. nginx配置举例
    创建文件: sudo mkdir /usr/local/nginx/vhost 、cd /usr/local/nginx/vhost、 touch my_first_nginx.conf
    编辑文件:在这里插入图片描述
    重启:sudo /usr/local/nginx/sbin/nginx -s reload 如果加入环境变量可以 sudo nginx -s reload
    浏览器访问:http://localhost:8092/ 出现如下结果
    在这里插入图片描述
    大功告成!!本人也是初学者一枚 !!感谢大家有问题欢迎指正 !!

<think>嗯,用户现在问的是Nginx如何从Referer获取信息。首先,我需要确定用户的具体需求是什么。他们可能是在处理防盗链、日志记录或者访问控制之类的任务,想要根据Referer头来做出相应的处理。 Referer头是HTTP请求的一部分,告诉服务器用户是从哪个页面跳转过来的。在Nginx中,可以通过内置变量$http_referer来获取这个值。用户可能想了解如何提取使用这个信息,比如记录到日志里,或者根据不同的Referer做不同的处理,比如允许或拒绝访问。 接下来,我需要考虑用户的背景。他们可能已经配置Nginx,但遇到了需要基于Referer进行控制的情况。例如,防止图片被其他网站盗链,或者统计流量来源。用户可能需要具体的配置示例,而不仅仅是理论上的解释。 我应该分步骤来说明,首先如何获取Referer,然后如何应用。比如,如何在日志中添加Referer信息,或者如何通过if语句判断Referer并做相应动作。同时,需要注意一些常见问题,比如Referer可能为空的情况,或者如何防止伪造的Referer头。 可能用户还不太清楚Nginx中变量如何使用,所以需要明确说明$http_referer的用法,并举例说明配置代码。此外,要提醒用户Referer可以被客户端修改,不能完全依赖它做安全措施,需要结合其他方法。 另外,用户之前的问题是关于静态资源路径的问题,现在转向Referer,可能他们在处理更复杂的访问控制或资源保护,需要综合之前的路径配置现在的Referer控制。所以可能需要提到如何结合两者的配置,比如对特定路径的资源检查Referer。 最后,确保回答结构清晰,步骤明确,给出实际配置示例,以及验证方法,帮助用户一步步解决问题。同时,注意使用中文,避免技术术语过于晦涩,让用户容易理解。</think>--- ### 一、Referer 基础概念 **HTTP Referer** 是HTTP请求头中的字段,表示当前请求的来源页面的URL。例如: - 当用户从 `http://example.com/page.html` 点击链接跳转到你的网站时,请求头中将包含: $$ \text{Referer: http://example.com/page.html} $$ --- ### 二、Nginx 获取Referer的3种方法 #### 1. 直接读取内置变量 `$http_referer` ```nginx # 示例:在日志中记录Referer log_format referer_log '$remote_addr - $http_referer -> $request'; access_log /var/log/nginx/referer.log referer_log; ``` #### 2. 条件判断(if语句) ```nginx location /images/ { # 禁止非本站来源的图片外链 if ($http_referer !~ "^https?://(www\.)?yourdomain.com/") { return 403; } } ``` #### 3. 映射为变量(map指令) ```nginx map $http_referer $referer_source { default "unknown"; ~*google\.com "search_engine"; ~*facebook\.com "social_media"; } server { location / { add_header X-Referer-Source $referer_source; } } ``` --- ### 三、核心应用场景 #### 场景1:防盗链(图片/文件) ```nginx location ~* \.(jpg|png|mp4)$ { valid_referers none blocked *.yourdomain.com; if ($invalid_referer) { # 返回错误图片或直接拦截 rewrite ^ /blocked.jpg break; } } ``` **数学表达**: $$ \text{允许访问} \Leftrightarrow \text{Referer} \in \{\text{白名单域名}\} \cup \{\text{直接访问(无Referer)}\} $$ #### 场景2:流量来源分析 ```nginx # 在日志中标记来源渠道 map $http_referer $channel { ~*baidu\.com "baidu"; ~*weibo\.com "weibo"; default "direct"; } server { access_log /var/log/nginx/access.log combined channel=$channel; } ``` #### 场景3:动态内容调整 ```nginx location / { # 根据来源显示不同内容 if ($http_referer ~ "mobile-site.com") { proxy_pass http://mobile_backend; } proxy_pass http://default_backend; } ``` --- ### 四、高级操作指南 #### 1. 提取Referer中的特定字段 ```nginx # 提取Referer的域名部分 if ($http_referer ~* ^https?://([^/]+)) { set $referer_domain $1; } # 提取URL路径(需安装ngx_http_lua_module) location / { access_by_lua_block { local referer = ngx.var.http_referer local path = string.match(referer, "https?://[^/]+(/[^?]*)") ngx.var.referer_path = path } } ``` #### 2. 防御Referer伪造 ```nginx # 验证Referer是否可能为伪造 location /api/ { if ($http_referer ~ "^https?://[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}") { return 403; # 拦截IP格式的Referer } } ``` --- ### 五、调试与验证方法 #### 1. 实时查看Referer ```bash # 使用curl模拟带Referer的请求 curl -H "Referer: http://test.com" http://yourdomain.com # 查看Nginx变量值(需安装echo模块) location /debug { echo "Referer: $http_referer"; } ``` #### 2. 日志分析示例 ```bash # 统计前10个Referer来源 awk '{print $NF}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n10 ``` --- ### 六、注意事项 | 关键点 | 说明 | |-------|------| | **Referer为空的情况** | 直接访问或浏览器隐私模式时,`$http_referer` 值为空 | | **安全性限制** | Referer可能被伪造,不可单独用于敏感操作鉴权 | | **性能影响** | 正则匹配过多Referer规则时会增加CPU负载 | | **隐私合规** | 记录Referer需符合GDPR等隐私法规 | --- 通过合理利用 `$http_referer`,可以实现精准的访问控制、流量分析等高级功能,但需注意与其他安全机制(如Token验证)配合使用以增强可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值