在Nginx中用不同的用户托管多个虚拟主机

当您拥有一台服务器时,世界上最正常的事情就是考虑安全性和更高的安全性,您再也无法对它感到偏执了。

一种通用的做法,但不建议使用,是对所有数据库使用同一用户,如果使用root,则更糟,这看起来令人难以置信,有些人(由于流浪或无知),我已经谈到了为什么你不应该这样 儿童的帖子现在是时候解释如何以及为什么更好地将Web服务器处理分离给不同的用户了,这一次它将使用 Nginx的.

专用服务器_子图像

用户和Web服务器是什么?

为了以简短的方式进行解释,Web服务器(apache,nginx等)需要打开系统中的进程,这些进程将是从HDD中获取文件(图像等)并进行处理的进程可用于客户端的浏览器。 Web服务器不能简单地获取文件并以没有人操纵它们的方式来处理文件,也就是说,它需要一个最终将要执行所有操作的用户,而这个用户就是我正在谈论的那个用户,您了解吗?

分成几个用户意味着什么?

假设在我们的服务器上有两个网站,一个是个人项目,另一个是(假设这是我们女友或兄弟的)。 即使当我们使用单独的数据库并且由不同的用户访问它们时,两个网站的文件最终都由同一用户操作,所有站点的PHP处理都由同一用户管理(通常是www-data)。 这是不推荐的做法,最好将所有内容分隔开,正如古老的谚语所说,安全胜于后悔。

好的,我知道了,我该如何使用Nginx

2000px-Nginx_logo.svg

首先要注意的是,Nginx没有像Apache一样拥有自己的模块来处理PHP,对于Nginx,我们需要使用PHP-CGI或PHP-FPM,它们的工作原理与Apache一样好(或更好)。 因此,要使不同用户之间的PHP处理分开,我们需要更改PHP配置文件(CGI或FPM)中的行,而不是Nginx本身。

假设您使用 PHP-FPM,我们将创建一个配置文件 对于特定站点,也就是说,池是将PHP处理与PHP-FPM分开的方法,但我们分部分进行。

1.首先,我们必须知道我们将使用哪个系统用户,我假设我们还没有创建任何用户,那么让我们创建它:

以下所有命令必须以管理权限执行,可以使用直接root用户或使用sudo

adduser blog

我们将开始创建用户的正常过程,输入密码,等等。

我按照示例向用户发布博客,即我们将要托管的第一个站点是博客,以便...了解与该站点相关的每个用户

1. 首先让我们转到/etc/php5/fpm/pool.d/:

cd /etc/php5/fpm/pool.d/

2. 现在,我们将创建一个名为blog.conf的文件:

touch blog.conf

3. 现在,我们将放置将用于VHost博客的池的配置:

使用nano编辑编辑blog.conf文件,例如: 须藤Nano Blog.conf
[新闻]用户= 新闻
组= 新闻
听= / var /运行/ php5-fpm-新闻.sock listen.owner = 新闻
听.group = 新闻
pm =按需pm.max_children = 96 chdir = /

注意: 我用红色标记的是它们必须根据先前创建的用户进行修改的内容。 例如,如果他们与另一个用户创建另一个VHost(例如论坛),而不是简单地在每个行中放置论坛,而是博客吗?

4. 一旦配置了新池(我们刚刚创建和编辑的blog.conf文件),现在该告诉Nginx VHost在该站点对该VHost使用不同的袜子了。 将使用的袜子将是我们先前声明的袜子(/var/run/php5-fpm-blog.sock)。 让我们编辑Nginx VHost,在PHP处理部分中,我们指示使用该袜子。 例如:

