В настоящее время у меня настроен веб-сервер Apache, на котором каждый виртуальный хост изолирован с помощью HTTPD-ITK и модуля AppArmor. Каждому воркеру виртуального хоста сервер устанавливаетuid / setgid, а затем помещает их в профиль AppArmor.
Я хочу использовать Nginx, но я не могу найти никакой документации по его настройке, чтобы рабочие процессы не были разделены между всеми виртуальными хостами, а рабочие процессы выполнялись для каждого виртуального хоста (и, следовательно, могут быть setuid / setgid). Есть ли способ сделать это под Nginx?
nginx - это совершенно другое дело, чем Apache (помимо HTTP-сервера). Его модель заключается в том, что у самого nginx нет «рабочих», где внутри процесса выполняется какое-то веб-приложение.
nginx в основном выполняет "завершение внешнего интерфейса" для HTTP-запросов, а затем передает работу внутреннему серверу, что может быть выполнено снова через HTTP или определенные протоколы, такие как FCGI, mod_passenger и т. д.
Таким образом, нет необходимости делать то, что вы делаете с Apache, непосредственно в nginx. Это особенность: она позволяет значительно упростить общую архитектуру и, в конечном итоге, намного быстрее и менее требовательна к ресурсам, таким как мощность процессора и память.
В конечном итоге я решил эту проблему, запустив экземпляр Nginx для каждого веб-сайта, а также главный Nginx, который реверсирует прокси на каждый из веб-сайтов. Это в сочетании с PHP-FPM для предоставления PHP тем сайтам, которым он нужен.
Я поместил фреймворк, который занимается генерацией конфигураций Nginx для такой настройки, в репозиторий GitHub, чтобы любой мог использовать: https://github.com/hach-que/Nginx-Secure.