Я новичок в 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.