通过 Nginx 将爬虫和正常用户访问分开到不同的后端运行

本文介绍了一种使用Nginx配置文件来处理爬虫请求的方法。通过定义Map识别User-Agent中的爬虫特征,并设置特定Location来代理爬虫流量。非爬虫请求则正常转发至应用服务器。

1. [代码]定义 Map     跳至 [1] [2] [3] [全屏预览]

1map $http_user_agent $is_bot {
2     default 0;
3     ~[a-z]bot[^a-z] 1;
4     ~[sS]pider[^a-z] 1;
5     'Yahoo! Slurp China' 1;
6     'Mediapartners-Google' 1;
7}

2. [代码]定义 Location     

1location @bots {
2     proxy_pass http://osc_bot;
3}

3. [代码]处理爬虫请求     

1location / {
2     error_page 418 =200 @bots;
3     if ($is_bot) {
4        return 418;
5     }
6     proxy_pass http://osc_tomcats;
7}
当遇到nginx代理无法访问后端API的问题时,可根据不同情况采用相应解决办法: - **后端内网无法访问公网请求问题**:利用nginx反向代理url来发送公网请求。例如,设定nginx当前所在ip地址为192.168.2.195,若要将访问请求http://192.168.2.195:8000反向代理到http://8.100.101.102:8000,可在nginx配置的stream部分添加如下配置: ```plaintext server { listen 8000; proxy_pass 8.100.101.102:8000; } ``` 若要将访问请求http://192.168.2.195:8001反向代理到https://api.jpush.cn,配置如下: ```plaintext server { listen 8001; proxy_pass api.jpush.cn:443; proxy_ssl on; } ``` 通过类似配置可解决后端内网无法访问公网请求的问题,实现使用nginx反向代理发送公网请求[^1]。 - **前后端分离中的跨域问题**: - 配置nginx.conf文件,让nginx监听指定端口并进行访问路径的正则匹配。例如,nginx监听9001端口,serviceedu接口在8001端口上,eduoss在8002端口上,配置如下: ```plaintext server { listen 9001; location ~ /serviceedu/ { proxy_pass http://localhost:8001; } location ~ /eduoss/ { proxy_pass http://localhost:8002; } } ``` - 前端在conf文件夹下修改dev.env.js文件中的BASE_API为“http://localhost:9001”,使前端直接访问nginx。修改完前端配置需要重启前端项目。 - 需注意后端接口要nginx.conf中配置的接口相对应,比如nginx.conf中有/serviceedu/这个请求的代理,后端被代理的接口也一定要在/serviceedu/对应的路径中。同时,即使有nginx做为代理,仍然需要在后端加上@CrossOrgin注解,因为nginx访问后端也是跨域访问[^3]。 - **vue项目打包发布到Nginx后无法访问后端接口问题**: - 在vue项目中,可在跨域配置里进行相应设置,例如在vue的配置文件中: ```javascript module.exports = { dev: { assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { '/api': { target: 'http://192.168.0.100:8090/', secure: false, changeOrigin: true, pathRewrite: { '^/api': '' } } } } } ``` - 在nginx配置文件中添加如下配置: ```plaintext location /api/ { proxy_pass http://192.168.0.100:8090/; } ``` 通过以上配置可解决vue项目打包发布到Nginx后无法访问后端接口的问题[^4]。 - **nginx配置location网页显示css/js文件无法加载但后端服务访问正常问题**:若出现此问题,估计是后端服务将后缀路径写死导致nginx无法跳转。需要检查后端服务的路径配置,确保路径配置的灵活性,避免将路径写死,以保证nginx能够正常跳转访问css/js等文件[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值