>> И далее, выполнение всех http-запросов в пределах текущей сессии пользователя должно выполняться от имени этого >> пользователя. Если я правильно понял надо чтобы все процессы исполнялись от имени (uid) этого пользователя.
Если пользователей немного и нужно чтобы обязательно чтобы worker-ы apache работали из-под пользователя, то я бы попробовал сделать на каждого пользователя свой instance apache (httpd.conf) с небольшим количеством воркеров. Сам апач установлен и настроен в единственном числе.
Т.к. у каждого свой document_root и логи и порты у всех разные (я бы сделал например 8000+uid), то конфиг нужно генерить скриптиком. Авторизацию я бы возложил на nginx. В nginx-е придётся пошаманить чтобы proxy_pass проходил на нужный instalnce apache (localhost:порт).
18 декабря 2008 г. 17:49 пользователь Холстинников Григорий <scarych@xxxxxxxxx> написал:
Доброго времени суток всем.
Прошу помощи и совета в реализации следующей задачи ( гуглинг пока-что ничего не дал :( )
Итак, требуется реализовать следующее взаимодействие серверных компонент.
У нас есть пользователи, прописанные на сервере системно, т.е. запись для каждого из них есть в /etc/shadow, /etc/groups , /etc/passwd, etc.
Эти пользователи авторизуются в www-клиенте (браузере), используя свои системные логин и пароль.
После авторизации нужно по логину пользователя или по логин+ip направить пользователя в назначенный ему Document_root. Описание связок "login, ip, document_root" хранится отдельным конфигурационным файлом.
И далее, выполнение всех http-запросов в пределах текущей сессии пользователя должно выполняться от имени этого пользователя.
В распоряжении есть nginx и apache 2.2.
Выполняться будут perl, php и, наверняка, с++-cgi скрипты.
Нагрузка ~1.5-2K пользователей одновременно.
Частота запросов: частая.
Мощность серверов: высокая.
Какие есть возможности реализации такого решения стандартными средствами?
В моем понимании это можно было бы построить следующим образом:
nginx запускается под рутом, читает /etc/shadow для авторизации.
далее, в директиве server { ... } выполняется некий pl скрипт, в который передаются текущий remote_user и remote_addr, а он возвращается document_root и вызывает запуск fastCGI процесса для обработки .pl и .php под текущим пользователем.
Либо каким-то образом порождает форк Апача с текущим пользователем и все запросы проксирует на него.
Вопрос состоит в том, возможна ли такое разруливание и как? Моих знаний данных технологий пока не хватает :(