我有一个从我的网站上的相对 URL 到其他绝对 URL 的动态重定向列表:
my_website_url_1 --> other_website_url_1
...
my_website_url_N --> other_website_url_N
该列表包含数百个条目,每天更改几次。
(实际列表在数据库中,但它也可以是文本文件或任何合适的形式。)
“我的网站”是一个 nginx 服务器。
我正在寻找一个强大的解决方案,以便在不中断服务的情况下将重定向列表更改部署到 nginx 服务器。
有什么建议吗?
用其他东西替换 nginx 是一种选择。
答案1
很久以前,我专门为此编写了一个小型机架应用程序。你可以在这里查看http://github.com/minhajuddin/redirector
摘自自述文件:
重定向器
一个简单的机架应用程序,可以轻松重定向多个域。
配置
要配置应用程序,您只需编辑 config.yaml 文件,以下是示例配置文件:
cosmicvent.net: # <== This is the host name of the domain which you want to redirect
status: 302 # <== status code with which it is redirected, 302 for temporary redirects, 301 for permanent redirects
location: 'http://cosmicvent.com' # <== the domain which it is redirected *to*
'localhost:3030':
status: 301
location: 'http://cosmicvent.com:3030'
答案2
我不确定你的情况最好的选择是什么。我想你可以创建一个 cron 作业来生成部分 nginx 配置然后重新加载,但对我来说这似乎是一种危险的黑客行为。
根据相对 URL 上的负载量,您可以让应用程序代码触发重定向。例如,如果您使用的是 PHP,请检查传入的 URL 以查看它是否是您的重定向表,如果是,则将 HTTP 重定向发送回规范 URL。
答案3
一个想法是拥有一个数据库(MySQL 或其他)表,您可以用重定向填充该表。每隔一小时左右,cron 可以触发一个脚本来检查该表,查看上次运行时是否有新条目,然后根据在该表中找到的内容生成新的 nginx 配置。
我建议使用 Ruby + ERB 之类的东西来完成此操作。
之后,它可以对 nginx 发出重新加载以避免服务中断。