首页 > 解决方案 > Nginx 位置重写规则在 ELB 后面不起作用

问题描述

我在 App Load Balancer 后面有 2 个 ec2 实例,它们根据路径将流量重新路由到所需的实例:

Nginx 服务器配置

# Hello server config
server {
    listen       80;
    server_name  localhost;

    location / {
        root  /home/ubuntu/welcome;
    }

    location = /hello {
        root  /home/ubuntu/api;
    }
# Goodbye server config
server {
    listen       80;
    server_name  localhost;

    location / {
        root  /home/ubuntu/welcome;
    }

    location = /goodbye {
        root  /home/ubuntu/api;
    }

我在配置文件中指定的根文件夹下的每个服务器中创建了一个简单的 index.html 文件,以便 instance1 返回“Hello”,instance2 返回“Goodbye”。但是 www.example.com/hello 和 www.example.com/goodbye 总是返回 404 not found。我确实重新加载了我的 Nginx 服务,甚至重新启动。

PS:为了测试,我创建了另一个实例,其中 Nginx 没有隐藏在 ELB 后面,并编辑了配置以使其看起来相似,它似乎可以工作,所以我不确定 ELB 后面的那些我做错了什么。

标签: linuxamazon-web-servicesnginxamazon-ec2

解决方案


设法通过将根移到位置括号之外并更新我的文件夹名称以匹配位置名称来解决此问题,并且它可以工作。所以现在看起来像这样。

server {
        listen       80;
        server_name  localhost;
        root  /home/ubuntu/api;

        location / {        
        }

        location = /hello {
        }
}

你好源代码的路径是/home/ubuntu/api/hello/

再见源代码的路径 => /home/ubuntu/api/goodbye/


推荐阅读