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


0

我有apache-mpm-itk + php_module设置,用户的文件夹/文件属于他们。但是我想将几个帐户迁移到nginx + php-fpm。

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

例如,用户的家:

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

权限为user:user

这是来自主机的nginx conf的代码:

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    

Answers:


1

使用user指令中的值生成nginx worker 。默认值为nobody,但是nginx官方软件包在上下文中包括一个包含user nginx;in 的默认配置。nginx.confmain

如果仅指定一个用户,则具有相同名称的组将应用于nginx worker。

PHP-FPM的默认user:group是www-data:www-data。

您所能做的就是制作拥有nginx:www-data该文件的文件,该文件可以正常使用。然后问题将是更新文件,因为创建文件的任何用户都需要写访问权限。

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

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

对我来说,以前的两个解决方案都不理想。

我要做的是使目录树归用户管理内容所有,用于user nginx www-data;使nginx worker用户属于www-data组,并允许用户读取/写入,组读取以及其他所有内容(因此0640为文件和0750目录的位掩码,允许遍历用户和组)。

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

您可以在操作系统级别更改特定分区的默认位掩码...,也可以保留默认值,这些默认值的限制要小一些,但可以完美地工作,只需更改所有权并添加setgid标志即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.