gpt4 book ai didi

nginx - nginx如何限制ip访问

转载 作者:行者123 更新时间:2023-12-04 15:31:35 24 4
gpt4 key购买 nike

我想通过 IP 限制对 Nginx reverse_proxy 中特定 php 文件的访问。所以在我的虚拟主机路径 /etc/nginx/sites-available/sub.mydmn.com 我有以下配置:

server {
server_name wwww.sub.mydmn.com sub.mydmn.com;
root /home/mydmn/;

access_log off;

# Static contents
location ~* ^.+.(png|mp4|jpeg)$ {
expires max;
}

# Limit IP access
location = /mine.php {
allow <MyIP_Here>;
deny all;
return 404;
}

# Dynamic content, forward to Apache
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
}

# Deny server with IP access!
server {
listen 80 default_server;
server_name _;
location / {
return 403;
}
}

但是当我启动服务器时,Nginx 会阻止 mine.php 的所有 IP。有什么问题?

最佳答案

Nginx 选择单个 location block 来处理请求(参见 this document )。您的 location =/mine.php block 不仅在 IP 地址被拒绝时返回 403 状态,而且在 IP 地址被允许时返回 404 状态。如果允许 IP 地址,则需要由端口 8080 上的服务处理请求。

一种解决方案是复制 location/ block 中的语句。

例如:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;

location = /mine.php {
allow ...;
deny all;
proxy_pass http://127.0.0.1:8080;
}
location / {
proxy_pass http://127.0.0.1:8080;
}

请注意,proxy_set_header 语句可以移到外部 block 中,以便它们被两个 block 继承。参见 this document了解详情。

关于nginx - nginx如何限制ip访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61152259/

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