我有以下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页面。我真的很感激任何人对此的想法!
答案 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;
}
}