请求优化单服务器双Web应用的Nginx配置
Nginx配置优化方案
你的配置存在两个核心问题,导致/api路径无法正确映射到/app/api目录,下面是修正后的配置及细节说明:
问题分析
location /api中root指令误用:root会将请求的URI完整追加到指定路径后,比如访问/api/index.php时,Nginx会尝试读取/app/api/api/index.php,这显然和你的预期不符。- /api路径下的PHP文件无法正确解析:
全局的PHP匹配规则无法正确处理/api路径下的文件,需要单独适配路径映射。
优化后的配置
server { listen 80 default_server; index index.php index.html index.htm; # 默认根目录指向web应用 root /app/web; # 处理/api路径,使用alias替代root,正确映射到/app/api location /api { alias /app/api; # 继承全局index规则,也可以单独指定 index index.php index.html index.htm; # 处理/api路径下的PHP文件 location ~ [^/]\.php(/|$) { # 生产环境不建议开启目录遍历,存在安全风险 # autoindex on; # autoindex_exact_size on; try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; # 因alias修改了路径映射,使用$request_filename确保脚本路径正确 fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; } } # 处理web应用下的PHP文件 location ~ [^/]\.php(/|$) { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } error_log stderr warn; access_log /dev/stdout main; client_max_body_size 10M; }
关键修改说明
- 替换
root为alias:alias会将/api路径直接替换为/app/api,访问/api/xxx时对应/app/api/xxx,完全匹配你的映射需求。 - 嵌套PHP规则到
/apilocation:确保/api下的PHP文件能被正确解析,同时使用$request_filename替代$document_root$fastcgi_script_name,避免alias导致的路径拼接错误。 - 移除生产环境风险配置:关闭
autoindex目录遍历功能,减少不必要的安全暴露。
内容的提问来源于stack exchange,提问作者TimoB2005
相关产品推荐
相关产品推荐

