如何配置 nginx+php(fcgi)以不同的用户运行每个子域?

如何配置 nginx+php(fcgi)以不同的用户运行每个子域?

我对 nginx 还很陌生,更多是出于学习目的,我试图配置 Nginx 以便为每个子域使用不同的用户运行 php。

例如,我想将用户john用于所有脚本,foo.example.com并将用户jack用于bar.example.com

我已经在我的系统(ubuntu 服务器)上创建了用户,但我不知道如何指示 nginx 使用这些用户 - 而且我正在寻找一个可以轻松处理许多用户(比如说 ~2000 个)的解决方案。

查看文档,我不明白是否必须php5-cgi为每个用户生成一个进程(使用不同的端口),然后将它们抓取到我的sites-available网站(正如我所说,我是新手,但在我看来,这就像服务器自杀),并且 nginx 配置中仅有的 2 页讨论了这一点..是用中文写的(第1页第2页), 很难用谷歌翻译翻译(但是,看代码,使用了一种完全不同的方式server-suicide

有什么建议吗?

更新

galador 的答案可以完成工作,但是我试图构建一个动态环境(带有通配符子域),不需要为每个新站点重新启动 nginx/fpm,这可能吗?

答案1

编辑:我刚刚注意到您的“需要扩展到~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 指令中的端口。

相关内容