Nginx GET请求/service_data返回404 Not Found,求配置修正方案
Nginx 404问题排查与解决
问题场景
当前Nginx配置如下:
http { server { listen 80; location /service_data { root /opt; index service_state; } } } events {}
- 执行
curl ip_address:80返回默认页面,符合预期; - 执行
curl ip_address:80/service_data时返回404错误,但/opt/service_state文件确实存在,内容为:
First line Second line
期望访问/service_data时返回该文件内容。执行nginx -T验证配置语法正常。
错误原因
当前配置的核心问题在于**root指令的路径拼接逻辑**:
当location匹配/service_data时,root /opt会让Nginx尝试访问的路径是 /opt/service_data/service_state,而实际文件路径是/opt/service_state,路径不匹配导致404。
解决方案
提供三种可行的修改方案,任选其一即可:
方案一:使用alias替换root
alias会直接将location匹配的路径部分替换为指定路径,而非拼接:
http { server { listen 80; location /service_data { alias /opt; index service_state; } } }
此配置下,访问/service_data时,Nginx会直接查找/opt/service_state文件。
方案二:使用try_files直接指定目标文件
跳过index的路径拼接逻辑,直接指定要返回的文件:
http { server { listen 80; location /service_data { root /opt; try_files /service_state =404; } } }
try_files会先尝试访问/opt/service_state,不存在再返回404。
方案三:调整文件路径(可选)
如果允许修改文件位置,将/opt/service_state移动到/opt/service_data/service_state,保持原有配置不变即可生效。
修改配置后,执行sudo nginx -s reload重启Nginx使配置生效,再次访问/service_data即可获取目标文件内容。
内容的提问来源于stack exchange,提问作者Motoko
相关产品推荐
相关产品推荐

