- 新增network-config-guide.md网络配置指南 - 新增nginx-config-guide.md Nginx配置指南 - 新增nginx-fix-guide.md Nginx修复指南 - 新增nginx.conf示例配置
122 lines
2.6 KiB
Markdown
122 lines
2.6 KiB
Markdown
# Nginx 配置修复指南
|
||
|
||
## 错误信息
|
||
```
|
||
host not found in upstream "life-echo-api-prod:8000"
|
||
```
|
||
|
||
## 问题原因
|
||
nginx 容器无法解析 `life-echo-api-prod` 主机名,说明:
|
||
1. nginx 容器不在 `life-echo-network` 网络中
|
||
2. 或者应该使用服务名而不是容器名
|
||
|
||
## 解决方案
|
||
|
||
### 方案 1:使用主机端口(最简单,推荐)
|
||
|
||
如果 nginx 在主机上运行,或通过主机端口访问,使用:
|
||
|
||
```nginx
|
||
upstream lifecho_api_backend {
|
||
server 127.0.0.1:8000;
|
||
}
|
||
```
|
||
|
||
**优点**:不需要配置网络,因为 `docker-compose.yml` 已经将容器的 8000 端口映射到主机的 8000 端口。
|
||
|
||
### 方案 2:将 nginx 连接到同一网络
|
||
|
||
如果 nginx 在容器中运行,需要将其连接到 `life-echo-network` 网络:
|
||
|
||
#### 步骤 1:检查网络是否存在
|
||
```bash
|
||
docker network ls | grep life-echo-network
|
||
```
|
||
|
||
#### 步骤 2:将 nginx 容器连接到网络
|
||
```bash
|
||
# 如果 nginx 容器正在运行
|
||
docker network connect life-echo-network <nginx-container-name>
|
||
|
||
# 或者重启 nginx 容器时添加网络
|
||
docker run -d \
|
||
--name nginx \
|
||
--network life-echo-network \
|
||
-v /path/to/nginx.conf:/etc/nginx/nginx.conf \
|
||
nginx:latest
|
||
```
|
||
|
||
#### 步骤 3:使用服务名配置
|
||
```nginx
|
||
upstream lifecho_api_backend {
|
||
server api:8000; # 使用服务名,不是容器名
|
||
}
|
||
```
|
||
|
||
### 方案 3:在 docker-compose.yml 中添加 nginx 服务
|
||
|
||
如果希望统一管理,可以在 `docker-compose.yml` 中添加 nginx 服务:
|
||
|
||
```yaml
|
||
services:
|
||
# ... 其他服务 ...
|
||
|
||
nginx:
|
||
image: nginx:alpine
|
||
container_name: life-echo-nginx
|
||
ports:
|
||
- "80:80"
|
||
- "443:443"
|
||
volumes:
|
||
- ./nginx.conf:/etc/nginx/nginx.conf:ro
|
||
- ./ssl:/etc/nginx/ssl:ro
|
||
depends_on:
|
||
- api
|
||
networks:
|
||
- life-echo-network
|
||
restart: always
|
||
```
|
||
|
||
然后使用服务名:
|
||
```nginx
|
||
upstream lifecho_api_backend {
|
||
server api:8000;
|
||
}
|
||
```
|
||
|
||
## 验证修复
|
||
|
||
1. **检查配置语法**:
|
||
```bash
|
||
nginx -t
|
||
```
|
||
|
||
2. **重启 nginx**:
|
||
```bash
|
||
# 如果 nginx 在容器中
|
||
docker restart <nginx-container-name>
|
||
|
||
# 如果 nginx 在主机上
|
||
sudo systemctl restart nginx
|
||
# 或
|
||
sudo nginx -s reload
|
||
```
|
||
|
||
3. **测试连接**:
|
||
```bash
|
||
# 测试健康检查
|
||
curl http://127.0.0.1:8000/health
|
||
|
||
# 测试通过 nginx
|
||
curl https://lifecho.worldsplats.com/health
|
||
```
|
||
|
||
## 当前推荐配置
|
||
|
||
根据错误信息,建议先使用**方案 1**(主机端口),因为:
|
||
- 最简单,不需要配置网络
|
||
- `docker-compose.yml` 已经映射了端口
|
||
- 适用于大多数部署场景
|
||
|
||
如果方案 1 不工作(nginx 在容器中且无法访问主机网络),再使用方案 2 或 3。
|