我正在尝试设置代理传递重定向的“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 /
在选择要提供服务的东西时,这在图腾柱或优先级上的位置真的非常非常低。