大规模Linux集群架构最佳实践:如何管理上千台服务器pdf下载
Apache下,每个虚拟主机可以单独不同的phpadminvalue,可以设置非常详细的网站目录权限设置,安全性比较高。
nginx做为一个高性能的web服务器已经得到广泛的应用,随着php5.3的发布,php-fpm也已经内置在php里面了,如何安装配置nginx+php-fpm,下面的内容,将集中于给nginx的虚拟主机和php-fpm的pools配合,实现不同虚拟主机运行不同配置的php。
我们下面会配置两个虚拟主机,使用不同的php和php-fpm配置
编辑php-fpm.conf
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = warning
emergency_restart_threshold = 0
emergency_restart_interval = 0
process_control_timeout = 0
daemonize = yes
include=/srv/vhost/*/php-fpm.conf 这里第10行包含各vhost的配置
编辑/srv/vhost/a/php-fpm.conf
[a]
listen = /srv/vhost/a/php-fpm.sock
; Unix user/group of processes
user = nginx
group = nginx
; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 100
; Pass environment variables
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
; host-specific php ini settings here
php_admin_value[disable_functions]=phpinfo
php_admin_value[open_basedir]=/srv/vhost/a/webroot:/tmp
当php-fpm和nginx在同一台服务器时,我比较喜欢用unix sockt。这里指定了sockt文件的地址 /srv/vhost/a/php-fpm.sock
编辑 /srv/vhost/b/php-fpm.conf
[b]
listen = /srv/vhost/b/php-fpm.sock
; Unix user/group of processes
user = nginx
group = nginx
; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 100
; Pass environment variables
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
; host-specific php ini settings here ;php_admin_value[disable_functions]=phpinfo php_admin_value[open_basedir]=/srv/vhost/a/webroot:/tmp 监听在 /srv/vhost/b/php-fpm.sock,另外可以看到,我注释了phpadminvalue[disable_functions]=phpinfo,也就是不禁用phpinfo函数
php-fpm配置完毕,启动它。
接下来配置nginx,配置两个server
server {
listen 80;
server_name a.somethings.me;
index index.php;
root /srv/vhost/a/webroot/;
location /{
}
location ~ .*\.php${
fastcgi_pass unix:/srv/vhost/a/php-fpm.sock;
fastcgi_index index.php;
include fcgi.conf;
}
access_log /var/log/nginx/a.somethines.me-access.log;
}
server {
listen 80;
server_name b.somethings.me;
index index.php;
root /srv/vhost/a/webroot/;
location /{
}
location ~ .*\.php${
fastcgi_pass unix:/srv/vhost/b/php-fpm.sock;
fastcgi_index index.php;
include fcgi.conf;
}
access_log /var/log/nginx/b.somethines.me-access.log;
}
两个server分别fastcgi_pass到不同的sockte文件上,分别在/srv/vhost/a/webroot/ 和 /srv/vhost/a/webroot/ 下创建如下文件
<?php phpinfo();
启动nginx,分别访问 a.somethings.me 和 b.somethings.me 发现a.somethings.me 报错如下
Warning: phpinfo() has been disabled for security reasons in /srv/vhost/a/webroot/phpinfo.php on line 2 而b.somethings.me 正确显示了phpinfo信息,说明我们的配置生效了,在看一下我们的进程
OK, 成功了!