С появлением новых проектов в сети иногда кажется, что задача эффективной организации пользовательских поддоменов (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