我有一个网站(使用 ruby on rails + angularJS 开发并在 nginx + unicorn 上运行),用户可以通过不同的 URI 访问几个页面。例如,www.example.com/1234 和 1234.example.com 加载相同的内容。
问题是 1234.example.com 中的链接无法正常工作,因为这些链接依赖于主机,而 1234.example.com 不是有效的主机。
我的子域名的 nginx 配置如下:
server {
root /var/www/example.com/current/public;
server_name 1234.example.com;
try_files $uri/index.html $uri.html $uri @app;
location / {
add_header Set-Cookie qid=1234;
proxy_pass https://www.example.com/1234;
proxy_set_header X-Forwarded-For;
proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_redirect off;
}
location /assets/ {
alias /var/www/example.com/current/public/assets/;
proxy_pass https://www.example.com;
}
location ~ /(library|categories) {
proxy_pass https://www.example.com;
}
}
加载所有内容都需要 Cookie 和位置指令“/assets/”和“~ /(library|categories)”。
因此,我只需要针对“/”位置将主机设置为 1234.example.com,但在其他任何情况下,主机都应该是 www.example.com。
太感谢了。
答案1
Nginx 的一个方法是使用映射:
map $http_host $sitevar {
1234.example.com "1234";
default "";
}
if ($sitevar = 1234) {
rewrite ^ /1234 permanent;
}
并将你的 cookie 设置qid=$sitevar
然后将 server_name 设置为通配符:
server_name .example.com;
就此而言,您可以这样做并在代码中处理路由,因为您可以将变量作为请求的一部分传递。