4 голоса
 
852 просмотра
11.02.2017 / 13:08  aNNiMON

Настроить сервер [один пользователь - один домен + поддомены]

Имеется работающий сервер с nginx. Сейчас директория /var/www/html является корневой для сайта.

Необходимо настроить сервер так, чтобы отдельным пользователям соответствовал отдельный сайт. Например:
  пользователь annimon -> сайт annimon.com + поддомены
  пользователь web_demon -> сайт web_demon.com + поддомены.

Структура следующая:
/var/www/
   - annimon/ - домашняя директория пользователя annimon
     - annimon.com/
       - www/ - каталог для annimon.com
       - projects/ - каталог для projects.annimon.com
     - logs/ - логи для сайтов *.annimon.com
   - web_demon/ - домашняя директория пользователя web_demon
     - web_demon.com/
       - www/
       - xxx/
     - logs/

Так-то вроде не сложно: создать пользователя, создать структуру каталогов, назначить права, настроить nginx, тем более есть мануал http://devacademy.ru/posts/nginx-ubuntu-1404/, но там без поддоменов.

Но есть нюансы, которые мне не понятны. Например, что делать с группами, не отвалится ли www-data, как быть с server listen, реально ли перенаправить логи с поддомена в отдельный файл и т.д.?
Изм. aNNiMON от 11.02.2017 / 13:25
11.02.2017 / 14:03  vlavolk
Для уточнения нужен мануал, в котором описаны все директивы объекта server. На удачу
11.02.2017 / 14:09  vlavolk
http://nginx.org/ru/docs/http/server_names.html там даже на ру есть
11.02.2017 / 14:10  vlavolk
И вот эти виртуальные хосты пошли от апача. в nginx имена серверов ассоциируются с доменными именами. Последствия сисадминов из хацапетовки
Ответы
 
1 голос
 
# 19.02.2017 / 17:06  aNNiMON
Создаём папки:
mkdir -p /var/www/annimon/annimon.com/www
mkdir -p /var/www/annimon/annimon.com/projects
mkdir -p /var/www/annimon/logs


Сразу же можно добавить html-страницы для примера, чтобы знать, какой из сайтов открывается:
echo 'www' > /var/www/annimon/annimon.com/www/index.html
echo 'projects' > /var/www/annimon/annimon.com/projects/index.html


Создаём пользователя:
adduser --home /var/www/annimon annimon

Добавляем пользователя в группу crontab, чтобы ему был доступен крон:
usermod -a -G crontab annimon

Добавляем www-data в группу annimon, чтобы не было проблем с залитыми файлами:
adduser www-data annimon

Передаём права на директорию:
chown -R annimon:annimon /var/www/annimon/


Настраиваем nginx

Сделаем так, чтобы annimon.com был основным сервером, и если будет переход с незарегистрированного поддомена, чтобы перебрасывало на основной.

Основной домен:
/etc/nginx/sites-available/annimon.com
  1. server {
  2.     listen 80 default_server;
  3.     listen [::]:80 default_server;
  4.  
  5.     root /var/www/annimon/annimon.com/www;
  6.  
  7.     access_log /var/www/annimon/logs/annimon.com.access.log;
  8.     error_log /var/www/annimon/logs/annimon.com.error.log;
  9.  
  10.     index index.php index.html index.htm;
  11.  
  12.     server_name _;
  13.  
  14.     location / {
  15.         try_files $uri $uri/ =404;
  16.         if ($http_host ~ "^(.+).annimon.com$"){
  17.             rewrite ^(.*)$ http://annimon.com/$1 redirect;
  18.         }
  19.     }
  20.  
  21.     location ~ \.php$ {
  22.         include snippets/fastcgi-php.conf;
  23.         fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
  24.     }
  25.  
  26.     location ~ /\.ht {
  27.         deny all;
  28.     }
  29.  
  30.     location ~* ^.+\.(jpe?g|gif|png|zip|mp3|mp4)$ {
  31.         access_log off;
  32.         expires 30d;
  33.     }
  34. }

Активируем сайт, создав симлинк на конфиг в sites/enabled:
ln -s /etc/nginx/sites-available/annimon.com /etc/nginx/sites-enabled/

Перезапускаем nginx:
service nginx restart

Заходим на сайт. Должна отобразиться страница с текстом "www".


Теперь поддомен. Скопируем уже существующий конфиг и изменим.
cp /etc/nginx/sites-available/annimon.com /etc/nginx/sites-available/projects.annimon.com
  1. server {
  2.     listen 80;
  3.     listen [::]:80;
  4.  
  5.     root /var/www/annimon/annimon.com/projects;
  6.  
  7.     access_log /var/www/annimon/logs/projects.annimon.com.access.log;
  8.     error_log /var/www/annimon/logs/projects.annimon.com.error.log;
  9.  
  10.     index index.php index.html index.htm;
  11.  
  12.     server_name projects.annimon.com www.projects.annimon.com;
  13.  
  14.     location / {
  15.         try_files $uri $uri/ =404;
  16.     }
  17.  
  18.     # остальное без изменений
  19. }

Обращаем внимание на listen 80, за ними не должно быть default_server - он остаётся единственным для всего сервера у главного домена.

Активируем сайт:
ln -s /etc/nginx/sites-available/projects.annimon.com /etc/nginx/sites-enabled/

Снова перезапускаем nginx:
service nginx restart

И теперь у нас должны открываться и сайт, и поддомен.

Аналогичным образом создаём другие поддомены, только теперь можно копировать конфиг поддомена.

После того, как закончили с одним пользователем, проделываем те же операции и для остальных пользователей.
Всего: 1

Реклама

Мы в соцсетях

tw tg yt gt