如何设置 nginx.conf 以实现简单的代理传递重定向?

如何设置 nginx.conf 以实现简单的代理传递重定向?

我正在尝试设置代理传递重定向的“hello world”。它需要一个默认路由和一个条件路由。

我希望所有到我的服务器的流量都代理某个 IP 1.2.3.4,除非它匹配,/blog在这种情况下它应该代理 5.5.5.5

我花了一些时间猜测和检查配置,并阅读了大量文档,但差异太大了,我似乎找不到一个锚点,哪怕是一个功能齐全的简单示例来作为种子。到目前为止,我认为应该这样做:

http {
  server {
    listen 80;

    location / {
      proxy_pass 1.2.3.4
    }

    location ~ /blog {
      proxy_pass 5.5.5.5
    }
  }
}

我已经像这样更新了配置并重新加载而没有任何错误,但是当我导航到服务器时我只得到默认的Welcome to nginx!登陆页面。

我在这里遗漏了什么?

答案1

您的服务器块缺少server_name指令。

文档

在这种配置中,nginx 仅测试请求的标头字段“Host”来确定应将请求路由到哪个服务器。如果其值与任何服务器名称不匹配或者请求根本不包含此标头字段,然后 nginx 会将请求路由到此端口的默认服务器

由我重点强调。

您的块没有服务器名称,因此请求被路由到默认配置中定义的默认服务器。

您只需添加server_name

http {
server {
    listen 80;
    server_name example.com;

    # the rest of your config
}
}

无需从默认配置中删除所有内容。

答案2

最终这个设置基本正确。 listen 80可以删除,因为这是默认值,否则就没问题。

我的问题是默认的 ubuntu 安装有一些需要特别禁用的东西。我通过查看这个问题找到了答案:

https://stackoverflow.com/questions/14460935/nginx-only-shows-welcome-page

简而言之,导航到etc/nginx/sites-enabled. ls以查看其中的内容。如果您看到任何链接,则可以使用sudo unlink ./default-or-name-of-item

那么在启用服务的站点中就不会有任何内容...我的猜测是,location /在选择要提供服务的东西时,这在图腾柱或优先级上的位置真的非常非常低。

相关内容