【发布时间】:2016-02-18 09:31:39
【问题描述】:
我遵循了很多 nginx 指南,但没有一个能让我满意。
我的目标是创建两个具有不同文件权限的网站,因此我确信它们是永久隔离的。
例如。 /var/www/site1 与所有者:site1 和组:site1 和 /var/www/site2 与所有者:site2 和组:site2,这两个目录都有 770 权限。
我的 nginx.conf:
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
include /etc/nginx/sites-enabled/*;
}
我的 /etc/nginx/sites-available/site1:
server {
listen 80;
root /var/www/site1;
index index.php index.html index.htm;
server_name www.site1.org site1.org;
access_log /var/log/nginx/access2.log;
error_log /var/log/nginx/error2.log;
location / {
try_files $uri $uri/ /index.php?$args;
#try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/site1;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm-site1.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
...site2 也一样。
最后是我的 /etc/php5/fpm/pool.d/site1.conf:
[site1]
user = site1
group = site1
listen = /var/run/php5-fpm-site1.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
...site2 也一样。
只要 www-data 用户对 /var/www/site1 和 /var/www/site2 具有文件权限,一切都会按预期进行。当我使用 770 将 site1:site1 设置为 owner:group 时出现问题,然后我在日志中得到“13: Permission denied”。
这个想法是只有 php-fpm 必须拥有网站文件,因为 nginx 只是通过套接字与 php-fpm 通信,而 php-fpm 是操作文件的进程。为什么连 Nginx 都应该拥有它们?
【问题讨论】: