Nginx重定向反向代理404

时间:2015-09-03 16:39:43

标签: nginx error-handling proxy reverse-proxy vhosts

我有以下Nginx服务器块:

server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    root /usr/share/nginx/html;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://localhost/page-1/;
    }
}

我希望当用户在example.com上收到404错误时,proxy_pass应该更改为指向http://localhost/example-404/

但是,此服务器块和http://localhost的服务器块都具有相同的root,因此可以在内部指向/example-404/,我不确定哪个更容易。不管怎样,我希望浏览器地址栏中的地址保持不变。

我想要的原因是,如果直接从http://localhost访问服务器,将会有不同的404页面。我真的很感激任何人对此的想法!

1 个答案:

答案 0 :(得分:2)

根据用户访问服务器的方式,您可以使用不同的vhost来提供不同的结果。我想这样的事情可能有用:

server {
    listen 80;
    server_name example.com;
    root /usr/share/nginx/html;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_intercept_errors on;
        error_page 404 = @errors;
        proxy_pass http://localhost/page-1/;
    }
    location @errors {
        root /usr/share/nginx/errors/example.com.404.html;
    }
}

server {
    listen 80;
    server_name localhost;
    root /usr/share/nginx/html;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_intercept_errors on;
        error_page 404 = @errors;
        proxy_pass http://localhost/page-1/;
    }
    location @errors {
        root /usr/share/nginx/errors/localhost.404.html;
    }
}