当前位置: 首页 > 知识库问答 >
问题:

Nginx网站隔离

伯逸明
2023-03-14

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

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

例如/var/www/site1,所有者为site1,组为site1;和/var/www/site2,所有者为site2,组为site2,这两个目录都具有770权限。

我的nginx。形态:

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数据用户拥有 /var/www/site1和 /var/www/site2.的文件权限当我用770设置site1: site1为所有者:组时,问题就发生了,然后我在日志中得到“13:权限被拒绝”。

其想法是,只有php fpm必须拥有网站文件,因为nginx只是通过套接字与php fpm通信,而php fpm是处理文件的过程。为什么Nginx都应该拥有它们?

共有1个答案

楚嘉纳
2023-03-14

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

如果必须同时运行nginx,则必须使用虚拟化(vps)来完全隔离它们(尽管“完美”一词是相对的)。

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

因此,您将为用户1使用nginx fpm(并与用户1一起运行),为用户2使用lighttpd fpm(与usr 2一起运行)。文件应位于其他用户的主目录中,并具有阻止其他用户访问的适当权限。

然后,您可以将nginx lighttpd放在haproxy后面,并根据主机名将请求路由到nginx或lighttpd,这反过来将为每个用户启动fpm,仅为该用户的文件提供服务。

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

但不管怎样,我认为最好的途径是虚拟化。

 类似资料:
  • 问题内容: 基本安装nginx后,您的文件夹只有一个文件: 该文件夹如何工作,我将如何使用它托管多个(单独的)网站? 问题答案: 只需添加另一种方法,您就可以为托管的每个虚拟域或站点使用单独的文件。您可以将默认副本作为每个副本的起点,并为每个站点进行自定义。 然后在启用站点的站点中创建符号链接。这样,您可以通过添加或删除符号链接并发布服务nginx重新加载来访问站点。 在进行站点维护时,您可以发挥

  • 本文向大家介绍Nginx+SSL搭建 HTTPS 网站,包括了Nginx+SSL搭建 HTTPS 网站的使用技巧和注意事项,需要的朋友参考一下 一、HTTPS 是什么? 根据维基百科的解释: 如果一个网站没有加密,那么你的所有帐号密码都是明文传输。可想而知,如果涉及到隐私和金融问题,不加密的传输是多么可怕的一件事。 鉴于本博客的读者都是接近专业人士,我们不再多费口舌,直接进入正题吧。 二、使用 O

  • 1. 介绍 搭建类似http://tokillgoogle.com/这样的网站,只是能让我们访问google.com。用的工具是ngx_http_google_filter_module,是一个nginx的插件,用的原理是nginx的反向代理。 2. 编译安装 首先要有一台能访问google.com的vps或云主机,并且确保之前编译安装过nginx。 这个插件依赖于ngx_http_substit

  • 从技术角度上看,对于设置项目网站没有可以多说的:设置网站服务器并编写网页都是相当简单的任务,大多数需要说的重要事情如布局和安排已经在前面的章节提过。网站的主要功能是为项目提供一个清新和友好的概况,并组合其他工具(版本控制系统、bug跟踪系统等等)。如果你没有设置网站的技能,通常不难能找到有能力的人乐意帮助你。虽然如此,为了节省时间和工作量,人们通常会选择一个包装主机站点。 包装主机 使用包装站点有

  • 今天我读了很多关于这方面的文章,但我不知道我做错了什么。我正在尝试使用一个vps和nginx来将两个网站(site1.com、site2.com)放在一起。 这是我的nginx。形态 conf.d目录为空,在站点启用目录中有我的配置: 和 当然 /home/site1/www和 /home/site2/www都包含网站的文件。 现在,如果我试图打开site1。com,这里很有趣: 我得到:无法打开

  • 我有一个网站在kubernetes集群中运行。我可以在本地访问它,但希望通过internet访问它。(我有一个注册域),但外部IP一直挂起 我按照以下指示工作:https://dev.to/peterj/expose-a-kubernetes-service-on-your-own-custom-domain-52dd 这是服务和入口的代码 因此,我正在使用helm安装nginx控制器,但在那之后