我有两个Docker容器:一个运行nginx,另一个运行flask中的服务器应用程序。当使用HTTP发送请求时,所有服务器的端点都可以直接或通过nginx访问。然而,在使用mkcert添加证书(并允许浏览器中的异常)后,只有我的服务器的索引页是可访问的。
下面是我的nginx.conf和docker-compose.yml的相关部分
nginx.conf
server {
listen 80;
server_name example.com;
# Redirect all HTTP traffic to HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
location / {
proxy_pass http://server:5000;
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.yml
services:
server:
build:
context: ./server
dockerfile: Dockerfile.prod
container_name: flask
networks:
backend:
restart: always
command: gunicorn --bind 0.0.0.0:5000 run:app
volumes:
- ./server/:/usr/src/server/
expose:
- 5000
env_file:
- ./server/.env.prod
nginx:
build: ./nginx
container_name: nginx
networks:
backend:
frontend:
restart: always
ports:
- "8080:80"
- "443:443"
volumes:
- ./server/certs:/etc/nginx/certs
尝试访问任何端点都会导致nginx响应404 not found错误。使用地址http://example.com重定向我'欢迎来到nginx!成功的安装站点,让我相信nginx.conf的重定向部分也有问题。
我已经使用了端口8080,因为端口80正在使用中。lsof -i:80没有返回任何内容。
1条答案
按热度按时间hfwmuf9z1#
这个配置对我来说很有用:
以及:
我使用了adminer服务器而不是flask应用程序,但概念保持不变。
您可以尝试检查您的/etc/hosts是否为example.com正确配置。同时确保刷新缓存
dscacheutil -flushcache
。最后尝试使用curl而不是浏览器。curl https://example.com --insecure
请确保将
command: [nginx-debug, "-g", "daemon off;"]
添加到docker文件中,以便您可以调试请求是否到达nginx服务器以及它们是否被正确重定向。