Ошибка смешанного содержимого при использовании SSL с приложением Gunicorn / Django / Nginx - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь настроить HTTPS для экземпляра Superdesk , который использует Gunicorn и Nginx для маршрутизации.У меня установлен сертификат и (я думаю) работает на сервере.Однако при указании браузера на приложение выдается сообщение «Блокированная загрузка смешанного активного содержимого» * ​​1003 *http://localhost/api" в Firefox и «Соединение WebSocket с« ws: // localhost / ws »: Ошибка при установлении соединения: net :: ERR_CONNECTION_REFUSED» вChrome. Документация для этого приложения практически отсутствует, и я потратил бесчисленные часы, пытаясь заставить это работать. Я подал проблему разработчику на GitHub, но у меня не былоУдачи в ответе. Вот моя конфигурация Nginx:

server {
    listen 80;
    listen 443 ssl;

    server_name my_server_name;
    ssl on;
    ssl_certificate /path/to/my/cert.pem;
    ssl_certificate_key /path/to/my/key/key.pem;

    location /ws {
        proxy_pass http://localhost:5100;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_read_timeout 3600;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
     }  
    location /api {
        proxy_pass http://localhost:5000;
        proxy_set_header Host localhost;
        expires epoch;

        sub_filter_once off;
        sub_filter_types application/json;
        sub_filter 'http://localhost' 'http://$host';
    }  
    location /contentapi {
        proxy_pass http://localhost:5400;
        proxy_set_header Host localhost;
        expires epoch;
    }  
    location /.well-known {
        root /var/tmp;
    }
    location / {
        root /opt/superdesk/client/dist;

        # TODO: use "config.js:server" for user installations
        sub_filter_once off;
        sub_filter_types application/javascript;
        sub_filter 'http://localhost' 'http://$host';
        sub_filter 'ws://localhost/ws' 'ws://$host/ws';
    }
    location /mail {
        alias /var/log/superdesk/mail/;
        default_type text/plain;
        autoindex on;
        autoindex_exact_size off;
    }
}

Я впервые работал с приложением nginx / gunicorn / django и совершенно потерян. Кто-нибудь сможет указать мнев правильном направлении?

1 Ответ

0 голосов
/ 06 марта 2019

Для всех, кто пытается настроить Superdesk и сталкивается с той же проблемой, я наконец-то выяснил правильную конфигурацию.

Во-первых, вот конфигурация Nginx, которую я должен обрабатывать HTTPS-запросы и перенаправлять HTTP-запросы в HTTPS:

server {
    listen                      443 ssl http2;
    listen                      [::]:443 ssl http2;
    server_name                 my.domain.com;

    ssl on;
    ssl_certificate             /path/to/my/cert.pem;
    ssl_certificate_key         /path/to/my/key.pem;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

    location /ws {
    proxy_pass http://localhost:5100;
    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_read_timeout 3600;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

location /api {
    proxy_pass http://localhost:5000;
    proxy_set_header Host my.domain.com;
    expires epoch;

    sub_filter_once off;
    sub_filter_types application/json;
    sub_filter 'http://localhost' 'https://$host';
}

location /contentapi {
    proxy_pass http://localhost:5400;
    proxy_set_header Host my.domain.com;
    expires epoch;
}

location /.well-known {
    root /var/tmp;
}
location / {
    root /opt/superdesk/client/dist;

    # TODO: use "config.js:server" for user installations
    sub_filter_once off;
    sub_filter_types application/javascript;
    sub_filter 'http://localhost' 'https://$host';
    sub_filter 'ws://localhost/ws' 'wss://$host/ws';
}
location /mail {
    alias /var/log/superdesk/mail/;
    default_type text/plain;
    autoindex on;
    autoindex_exact_size off;
}

}

server {
    listen                      80;
    listen                      [::]:80;
    server_name                 my.domain.com;
    return                      301 https://$host$request_uri;
}

Чего мне не хватало в конфигурации:

В поле proxy_set_header должно быть установлено значение proxy_set_header Host <my_domain name>, а в поле sub_filter онобыл только второй параметр , который должен был быть настроен для использования HTTPS

Специфика Superdesk, которую нужно было настроить:

In / opt/superdesk/activate.sh, установите HOST_SSL в HOST_SSL=${HOST_SSL:-s}.Это гарантирует, что ссылки, отправленные по почте (например, электронные письма о пароле), будут отправлены в виде HTTPS.

В ретроспективе это кажется простым, но это было трудно понять с ограниченным знанием Nginx ...

...