我想限制某些 VHost 的访问,以便只有 127.0.0.1 可以访问它。我总是使用这样的东西来将 VHost 绑定到本地主机而不是外部 IP:
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
....
}
}
Run Code Online (Sandbox Code Playgroud)
但我注意到一些教程还包含allow针对 localhost 的显式指令并明确拒绝所有其他指令:
server {
listen 127.0.0.1;
server_name myvhost.local;
location / {
allow 127.0.0.1;
deny all;
...
}
}
Run Code Online (Sandbox Code Playgroud)
当我只在 127.0.0.1 收听时,真的需要这些allow/deny指令吗?
Ita*_*not 20
假设您的网络 ID 是192.168.1.0,请像这样编辑您的 conf 文件:
location / {
# block one workstation
deny 192.168.1.1;
# allow anyone in 192.168.1.0/24
allow 192.168.1.0/24;
# drop rest of the world
deny all;
}
Run Code Online (Sandbox Code Playgroud)
请让我知道它是如何为您工作的。
编辑#1:
是的,根据官方 Nginx wiki,allow 指令是必须的。他们的例子是:
location / {
allow 192.168.1.1/24;
allow 127.0.0.1;
deny 192.168.1.2;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
Ter*_*nen 20
该listen指令告诉操作系统 Web 服务器绑定自己的接口。所以,当你netstat -a启动nginx后查看,你会看到nginx只监听127.0.0.1的IP端口80,这意味着不能通过任何其他接口访问nginx服务器。
绑定到特定 IP 地址在实际网络堆栈中的工作级别低于nginx 配置中的allow/deny指令。
这意味着您不需要在您的用例中使用单独的allow/deny指令,因为网络堆栈中的连接受到限制。
如果您listen 80;只指定并使用allow/deny指令,则 nginx 将向客户端发送 HTTP 错误代码,告知访问被拒绝。
在这种listen 127.0.0.1;情况下,浏览器根本无法连接到服务器,因为没有打开可供浏览器连接的 TCP 端口。
我想实现相同的功能(只允许 nginx 中的本地用户),我发现我可以做一些简单的事情:
server {
listen 127.0.0.1:80;
index index.html index.htm index.nginx-debian.html;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /path/to/folder;
}
location / {
include proxy_params;
}
}
Run Code Online (Sandbox Code Playgroud)
这个配置文件对我来说很好用,我没有使用任何allow指令,但只有127.0.0.1:80,并且我可以将 nginx 访问限制为仅本地用户!
| 归档时间: |
|
| 查看次数: |
62066 次 |
| 最近记录: |