我在 node js 服务器 (next.js) 的前端运行了一个 Nginx。我正在尝试编写我的 Nginx 配置以实现此行为,我想将主机名作为 proxy_pass 到 node js 之前路径的第一部分添加。
例如,客户端将写入a.com/
或a.com/product/...
或a.com/**
。
我的 nextjs 应用程序除了类似http://a.com/[:域名]/.... 而域名与主机相同。
因此目标是在将其传递给 nextjs 服务器之前将 URL 从 更改为a.com/**
。a.com/a.com/**
我创建的 nginx 配置:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
# if ($host = a.com) { proxy_pass http://site/a/; }
# if ($host = b.com) { proxy_pass http://site/b/; }
rewrite ^(/.*)$ /$host/$1 ;
proxy_pass http://site;
}
但那没有用。
答案1
看起来有效,您应该检查上游在其访问日志中获取了什么。打赌答案就在那里。不过我猜主要问题是您忘记传递 Host 标头了:
proxy_set_header Host <whatever the Host is expected on the upstream, definitely not $host though>
但这仅当上游服务器不是默认服务器或唯一服务器时才是一个线索。