Nginx блокирует исходящие запросы
Ситуация: Я запустил django и nginx через docker-compose на vps хостинге ubuntu. nginx поддерживает порты 80 и 443. Проект открывается по домену и перенаправляется на https.
Проблема: Конечные точки, отправляющие запросы на другие серверы (к удаленным API), не работают. После отправки всегда возникает таймаут ожидания.
Вот некоторые настройки: #nginx.conf
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream app {
server backend:8000;
}
server {
listen 80;
server_name eternitydigital.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name eternitydigital.ru;
ssl_certificate /etc/nginx/ssl/certs/cert.crt;
ssl_certificate_key /etc/nginx/ssl/private/private.key;
location / {
proxy_pass http://backend:8000;
}
}
}
#Dockerfile nginx
FROM nginx:1.10.2
COPY nginx.conf /etc/nginx/nginx.conf
CMD ["nginx", "-g", "daemon off;"]
#docker-compose
version: '3.4'
services:
django_app:
build: ./django
ports:
- "8000:8000"
image: backend
container_name: backend
nginx:
build: ./nginx
volumes:
- ./nginx/ssl/cert.crt:/etc/nginx/ssl/certs/cert.crt
- ./nginx/ssl/private.key:/etc/nginx/ssl/private/private.key
ports:
- "80:80"
- "443:443"
depends_on:
- django_app
image: nginx
container_name: nginx
P.S. Сначала было больше настроек, но я не мог решить проблему в течение 2 дней, поэтому я удалил много вещей, чтобы хотя бы заставить его работать
Что вы узнали:
- запросы/ответы успешно выполняются непосредственно из системы через curl
- Я поднял тот же docker-compose на своей Windows, все конечные точки работают как надо .
- самое интересное: если собирать на хостинге не через docker-compose, а только django без nginx, то все работает как надо
Проблема заключалась в mtu. Я переопределил его в docker-compose, и все стало работать правильно. На моем сервере по умолчанию было 1500
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1450