С появлением новых проектов в сети иногда кажется, что задача эффективной организации пользовательских поддоменов (bob.someblog.com) кому-то представляется непростой. На самом деле, этот вопрос решается за одну минуту.
Подразумевается, что в качестве фронт-енд http-сервера используется nginx, а истинное расположение пользовательской директории — /users/bob/.
Чтобы проксировать домен bob.someblog.com и все его поддиректории на адрес someblog.com/users/bob/, можно использовать следующую настройку nginx:
[a-z0-9_\-] — этот символьный класс определяется правилами регистрации пользователей, а именно набором допустимых символов, из которых может состоять имя.
Единственный минус — неудобство использования адреса вида www.someblog.com, один из вариантов решения — перенаправление посетителей на адрес someblog.com:
UPD: Речь идёт о такого рода проектах, где без лёгкого фронт-енд севера, такого как nginx, никуда.
UPD2: Обсуждение показало, что я всё же устарел во взглядах и унаследовал решение со старой версии nginx, где много чего не было. По адресу http://server-tuning.info/nginx/auto-subdomains.html можно почитать немного более современное решение. Спасибо ugnich
Подразумевается, что в качестве фронт-енд http-сервера используется nginx, а истинное расположение пользовательской директории — /users/bob/.
Чтобы проксировать домен bob.someblog.com и все его поддиректории на адрес someblog.com/users/bob/, можно использовать следующую настройку nginx:
# someblog.com
server {
listen 11.22.33.44:80;
server_name someblog.com *.someblog.com;
charset utf8;
location / {
# Proxy user domains to /users/$username
if ($host ~* "^(([a-z0-9_\-]+)\.someblog\.com)$") {
set $uid $2;
rewrite ^(.*)$ /users/$uid$1 break;
}
...
[a-z0-9_\-] — этот символьный класс определяется правилами регистрации пользователей, а именно набором допустимых символов, из которых может состоять имя.
Единственный минус — неудобство использования адреса вида www.someblog.com, один из вариантов решения — перенаправление посетителей на адрес someblog.com:
if ($host ~* "^www\.someblog\.com$") {
rewrite ^(.*)$ http://someblog.com$1 last;
}
UPD: Речь идёт о такого рода проектах, где без лёгкого фронт-енд севера, такого как nginx, никуда.
UPD2: Обсуждение показало, что я всё же устарел во взглядах и унаследовал решение со старой версии nginx, где много чего не было. По адресу http://server-tuning.info/nginx/auto-subdomains.html можно почитать немного более современное решение. Спасибо ugnich