使用 nginx 上的反向代理将 URL 保留在地址栏中

使用 nginx 上的反向代理将 URL 保留在地址栏中

我有一个 Web 应用程序,用户可以在其中创建自己的页面。Web 应用程序将为创建的每个页面生成如下 URL:https://my-domain.com/page/12345。我希望我的用户能够通过将 cname 记录指向我的服务器来在我的网站上使用他们自己的域名/子域名而不是这个 URL。

因此,我使用 Cloudflare 上的另一个域名运行了一些测试,并创建了以下 cname 记录:

subdomain.domain.com.   1   IN  CNAME   my-web-app-domain.com.

基本上,我想subdomain.domain.com指向我的 Web 应用程序域,以便我的用户可以使用访问他们的页面subdomain.domain.com

为了在使用 nginx 的目标 Web 应用服务器上实现此目的,我在 nginx 配置文件中创建了以下块:

server {
    listen 80;
    server_name subdomain.domain.com;
    
    location / {
        proxy_pass http://my-web-app-domain.com/page/12345;
        proxy_set_header   X-Real-IP $remote_addr;
    }
}

因此,这基本上是可行的,但它不会保留subdomain.domain.com在地址栏中,而是将用户重定向到http://my-web-app-domain.com/page/12345。我该如何修改代码以使其保留subdomain.domain.com而不是重定向?

如果它有用,我的网络应用程序使用 Laravel 并且测试它是否可能是问题,我已将其添加到我的 TrustProxies.php 文件中,但它仍然是一样的:

protected $proxies = '*';

答案1

我认为这里的问题是您的 Laravel 应用程序期望 HTTP Host 标头为my-web-app-domain.com,但它却是其他内容。这种不匹配导致应用程序重定向到正确的应用程序域。

尝试添加proxy_set_header Host my-web-app-domain.com;到您的配置中。

相关内容