Назад | Перейти на главную страницу

Как настроить nginx + php (fcgi) для запуска каждого поддомена с другим пользователем?

Я новичок в nginx и - больше в целях обучения - я пытаюсь настроить Nginx для запуска php с другим пользователем для каждого поддомена.

Например, я хотел бы использовать пользователя john для всех скриптов на foo.example.com и пользователь jack для bar.example.com.

Я уже создал пользователя в своей системе (сервер ubuntu), но я не знаю, как указать nginx для использования пользователей - и я ищу решение, которое может легко справиться со многими пользователями, скажем, ~ 2000.

Глядя на документацию, я не понимаю, нужно ли мне создавать php5-cgi процесс для каждого пользователя (с другим портом), а затем скопируйте их в свой sites-available сайты (как я уже сказал, я новичок, но мне это кажется самоубийством сервера), и единственные 2 страницы в конфигурации nginx, которые говорят об этом .. написаны на китайском языке (Страница 1, страница 2), трудно перевести с помощью Google Translate (но, глядя на коды, использует совершенно отличный от server-suicide путь)

Любое предложение?

Обновить

Ответ galador выполняет свою работу, но я пытаюсь создать динамическую среду (с поддоменами с подстановочными знаками), которой не нужно перезапускать nginx / fpm для каждого нового сайта, возможно ли это?

редактировать: Я только что заметил ваше требование «масштабировать до ~ 2000 пользователей» ... это может быть не лучший вариант, но, вероятно, его можно легко автоматизировать с помощью скриптов.

Вы могли бы использовать php-fpm сделать что-то подобное (fpm является частью PHP, так как PHP 5.3.3. Я размещаю на своем VPS несколько сайтов и использую нечто подобное.

Мой основной php-fpm.conf выглядит так:

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;
include=/usr/local/etc/fpm.d/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Default Value: none
pid = /var/run/php-fpm.pid

; Error log file
; Default Value: /var/log/php-fpm.log
error_log = /var/log/php-fpm.log

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice

; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of '0' means 'Off'.
; Default Value: 0
;emergency_restart_threshold = 0

; Interval of time used by emergency_restart_interval to determine when 
; a graceful restart will be initiated.  This can be useful to work around
; accidental corruptions in an accelerator's shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;emergency_restart_interval = 0

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;process_control_timeout = 0

; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
;daemonize = yes

И затем в папке fpm.d у меня есть файлы конфигурации для каждого сайта, например:

[myuser]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = myuser
group = myuser

pm = dynamic
pm.max_children = 15
pm.start_servers = 3
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 2000

request_slowlog_timeout = 5
slowlog = /home/myuser/tmp/logs/myuser.slow.log

php_admin_value[error_log] = /home/myuser/tmp/logs/myuser.error.log
php_admin_flag[log_errors] = on

Затем для каждого сайта вы меняете пользователя и порт в их собственном файле, и в конфигурации nginx у вас будет что-то вроде:

location ~ .*.php$ {
    include /usr/local/etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Смена порта в директиве fastcgi_pass.