Nginx 代理 apk 文件下载
server {
listen 80;
server_name app.com.cn;
location /app {
alias /var/www/app;
autoindex on;
default_type application/octet-stream;
}
}
Nginx 过滤某个字段
如果你希望在统计 Nginx 日志中 Osonkredit.apk
出现的次数时,考虑去重 IP 地址,只计算每个 IP 地址出现的次数一次,可以使用以下方法。
1. 使用 grep
和 awk
去重 IP
假设你希望计算每个唯一 IP 地址访问 Osonkredit.apk
的次数,可以结合 grep
、awk
和 sort
进行操作。
grep 'Osonkredit.apk' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq | wc -l
解释:
grep 'Osonkredit.apk' /var/log/nginx/access.log
: 找到包含Osonkredit.apk
的所有行。awk '{print $1}'
: 从每行中提取出第一个字段,即客户端 IP 地址。sort
: 对 IP 地址进行排序(uniq
需要排序的输入)。uniq
: 去重,只保留每个 IP 地址的唯一出现。wc -l
: 统计不同 IP 地址的数量。
2. 使用 awk
完全处理
如果你希望使用 awk
来完成所有的工作,并避免管道中多个命令的嵌套,可以使用如下的单一 awk
命令:
awk '$0 ~ /Osonkredit.apk/ {ips[$1]} END {print length(ips)}' /var/log/nginx/access.log
解释:
awk '$0 ~ /Osonkredit.apk/ {ips[$1]} END {print length(ips)}'
: 这个命令做了以下几件事:$0 ~ /Osonkredit.apk/
: 只处理包含Osonkredit.apk
的行。{ips[$1]}
: 使用 IP 地址(即第一列$1
)作为键,存储到ips
数组中。每个唯一的 IP 会存储一次,重复的 IP 会覆盖前一个值。END {print length(ips)}
: 在处理完所有行后,打印ips
数组的长度,即唯一 IP 的数量。
3. 使用 zgrep
(针对压缩日志文件)
如果 Nginx 日志被压缩,你可以使用 zgrep
来对 .gz
格式的日志进行类似的统计。以下命令会统计压缩日志文件中每个唯一 IP 地址访问 Osonkredit.apk
的次数:
zgrep 'Osonkredit.apk' /var/log/nginx/access.log*.gz | awk '{print $1}' | sort | uniq | wc -l
总结:
这些方法可以帮助你统计在 Nginx 日志中每个唯一 IP 地址访问 Osonkredit.apk
的次数。如果你有多个日志文件(如压缩日志),可以使用 zgrep
来处理。
Nginx 反向代理
-
路径问题
- NGINX 默认尝试从文件系统中提供请求的资源。日志显示 NGINX 在
/usr/share/nginx/html/
目录中查找请求路径/EZLoan/someTypeNillActionBoo/superTimUserniLear
,但找不到文件。 - 这是因为没有为
/EZLoan
指定一个明确的反向代理规则,或者请求路径被误解为静态文件路径。
- NGINX 默认尝试从文件系统中提供请求的资源。日志显示 NGINX 在
-
代理配置问题
- 你配置的
location /EZloan
中的路径为proxy_pass http://backend;
,但你的 URL 请求是/EZLoan
(大小写敏感)。 - 由于没有匹配到配置规则,NGINX 可能默认将此请求当作静态文件请求处理。
- 你配置的
-
拼写错误或恶意请求
- 请求路径
/EZLoan/someTypeNillActionBoo/superTimUserniLear
看起来不像预期的路径,可能是用户拼写错误或恶意请求。
- 请求路径
解决方案
- 确保路径匹配大小写
NGINX 的 location
是大小写敏感的。你的配置中是 /EZloan
,但日志显示请求路径是 /EZLoan
。修改配置如下:
location ~* ^/EZLoan {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
这里使用了正则表达式 ~*
,使路径匹配大小写不敏感。
- 捕获未知路径并重定向
如果有类似不正确或恶意请求,可以捕获它们并返回合适的响应,比如 404 页面或重定向:
location /EZLoan {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
- 捕获不存在的静态文件请求
location / {
return 404;
}
- 检查
proxy_pass
的后端配置
确保后端 http://backend
配置正确,且能够处理 /EZLoan/someTypeNillActionBoo/superTimUserniLear
这样的请求路径。
在后端处理未知路径时返回合适的状态码,比如 404,而不是直接丢给前端。