场景:你知道一个服务的访问地址(如
http://172.1.0.41/predictive/),但不知道代码部署在服务器的哪个目录,如何快速定位?
背景
生产环境中,Web 服务通常不是直接对外暴露的,而是经过 Nginx / Apache 做反向代理。因此,一个 URL 路径背后可能对应:
- 一个静态文件目录
- 一个本地运行的后端服务(如 Python、Node.js、Java 等)
- 一个容器内的服务
找到"真正跑在哪里",需要从 Web 服务器配置入手,逐层追踪。
第一步:确认 Web 服务器类型并查看配置
登录服务器后,首先确认是 Nginx 还是 Apache:
# 检查 Nginx 是否在运行
ps aux | grep nginx
# 检查 Apache 是否在运行
ps aux | grep apache
Nginx 配置查找
# 搜索包含目标路径关键词的配置文件
grep -r "predictive" /etc/nginx/
# 查看主配置文件
cat /etc/nginx/nginx.conf
# 查看已启用的站点配置
ls /etc/nginx/sites-enabled/
cat /etc/nginx/sites-enabled/*
Apache 配置查找
grep -r "predictive" /etc/apache2/
grep -r "predictive" /etc/httpd/
第二步:读懂 Nginx 配置
找到配置后,你可能会看到类似这样的内容:
location /predictive/ {
proxy_pass http://localhost:3880/predictive/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
client_max_body_size 200m;
}
关键字段解读:
| 字段 | 含义 |
|---|---|
location /predictive/ |
匹配的 URL 路径 |
proxy_pass http://localhost:3880/predictive/ |
实际转发到本机 3880 端口 |
proxy_set_header X-Real-IP |
透传真实客户端 IP |
client_max_body_size 200m |
允许最大上传 200MB |
✅ 结论:
/predictive/是一个反向代理 ,真正的服务运行在本机 3880 端口。
第三步:根据端口找到进程
# 方式一:ss 命令(推荐)
ss -tlnp | grep 3880
# 方式二:lsof 命令
lsof -i :3880
# 方式三:netstat(老版本系统)
netstat -tlnp | grep 3880
输出示例:
LISTEN 0 128 *:3880 *:* users:(("python3",pid=12345,fd=5))
从输出中可以获取到进程名 (如 python3)和 PID (如 12345)。
第四步:根据 PID 找到部署目录
# 查看进程的工作目录(推荐)
ls -la /proc/12345/cwd
# 或者使用 pwdx
pwdx 12345
# 查看进程完整启动命令(能看到脚本路径)
cat /proc/12345/cmdline | tr '\0' ' '
输出示例:
/proc/12345/cwd -> /opt/app/predictive-service
✅ 至此,你已经找到了服务的实际代码目录 :
/opt/app/predictive-service
完整排查流程总结
访问地址 http://IP/predictive/
↓
查 Nginx 配置
↓
发现 proxy_pass → localhost:3880
↓
ss -tlnp | grep 3880
↓
获取 PID
↓
ls -la /proc/PID/cwd
↓
找到部署目录 ✅
补充:如果是静态文件而非反向代理
如果 Nginx 配置是这样的:
location /predictive/ {
root /var/www/html;
index index.html;
}
那对应的文件目录就是 /var/www/html/predictive/,直接去该目录查看即可。
小结
| 情况 | 定位方式 |
|---|---|
Nginx proxy_pass 到本地端口 |
查端口 → 查 PID → 查 /proc/PID/cwd |
Nginx root 指向静态目录 |
直接读配置中的 root 路径 |
| 不确定服务类型 | ps aux 查进程 + find / -name "*predictive*" 全局搜索 |
作者:运维笔记 | 标签:Linux、Nginx、运维、服务部署、反向代理