我的nginx + docker + react + java后端出现问题。让我解释一下:
我有一台机器上做了2个docker-compose。
第一个是前端,它只是使用SSL在Nginx中构建的一个React。 第二个是后端,这是一个运行在端口8080中且没有SSL的码头。
这是前端的docker-compose:
version: "3.3"
services:
app:
container_name: frontend
image: frontend:latest
ports:
- 80:80
- 443:443
restart: always
volumes:
- nginx-letsencrypt:/etc/letsencrypt
labels:
- com.centurylinklabs.watchtower.enable=true
networks:
net:
watchtower:
container_name: watchtower_frontend
image: v2tec/watchtower
environment:
- REPO_USER=${DOCKER_USER}
- REPO_PASS=${DOCKER_PASS}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
command: --cleanup --label-enable --interval 30
volumes:
nginx-letsencrypt:
networks:
net:
driver: bridge
使用此nginx配置
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
server_name www.web.me;
return 301 $scheme://web.me$request_uri;
}
server {
listen 80;
server_name web.me;
return 301 https://web.me$request_uri;
}
server {
listen 443 ssl;
server_name web.me;
ssl_certificate /etc/letsencrypt/live/web.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/web.me/privkey.pem;
access_log /var/log/nginx/data-access.log combined;
error_log /var/log/nginx/error.log debug;
location /api {
error_log /var/log/nginx/error.log debug;
proxy_pass http://backend:8080;
rewrite ^/backend(.*)$ $1 break;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
这是后端docker-compose
version: '3'
services:
mongo:
image: mongo:latest
container_name: mongo
restart: always
networks:
fontend_net:
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} #Github
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} #Github
MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} #Github
MONGO_USER: ${MONGO_USER} #Github
MONGO_PASSWORD: ${MONGO_PASSWORD} #Github
volumes:
- ./mongo/mongod.conf:/etc/mongod.conf
- ./mongo/docker-entrypoint-initdb.d/mongo-init-user.sh:/docker-entrypoint-initdb.d/mongo-init-user.sh
- /data/db/:/data/db/
- /data/log/:/var/log/mongodb/
ports:
- "27017:27017"
prometheus:
image: quay.io/prometheus/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
volumes:
- "./prometheus.yml:/etc/prometheus/prometheus.yml"
networks:
frontend_net:
depends_on:
- service
service:
image: backend:latest
container_name: backend
depends_on:
- mongo
links:
- mongo
labels:
- com.centurylinklabs.watchtower.enable=true
environment:
ENV: prod
DB_USER: ${MONGO_USER}
DB_PASS: ${MONGO_PASSWORD}
DB_DB: ${MONGO_INITDB_DATABASE}
ports:
- 8080:8080
restart: always
networks:
frontend_net:
watchtower:
container_name: watchtower_backend
image: v2tec/watchtower
network_mode: host
environment:
- REPO_USER=${DOCKER_USER} #Github
- REPO_PASS=${DOCKER_PASS} #Github
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
command: --cleanup --label-enable --interval 30
networks:
frontend_net:
external: true
我的问题是,当前端向后端发送请求时,我收到了403,我认为它是由nginx提供的,但是我既看不到该服务的日志,也看不到任何内容(这可能意味着该请求是没达到)。
我只有nginx的日志:
myip - - [13/Oct/2020:20:52:30 +0000] "POST /api/auth HTTP/1.1" 403 0 "https://web.me/app/start" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:81.0) Gecko/20100101 Firefox/81.0"
2020/10/13 20:52:35 [info] 36#36: *33 client closed connection while waiting for request, client: myip, server: 0.0.0.0:443
有人知道这里发生了什么吗?