引自免费微信小程序:皆我百晓生
首先,为了确保问题的准确解决,我们需要确认几个关键点:
- 你的Docker容器配置是否正确。
- Nginx配置文件中的location块设置是否恰当。
这里我会提供一个基本的Nginx配置示例,用于将前端应用和后端API分离开。请根据实际情况调整这个配置。
假设你的前端应用运行在80端口,而后端API运行在8080端口。首先,你需要为每个服务创建一个Dockerfile,并构建镜像。例如,对于前端应用(假设使用Node.js)的Dockerfile可能如下所示:
# 使用官方Node.js基础镜像
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 80
CMD ["npm", "start"]
对于后端API(假设使用Java Spring Boot)的Dockerfile可能如下所示:
# 使用官方Java基础镜像
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/my-api.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
接下来,为每个服务创建一个Docker-compose.yml文件,分别启动前端应用和后端API。
version: '3'
services:
frontend:
build: ./frontend
ports:
- "80:80"
backend:
build: ./backend
ports:
- "8080:8080"
然后,在主机上创建一个名为nginx.conf的Nginx配置文件,内容如下:
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html; # 假设这是你的静态资源目录
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8080/; # 这里是后端API的地址
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-Forwarded-Proto $scheme;
}
}
}
保存上述配置文件后,执行以下步骤来启动整个环境:
- 在前端应用目录下,运行
docker-compose up -d
来启动前端应用。 - 在后端API目录下,运行
docker-compose up -d
来启动后端API。 - 最后,在Nginx所在的主机目录下,启动Nginx:
nginx -c nginx.conf
现在你应该可以通过http://172.16.15.47/
访问前端应用,而API请求应该通过http://172.16.15.47/api/blade-system/tenant/info?domain=http:%2F%2F172.16.15.47:1889
被代理到后端服务。
如果你仍然遇到问题,请检查日志文件(Nginx的日志位于/var/log/nginx/error.log),它可能会提供关于错误的更多细节。同时,请确保你的后端API确实监听了8080端口,并且可以响应来自Nginx的请求。