gpt4 book ai didi

nginx - 如何在 nginx 配置中设置 "allow from hostname"

转载 作者:行者123 更新时间:2023-12-03 21:23:06 25 4
gpt4 key购买 nike

我目前正在我的 nginx.conf 中执行此操作:

allow 1.2.3.4;
deny;

我真正想做的是:
allow my.domain.name;
deny;

即,我希望 nginx 在请求时对 my.domain.name 进行 A 记录查找,如果它与请求来自的 IP 匹配,则允许它。但是,我没有看到任何内置机制来执行此操作。在我开始编写自定义代码之前,有人有 native 方法吗?

最佳答案

这个答案是一个替代方案,它允许从 nginx 解析域,但目标完全相同,能够解析 nginx 配置中包含的 ips。

1) 创建文件allowed-domain.list其中包含您要授予访问权限的域:

jean-paul.mydomain.com
rufus.mydomain.com
robert.mydomain.com

2) 创建一个bash脚本 domain-resolver.sh哪个为您查找:
#!/usr/bin/env bash
filename="$1"
while read -r line
do
ddns_record="$line"
if [[ ! -z $ddns_record ]]; then
resolved_ip=`getent ahosts $line | awk '{ print $1 ; exit }'`
if [[ ! -z $resolved_ip ]]; then
echo "allow $resolved_ip;# from $ddns_record"
fi
fi
done < "$filename"

3) 授予此脚本的正确权限 chmod +x domain-resolver.sh
4) 添加一个 cron 作业,它产生一个有效的 nginx 配置并重新启动 nginx :
#!/usr/bin/env bash
/pathtoscript/domain-resolver.sh /pathtodomainlist/allowed-domain.list > /pathtooutputdir/allowed-ips-from-domains.conf
service nginx reload > /dev/null 2>&1

这可以是 @daily工作,或者你可以让它每小时、每分钟、每秒钟运行一次……

5) 更新您的 nginx 配置以将此输出考虑在内:
include /pathtooutputdir/allowed-ips-from-domains.conf;
deny all;

您可以通过添加 ip 格式检查来改进这一点,如果您不想要它,请阻止 ipv6,将所有内容分组到一个文件中......

关于nginx - 如何在 nginx 配置中设置 "allow from hostname",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com