用例
我们当前的前端应用程序可以被多个域访问:
https://boat.com (or https://www.boat.com)
https://car.com
https://plane.com
...每个域,都根据域名呈现相同的应用程序,具有不同的内容和主题。
我们现在正在尝试将所有内容合并到一个唯一的域中。因此,不是使用以前的域访问站点:
https://car.com我们希望使用以下url访问它:
https://common.com/car在代码上,我们已经注意到了更改逻辑,以基于这个新的路由系统提供正确的内容。
问题
当用户尝试从旧域访问应用程序时,我们希望自动将用户重定向到正确的路由。示例:
https://boat.com => redirect => https://common.com/boat
https://car.com => redirect => https://common.com/car
...但我们也希望能够重写更复杂的url:
https://boat.com/categories/name-1 => redirect => https://common.com/boat/categories/name-1
https://car.com/posts/super-title-2 => redirect => https://common.com/car/posts/super-title-2有没有一种方法可以使用NGINX动态/编程地实现它,而不必为每个域编写和重复规则?
发布于 2021-06-03 15:14:09
您可以使用regular expression server_name获取域名。
例如:
server {
listen 80;
listen 443 ssl;
ssl_certificate /path/to/$ssl_server_name.crt;
ssl_certificate_key /path/to/$ssl_server_name.key;
server_name ~^(www\.)?(?<domain>[^.]+)\.com$;
return 301 https://example.com/$domain$request_uri;
}问题将是为每个不推荐使用的域选择正确的SSL证书。Nginx在动态选择证书方面的能力有限,这涉及到使用$ssl_server_name变量。这意味着您将需要一个包含所有可能的证书组合的目录,即使其中一些文件是相同的。
例如:
boat.com.crt
boat.com.key
www.boat.com.crt
www.boat.com.key
car.com.crt
car.com.key
www.car.com.crt
www.car.com.key此外,您还应定义一个默认服务器,因为您不希望此服务器块成为您的默认服务器。
https://stackoverflow.com/questions/67815009
复制相似问题