Невозможно обслужить приложение django App за Apache + Nginx
У меня есть приложение Django, которое я пытаюсь развернуть на нашем рабочем сервере через доменное имя.
На нашем девелоперском сервере используется apache, а для обслуживания приложений и статических/медийных файлов я использую nginx.
Если я развертываю его локально на своем компьютере (localhost:port), все работает отлично. Как только я пробую его на нашем сервере разработки, я не могу подключиться к конечной точке websocket.
Сначала я развернул свое приложение с помощью docker-compose.yml, состоящего из nginx, приложения django, сервисов redis и postgres.
Ниже приведен мой файл nginx conf
server {
listen 80;
listen 443 default_server ssl;
server_name localhost;
charset utf-8;
location /static {
alias /app/static/;
}
location /upload {
alias /app/media/;
}
location / {
proxy_pass http://web:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
}
location /ws/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_pass http://web:8000;
}
}
А вот мой apache conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName our.dev.server
<Location />
ProxyPass http://127.0.0.1:89/
ProxyPassReverse http://127.0.0.1:89/
# Proxy WebSocket connections to your application
RewriteEngine On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/ws/(.*)$ ws://127.0.0.1:89/$1 [P,L]
</Location>
SSLCertificateFile /etc/letsencrypt/live/our.dev.server/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/our.dev.server/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
RequestHeader add X-Forwarded-Proto "https"
</VirtualHost>
</IfModule>
Когда я пытаюсь подключиться к websocket, кажется, что либо apache, либо nginx не обновляет http-запрос до ws...