我对 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 指令中的端口。