You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Nginx实现树莓派多项目子目录独立访问?

解决树莓派Nginx多子项目站点配置问题

我明白你想要通过同一个IP地址的不同路径访问两个子项目,同时保留根路径的默认站点。之前尝试Server Blocks没成功,其实不需要单独的虚拟主机,直接在默认的server配置里添加对应的location块就能轻松实现需求。下面是一步步的配置指南:

1. 确认项目目录与权限

首先确保你的两个项目目录已经创建,并且权限设置正确(让Nginx的运行用户www-data能正常访问):

# 创建项目目录
sudo mkdir -p /var/www/automation /var/www/information

# 设置目录所有者(可选但推荐,避免权限问题)
sudo chown -R www-data:www-data /var/www/automation /var/www/information

# 设置合理的文件权限
sudo chmod -R 755 /var/www/automation /var/www/information

2. 修改Nginx默认Server配置

编辑默认的站点配置文件:

sudo nano /etc/nginx/sites-available/default

找到现有的server块,替换或补充成以下内容(重点是添加两个子项目的location块):

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # 根站点的根目录
    root /var/www/html;
    index index.php index.html index.htm;

    server_name _;

    # 根路径访问默认站点
    location / {
        try_files $uri $uri/ =404;
    }

    # 自动化项目站点配置
    location /automation {
        # 指定项目实际目录
        alias /var/www/automation;
        index index.php index.html index.htm;

        # 处理静态资源路径
        try_files $uri $uri/ =404;

        # 嵌套配置PHP请求处理
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            # 注意:这里的PHP版本要和你安装的一致,比如php7.4-fpm.sock
            fastcgi_pass unix:/run/php/php8.2-fpm.sock;
            # 关键:确保Nginx能正确找到PHP脚本文件
            fastcgi_param SCRIPT_FILENAME $request_filename;
        }
    }

    # 信息项目站点配置
    location /information {
        alias /var/www/information;
        index index.php index.html index.htm;

        try_files $uri $uri/ =404;

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php8.2-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $request_filename;
        }
    }

    # 根站点的PHP处理规则
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    # 禁止访问隐藏的.htaccess文件
    location ~ /\.ht {
        deny all;
    }
}

配置要点说明:

  • 使用alias而非root:当访问/automation路径时,alias会直接映射到/var/www/automation目录,避免用root时出现路径拼接错误的问题。
  • PHP处理嵌套:每个子项目的location里都单独配置了PHP规则,确保子目录下的PHP脚本能被正确解析,fastcgi_param SCRIPT_FILENAME $request_filename是关键,它会让Nginx使用alias指定的路径查找脚本。
  • PHP版本适配:你可以通过ls /run/php/命令查看系统中实际存在的PHP-FPM socket文件,替换配置中的对应路径。

3. 验证配置并重启Nginx

配置完成后,先检查配置是否有语法错误:

sudo nginx -t

如果输出test is successful,就可以重启Nginx服务让配置生效:

sudo systemctl restart nginx

4. 测试各站点

分别在三个目录下创建测试文件验证功能:

  • 根站点:在/var/www/html创建index.php,内容:<?php phpinfo(); ?>
  • 自动化项目:在/var/www/automation创建index.php,内容:<h1>Automation Project</h1><?php echo "PHP works!"; ?>
  • 信息项目:在/var/www/information创建index.php,内容:<h1>Information Project</h1><?php echo "PHP works!"; ?>

然后分别访问:

  • http://192.168.0.1:显示根站点内容
  • http://192.168.0.1/automation:显示自动化项目内容
  • http://192.168.0.1/information:显示信息项目内容

如果遇到403错误,大概率是权限问题,回到第一步重新检查目录所有者和权限;如果PHP不解析,检查PHP-FPM服务是否运行(sudo systemctl status php8.2-fpm),以及socket路径是否正确。

内容的提问来源于stack exchange,提问作者Daniele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:34:03