【问题标题】:Redirect 2nd domain back to a specific location on main domain将第二个域重定向回主域上的特定位置
【发布时间】:2020-06-29 19:43:08
【问题描述】:

将 Nginx 用作本地 Tomcat 实例的反向代理。需要将第二个域(example2.com)重定向到我们主域example.com 内的特定请求路径,例如example2.com/** => example.com/urlService/**。如果我们在浏览器中输入example2.com/foo,它应该会把我们带到example.com/urlService/foo。当我使用完整的请求路径时能够访问它,例如example2.com/urlService/foo.

使用下面的反向代理教程see here来设置nginx。

tomcat hook to njinx
upstream tomcat {
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
    server_name example.com example2.com;
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot

#    ssl stuff here (left out);

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                include proxy_params;
                proxy_pass http://tomcat/;
        }

}


server {
    listen 80;
    server_name example.com;
    rewrite ^/(.*) https://example.com/$1 permanent;
}

【问题讨论】:

  • 为什么在第一个server 块中有server_name example.com example2.com;
  • 从那里删除 example2.com?
  • 如果您的网站使用https,您需要三个server 块监听端口443。一个用于您的每个域,一个作为default_server
  • 我的所有域 (https) 都列在第一个服务器块的一行中,您只有 2 个,因为我删除了其他域以简化这篇文章 - 我认为这是允许的。
  • example2.com 应仅指向特定位置。

标签: nginx nginx-reverse-proxy nginx-config


【解决方案1】:

尝试在不重定向的情况下将https://example2.com/foo 代理到https://example.com/urlService/foo 可能很简单,也可能会出现问题。主要的潜在问题是解析请求页面生成的 URL。

但是,一般的解决方案可能如下所示:

upstream tomcat {
    ...
}

server {
    server_name example.com;
    listen 443 ssl;
    ...
    location / {
        ...
        proxy_pass http://tomcat/;
    }    
}    
server {
    server_name example2.com;
    listen 443 ssl;
    ...
    location / {
        ...
        proxy_pass http://tomcat/urlService/;
    }    
}    
server {
    listen 443 ssl default_server;
    ...
    return 301 https://example.com/;
}
server {
    listen 80 default_server;
    return 301 https://$host$request_uri;
}

第一个server 块是您的主站点。第二个server 将代理阻止到您的主站点的子文件夹中。

可选第三个​​服务器块匹配 https 与您的任何一个域名都不匹配的请求(例如 IP 地址访问)。它需要一个 SSL 证书,它可以与您的主站点相同。浏览器会抱怨 - 但它会停止使用无效域名访问主站点。要么重定向到主站点,要么使用return 444; 拒绝连接。

最后的server 块是一个通用的httphttps 重定向器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2017-02-24
    • 2012-02-15
    • 2021-09-07
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多