如何配置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
相关产品推荐
相关产品推荐

