虚拟主机还是干脆重写?
Virtual host or simply rewrite?
我有一个有个人资料页面的网站。显然,所有用户在此 url 上都有自己的个人资料页面:domain.dev/profile?user=%username%.
现在,我想做到每个用户都可以在 username.domain.dev 上看到个人资料。
我看到很多 post 类似 How to let PHP to create subdomain automatically for each user? 但它并没有解决我的问题。
我的网站在 ubuntu (nginx) 和 Windows IIS 10 上。
我怎样才能做到这一点?您还有其他 link/question 可以让我看看吗?或者有什么建议?
在Nginx中,你只需要设置类似这样的东西:
server {
listen 80;
server_name *.domain.dev;
...
}
注意:
server_name *.domain.dev;
在您的应用程序中,您需要 split/handle HOST header。
另一种方法,但这意味着 redirect 301 是做这样的事情:
server {
listen 80;
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
return 301 https://domain.dev/profile?user=$subdomain;
}
在这种情况下,请注意 server_name 中的 regex:
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
这有助于您将子域用作 $subdomain
。
为了避免重定向,这可能有效:
server {
listen 80;
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
location / {
resolver 8.8.8.8;
proxy_pass http://httpbin.org/get?user=$subdomain;
proxy_set_header Host httpbin.org;
}
}
出于测试目的,我正在使用 http://httpbin.org/on the
proxy_pass`,这样您就可以使用类似以下内容进行测试:
$ curl foo.your-domain.tld:8080
{
"args": {
"user": "foo"
},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "curl/7.54.0"
},
"origin": "91.65.17.142",
"url": "http://httpbin.org/get?user=foo"
}
注意回复:
"url": "http://httpbin.org/get?user=foo"
在本例中匹配子域 foo
.your-domain.tld.
我有一个有个人资料页面的网站。显然,所有用户在此 url 上都有自己的个人资料页面:domain.dev/profile?user=%username%.
现在,我想做到每个用户都可以在 username.domain.dev 上看到个人资料。
我看到很多 post 类似 How to let PHP to create subdomain automatically for each user? 但它并没有解决我的问题。
我的网站在 ubuntu (nginx) 和 Windows IIS 10 上。 我怎样才能做到这一点?您还有其他 link/question 可以让我看看吗?或者有什么建议?
在Nginx中,你只需要设置类似这样的东西:
server {
listen 80;
server_name *.domain.dev;
...
}
注意:
server_name *.domain.dev;
在您的应用程序中,您需要 split/handle HOST header。
另一种方法,但这意味着 redirect 301 是做这样的事情:
server {
listen 80;
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
return 301 https://domain.dev/profile?user=$subdomain;
}
在这种情况下,请注意 server_name 中的 regex:
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
这有助于您将子域用作 $subdomain
。
为了避免重定向,这可能有效:
server {
listen 80;
server_name ~^(?<subdomain>\w+)\.your-domain\.tld$;
location / {
resolver 8.8.8.8;
proxy_pass http://httpbin.org/get?user=$subdomain;
proxy_set_header Host httpbin.org;
}
}
出于测试目的,我正在使用 http://httpbin.org/on the
proxy_pass`,这样您就可以使用类似以下内容进行测试:
$ curl foo.your-domain.tld:8080
{
"args": {
"user": "foo"
},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "curl/7.54.0"
},
"origin": "91.65.17.142",
"url": "http://httpbin.org/get?user=foo"
}
注意回复:
"url": "http://httpbin.org/get?user=foo"
在本例中匹配子域 foo
.your-domain.tld.