NGINX配置修改求助:为Slim Framework子目录API隐藏/public路径
NGINX配置修改求助:为Slim Framework子目录API隐藏/public路径
我完全懂你的需求——就是想通过https://example.com/api直接访问Slim框架的API,不用暴露后面的/public目录对吧?单纯加个alias确实不够,因为NGINX还得处理好静态文件的访问和框架的单入口路由逻辑,我给你梳理下可行的修改方案:
核心问题分析
你的原配置是把所有请求反向代理到127.0.0.1:8081,而Slim框架的真正入口是/api/public/index.php,所以得让NGINX把/api开头的请求映射到/api/public目录,同时把非静态文件的请求自动转发到框架的入口文件。
修改后的HTTPS Server块配置
找到你配置里监听443端口的HTTPS server块,在location / {}块外面添加下面这段配置:
location /api { # 将/api路径映射到实际的public目录,隐藏public后缀 alias /var/www/example.com/data/www/example.com/api/public; # 先尝试访问静态文件,不存在则自动转发到Slim的入口文件 try_files $uri $uri/ /api/index.php$is_args$args; # 处理PHP请求,和原配置的代理规则保持一致 location ~ \.php$ { proxy_pass http://127.0.0.1:8081; # 传递必要的请求头,确保后端服务能正确识别请求信息 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; } # 静态文件缓存规则,和主站保持一致即可 location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ { expires max; } }
为什么这样配置可行?
- alias映射路径:直接把
/api的请求根目录指向/api/public,相当于从URI层面隐藏了public目录。 - try_files处理路由:先检查请求是否对应真实的静态文件,不是的话自动转发到
index.php,完美适配Slim的单入口框架特性。 - 代理参数对齐:沿用了你原配置里的请求头传递规则,确保后端服务能正确获取Host、客户端IP等关键信息。
额外注意事项
- 先确认
/api/public目录的权限,保证NGINX进程能正常读取里面的文件。 - 修改完配置后,先执行
nginx -t检查语法是否正确,没问题再重启NGINX生效(比如systemctl restart nginx,根据你的系统调整命令)。 - 如果还是出问题,去看错误日志
/var/www/httpd-logs/example.com.error.log,里面的报错信息能帮你快速定位问题。
备注:内容来源于stack exchange,提问作者tonyAndr
相关产品推荐
相关产品推荐

