AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 509913
Accepted
xangr
xangr
Asked: 2013-05-23 06:38:35 +0800 CST2013-05-23 06:38:35 +0800 CST 2013-05-23 06:38:35 +0800 CST

nginx 只是拒绝在 catch-all 指令中已经定义的 IP 地址

  • 772

我有这个包罗万象:

    server {
        listen 80 default_server;
        server_name _;
        return 444;
    }

现在,假设我们有两个名为1.2.3.4和的 IP 1.2.3.5。

好吧,假设在配置文件中的任何地方1.2.3.4使用example.com并且1.2.3.5从未使用过。基本上只有第一个 IP 在使用中。其他 IP 为空白/空/免费。

好吧,问题来了。上面的服务器块正在使用1.2.3.5. 因为此 IP 从未与任何服务器块一起使用。这是免费的。分配给服务器。它回应。但从未用于任何网站。listen 80;指令仅适用于1.2.3.5.

另一方面,1.2.3.4是行不通的。Nginx 不监听这个 IP。因为它被另一个服务器块使用。我测试了自己。Indded,Nginx 拒绝监听这个正在被 ngnix 服务器块使用的 Ips

现在,如果我更改listen 80;为listen 1.2.3.4:80然后它正在为该 IP 工作。

基本上, Nginx不允许我为默认的包罗万象监听使用过的 IP 地址。

我只想捕获进入我的服务器的每一个不属于我的假域。我想通过假主机禁用用户。但是我真的需要编写每个 IP 来监听吗?

有什么解决方法吗?有什么帮助吗?

编辑 1:我也试过listen *:80;有通配符。也没有用。

编辑 2:如果我从 listen 指令中删除所有 IP 并只保留端口,它就可以工作。但是我们不是把 ip 地址放在 listen 指令上吗?Nginx 示例始终只显示侦听端口。我怀疑哪个是正确的。ip:端口或仅端口。

演示:

作品:

除 example.com 外,其他网站均因 444 错误而被拒绝。

server {
        listen 1.2.3.4:80 default_server;
        server_name _;
        return 444;
    }
 server {
        listen 1.2.3.4:80;
        server_name example.com;
        root /www
    }

不工作:

仍然接受 example.com 以外的假主机

server {
        listen 80 default_server;
        server_name _;
        return 444;
    }
 server {
        listen 1.2.3.4:80;
        server_name example.com;
        root /www
    }

结论:

在 Nathan 的评论之后,我深入研究了这个问题并发现了这一行:

default_server 参数(如果存在)将使服务器成为指定地址:端口对的默认服务器。

基本上,正如 Nathan 所说,它将看起来是最高 IP,并且该服务器块仅在该级别可用。为此,您必须指定每个 IP。所以,我们有两个选择。

  1. 使用listen 80;指令和参数,您可以为端口定义一个默认服务器80
  2. 使用listen ip:80和定义每个地址自己的默认服务器。

另一个伟大的标语:

在此配置中,nginx 首先根据服务器块的侦听指令测试请求的 IP 地址和端口。然后,它根据与 IP 地址和端口匹配的服务器块的 server_name 条目测试请求的“主机”标头字段。如果找不到服务器名称,则请求将由默认服务器处理。例如,在 192.168.1.1:80 端口上收到的对 www.example.com 的请求将由 192.168.1.1:80 端口的默认服务器处理,即由第一个服务器处理,因为没有 www.example为此端口定义的 .com。

nginx
  • 1 1 个回答
  • 430 Views

1 个回答

  • Voted
  1. Best Answer
    Nathan C
    2013-05-23T07:59:00+08:002013-05-23T07:59:00+08:00

    通常,应用程序会将自己分配给系统上“最高”的可用 IP 地址。这种行为在 IPv6 IP 中更常见,但概念是相同的。如果您在服务器块中指定两者,它应该可以正常工作。

    • 3

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve