Nginx、php-fpm、虚拟主机和权限

Nginx、php-fpm、虚拟主机和权限

我已经设置了 apache-mpm-itk + php_module,并且用户的文件夹/文件属于它们。但我想将多个帐户迁移到 nginx + php-fpm。

如果我想将 nginx/php-fpm 与属于不同用户的虚拟主机一起使用,那么文件夹/文件的正确权限应该是什么?

例如用户家:

/var/www/user/data/www/domain.com    

并且权限是用户:用户

以下是主机 nginx 配置中的代码:

server {
    listen 8080;
    server_name domain.com;
    root /var/www/user/data/www/domain.com/;

    index index.php index.html index.htm;

    location / {
            # First attempt to serve request as file
            try_files $uri $uri/index.php;
    }


    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm/domain.com.socket;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

以下是 php-fpm 的池配置:

[domain.com]

listen = /var/run/php5-fpm/domain.com.socket
listen.backlog = -1
listen.owner = user
listen.group = user
listen.mode=0660

; Unix user/group of processes
user = user
group = user

; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

; Pass environment variables
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /var/www/user/data/tmp
env[TMPDIR] = /var/www/user/data/tmp
env[TEMP] = /var/www/user/data/tmp

; host-specific php ini settings here
; php_admin_value[open_basedir] = /var/www/user/data:/tmp
php_admin_value[error_log] = /var/user/data/logs/fpm-php.log
php_admin_value[realpath_cache_size] = 4096K    

答案1

nginx 工作进程由来自user指令。默认值为nobody,但 nginx 官方包在上下文中包含一个包含的user nginx;默认nginx.conf配置main

当只指定一个用户时,同名的组将应用于 nginx worker。

PHP-FPM 的默认用户:组是 www-data:www-data。

你可以做的是让文件归谁所有,nginx:www-data这样就可以解决问题了。那么问题就是更新文件,因为任何创建文件的用户都需要写权限。

默认情况下,目录可由其所有者(用户)写入,但不能由该用户组写入,这迫使您执行以下任一操作:

  1. 使用nginx用户更新 Web 内容
  2. 为该组添加写权限www-data,并将管理内容的用户添加到该组

对我来说,前面两种解决方案都不太理想。

我要做的是让目录树归管理内容的用户所有,用来user nginx www-data;让 nginx 工作者用户属于 www-data 组,并允许用户读/写、组读取而其他用户则不执行任何操作(因此0640文件的位掩码和0750目录的位掩码允许用户和组遍历)。

更进一步,我会在目录中添加 setgid 位,以确保将正确的组自动应用于树中创建的任何目录/文件。因此,我会2640在文件和2750目录中使用位掩码。

您可以在操作系统级别更改特定分区的默认位掩码...或者您可以坚持使用限制较少但可以完美运行的默认设置,只需更改所有权并添加 setgid 标志即可。

相关内容