位置〜\ .php $ {if(!-f $ request_filename){返回404; }
fastcgi_pass unix:/ var / run / php5-fpm-新闻。袜子;
包括fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

如您所见,我指出该VHost的PHP处理(这些行例如在/ etc / nginx / sites-enabled / vhost-blog中)用在/var/run/php5-fpm-blog.sock ...中找到的袜子来做...这是我们先前在编辑/etc/php5/fpm/pool.d/blog.conf ...时创建的袜子?

5. 完成此操作后,我们将重新启动服务(php5-fpm和nginx)和voila,我们将看到该站点(vhost)的处理不是由www-data或root或任何类似的人完成的,而是由我们先前定义的。

在这里,我向您展示了 ps辅助| grep fpm 在我节点的一台服务器上:

ps aux | grep fpm ebook 586 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm:泳池电子书电子书589 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm:泳池电子书www 608 0.0 0.2 350084 5008? S Mar30 0:00 php-fpm:池www www 609 0.0 0.2 350600 5048 30? S Mar0 00:3 php-fpm:池www tv611 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm:池电视3电视615 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm:泳池电视杂志1818 1.7 1.7 437576 36396? S 09:55 0:46 php-fpm:泳池杂志杂志2264 1.9 1.7 437332 35884? S 10:15 0:26 php-fpm:泳池杂志瞳孔2338 4.3 1.0 428992 22196? S 10:18 0:53 php-fpm:池瞳杂志2413 1.8 1.7 437764 36152? S 10:22 0:18 php-fpm:泳池gutl杂志2754 3.5 1.3 356724 27164? S 10:38 0:00 php-fpm:泳池gutl cgr 5624 0.0 1.0 365168 22696? S Apr28 0:16 php-fpm:泳池CGR学生7900 0.3 2.5 457052 52444? S Apr25 20:23 php-fpm:水池瞳孔瞳孔11021 0.4 2.5 458316 52864? S Apr28 5:57 php-fpm:池瞳cgr 11254 0.0 1.0 363152 21708? S Apr28 0:12 php-fpm:pool cgr cgr 13184 0.0 1.0 362872 21360吗? S Apr28 0:08 php-fpm:泳池CGR

如您所见...使用Nginx + PHP-FPM将用户的PHP处理分开非常容易,您会看到有多个池,因为有多个用户。

结论

当涉及到服务器时,您永远都不会感到偏执...安全不是一件可玩的事,我们越努力提高服务器及其服务的安全性,就越不可能被(成功)吓到。骇客企图或类似similar


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   猎人

    Gaara,目前这些东西应该尽可能自动化,我建议您尝试Ansible。 没有代理,您只需要远程主机上的python,配置非常简单,yaml文件,Jinja模板。

    https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx

    1.    KZKG ^ Gaara

      让我们看看,这不仅适用于WordPress网站,而且...哈哈Ansible的点击率很高,但我更想确切地了解服务器上的所有工作原理,即使我必须花1分钟时间来创建新的袜子和一个新的VHost😀

      1.    猎人

        使用Ansible,您可以使一切自动化,几乎可以做任何您想做的事情,这种方法的优点是您可以封装实践,然后随意执行,假设您的站点负载很重,并且想要在应用程序服务器之间进行负载平衡,这些必须配置为完全相同,您不能跳过某个步骤,或者在其中之一上做任何不同的事情,您能想象一步一步执行该过程4次吗? 使用Ansible,就像将主机名添加到清单文件和Voilá一样简单!

        http://www.ansible.com/how-ansible-works

      2.    猎人

        对Ansible邪教很抱歉,但这是您发现的其中一项技术,现在您希望每个人都使用它,因为它是如此酷和实用,就像当您发现NGINX并希望所有朋友立即离开Apache一样。

        https://speakerdeck.com/slok/ansible-all-the-things

  2.   姆斯塔拉文
  3.   腐烂87

    我是(或正在学习)开发人员,使用NGIX时,在配置nginx + php-fpm时遇到很多问题。 我知道archlinux发行版并不是最好的服务器,但是每次更新ngix或php版本时,总会崩溃,所以我放弃了尝试……今天,我仍然使用经典的Apache + PHP,但是我再看看是否能再次使用NGIX ...也许是在虚拟机中

    1.    猎人

      心态会有所变化,nginx提供静态内容并用作运行真正PHP的php-fpm的反向代理,您必须分部分开始并逐步实现部署,以查找部署指南您使用的框架,每个框架都有其详细信息,包括公众名称,静态名称,资源等。

  4.   匿名

    放弃不存在的“ hostear”这个词,对社区有很大的帮助吗? 靠上帝,说“主持人”有那么难吗?

  5.   西港岛线

    问候,按照您的示例,我想知道是否只能为wordpress backen创建一个池,即为wp-admin创建一个新的套接字以用于与后端的传入连接

    位置/ wp-admin {
    根目录/var/www/yoursite.com/wp-admin;
    index index.php index.html index.htm;
    位置〜^ / wp-admin /(.+.php)$ {
    try_files $ uri = 404;
    根目录/var/www/yoursite.com/wp-admin;
    包括/ etc / nginx / fastcgi_params;

    fastcgi_pass server unix:/run/php5-fpm2.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 4k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_read_timeout 1240;
    }
    location ~* ^/wp-admin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
    root /var/www/tusitio.com/wp-admin/;
    }
    }