当主机头中的域与请求url中的域不匹配时,如何防止在nginx上重定向?

当主机头中的域与请求url中的域不匹配时,如何防止在nginx上重定向?,nginx,nginx-config,Nginx,Nginx Config,我在我的家庭服务器keepsecret.ddns.net上运行nginx。当我请求时,例如keepsecret.ddns.net/foo/它返回给我keepsecret.ddns.net/foo/index.html。到目前为止,一切顺利 现在,我试图将我的家庭服务器视为上游服务器。上游服务器前面是一个远程代理服务器,位于www.mydomain.com。当我请求时,例如www.mydomain.com/foo/index.html,它会毫无问题地返回给我。但是,当我请求www.mydomain

我在我的家庭服务器keepsecret.ddns.net上运行nginx。当我请求时,例如keepsecret.ddns.net/foo/它返回给我keepsecret.ddns.net/foo/index.html。到目前为止,一切顺利

现在,我试图将我的家庭服务器视为上游服务器。上游服务器前面是一个远程代理服务器,位于www.mydomain.com。当我请求时,例如www.mydomain.com/foo/index.html,它会毫无问题地返回给我。但是,当我请求www.mydomain.com/foo/时,nginx首先发出301重定向,这样我就会被发送到keepsecret.ddns.net/foo/,显示我的家庭IP地址:(

我不知道nginx为什么会这样。我唯一的猜测是,这与请求主机头中的域与请求url中的域不匹配有关

问题摘要:

  • nginx为什么要这样做
  • 如何防止nginx执行此重定向,使我始终保持在www.mydomain.com上
以下是我的配置的重要部分,以供参考:


server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}


server {

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;
    server_name keepsecret.ddns.net www.mydomain.com;

    location / {
        try_files $uri $uri/ =404;
    }

        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/keepsecret.ddns.net/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/keepsecret.ddns.net/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = keepsecret.ddns.net) {
            return 301 https://$host$request_uri;
        }
    if ($host = www.mydomain.com) {
            return 301 https://$host$request_uri;
        }

    listen 80 ;
    listen [::]:80 ;

        server_name keepsecret.ddns.net www.mydomain.com;
        return 404; # managed by Certbot
}

NGINX在所有情况下都会对index.html文件进行内部重定向,但当服务器名称与主服务器名称不匹配时,它似乎会被外部化。我怀疑更改服务器名称顺序,使您的公共(代理)名称位于第一位可能会消除这种行为

另一种方法是关注反向代理,并查看proxy_重定向,以使反向代理为您重写位置头


请参阅:

谢谢您的建议。我将在本周末抽出时间讨论这个问题。我正在使用AWS API Gateway REST API进行代理,不幸的是,它似乎没有对代理服务器配置提供太多/任何详细的控制。