Я пытаюсь запустить и использовать докер за nginx в качестве обратного прокси. Все работает нормально, кроме случаев, когда докер отвечает необработанным потоком "application/vnd.docker.raw-stream"
вместо обычного HTTP-ответа. Это происходит с конечными точками /start
, /attach
и т. Д., Описанными здесь: https://docs.docker.com/engine/api/v1.21/#operation/ExecStart
Это когда моя конфигурация nginx не пересылает клиенту ответ докера. Я попытался найти его, и есть только одна статья в блоге, предлагающая патч для реального файла nginx C: https://blog.yadutaf.fr/2014/12/12/how-to-run-docker-behind-an-nginx-reverse-proxy/
Я полностью следил за приведенным выше блогом, однако установка r->upstream->upgrade = 1;
, похоже, не влияет на конечную точку /start
HTTP в докере. Nginx просто не отвечает. Есть ли способ обойти это? На данный момент это мой файл nginx.conf:
daemon off;
error_log /dev/stdout info;
# error_log logs/error.log debug;
events {
}
http {
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 /dev/stdout main;
# include mime.types;
# default_type application/octet-stream;
# sendfile on;
# keepalive_timeout 65;
upstream dockerpool {
# session_sticky cookie=sessionid fallback=off mode=insert option=indirect;
# backup server
# server nginx_dev_test:80;
server socat:2376;
}
server {
listen 80;
location / {
# The upstream here must be a nginx variable
set $ups dockerpool;
proxy_buffering off;
proxy_pass http://$ups;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
}