繁体   English   中英

Nginx网站隔离

[英]Nginx websites isolation

我遵循了很多Nginx指南,但没有一个令我满意。

我的目标是创建两个具有不同文件权限的网站,因此我确信它们永远是隔离的。

防爆。 的/ var / WWW /站点1与所有者: 站点1和组:SITE1/ var / WWW /站点2与所有者: 站点2和组: 站点2,具有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:权限被拒绝”。

这个想法是,只有php-fpm才拥有网站文件,因为nginx只是通过套接字与php-fpm进行通信,而php-fpm是操作文件的过程。 Nginx为什么还要拥有它们?

Nginx可以与任何想要的(受信任的)用户一起运行,包括那些文件的所有者...但是,只要nginx用户对两个站点都具有权限,就不能完全隔离两个站点。

如果必须同时运行nginx,则必须具有虚拟化(vps)才能完全隔离它们(尽管单词完全是相对的)。

如果您可以为另一个站点安装另一台服务器,那么除了可以为该用户运行php之外,您还可以将2个不同的Web服务器放置在不同的端口(例如litespeed或lighttpd)中。

因此,您将为用户1提供nginx + fpm(并以用户1运行),为用户2提供lighttpd + fpm(以usr 2运行)。 文件应位于具有适当权限的每个其他用户主目录中,以阻止其他用户的任何访问。

然后,您可以将nginx + lighttpd放在haproxy后面,并将请求路由到nginx或lighttpd,具体取决于主机名,这反过来会给每个用户分配fpm,仅服务于该用户的文件。

https://seanmcgary.com/posts/haproxy---route-by-domain-name

但是无论哪种方式,我认为最好的方法就是虚拟化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM