Frontend Для Domino Http/https

st060557

Green Team
01.04.2016
11
1
BIT
10
дословно - сервер не дождался ответ, причин может быть масса...
по-умолчанию у нжинкса достаточное время ожидания, может проблема в устойчивости соединения (хотя это и локалхост, а потому - странно)
на какой ОС сервер? Надо учитывать - винда для нжинкс не рекомендуемая платформа
Да, сервер на Win 2012R2.
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
43
Проверить слушает или нет - через netstat.
А ещё - можно заставить слушать на конкретном IP вместо локалхоста
Правила фаервола могут блокировать коннект от локалхоста к локалхосту.
Nginx прибинден ко всем интерфейсам?
Если да - прибиндить к конкретному.
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Комрадосы! Прошу помощи зала!

Вводные. nginx фронтом. ssl поднят на одном из доменов site.ru.
Две инструкции server {} для 80 и 443.
Третья с редиректом
server {
listen 80;
server_name site.ru www.site.ru;
return 301 https://$host$request_uri;
}

Все работает. Но есть один POST запрос вида
Код:
$(document).on('click', '.logout', function(e){
        e.preventDefault();
            _doSetCookie('autologin','no','',''); //нажата кнопка Выход
                $.ajax({
                    type: 'post',
                    async : false,
                    url: '?logout',
                    data: 'redirectto=person/',
                    dataType: "json",
                    success: function(data) {
                        _doSetCookie('shopcart','onimod');
                        location.reload();
                         }
            });

});
Который неизменно заканчивается
Mixed Content: The page at ' ' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ' '. This request has been blocked; the content must be served over HTTPS.

В конфиге сервера nginx пытался бороть как

Код:
if ( $request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|PATCH|DELETE)$ ) {

    return 444;

}

set $origin $http_origin;

if ($origin !~ '^https?://(subdom1|subdom2)\.site\.ru$') {

    set $origin 'https://site.ru';

}

#if ($origin !~ '^https?://(subdom1|subdom2)\.site\.ru$') {

  #  set $origin 'http://site.ru'; #не помогло

#}

if ($request_method = 'OPTIONS') {


    add_header 'Access-Control-Allow-Origin' "$origin" always;

    add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, PUT, DELETE, OPTIONS' always;

    add_header 'Access-Control-Allow-Headers' 'Content-Type, Accept, Authorization' always;

    add_header 'Access-Control-Allow-Credentials' 'true' always;


    add_header Access-Control-Max-Age 1728000;

    add_header Content-Type 'text/plain charset=UTF-8';

    add_header Content-Length 0;

    return 204;

}

 

if ($request_method ~ '(GET|POST|PATCH|PUT|DELETE)') {

    add_header Access-Control-Allow-Origin "$origin" always;

    add_header Access-Control-Allow-Methods 'GET, POST, PATCH, PUT, DELETE, OPTIONS' always;

    add_header Access-Control-Allow-Headers 'Content-Type, Accept, Authorization' always;

    add_header Access-Control-Allow-Credentials true always;

}

Консоль ?logout
    1. URL-адрес запроса:
    2. Метод запроса:
      POST
    3. Код состояния:
      302
    4. Политика источника ссылки:
      strict-origin-when-cross-origin
  1. Заголовки откликовПросмотреть источник
    1. Access-Control-Allow-Credentials:
      true
    2. Access-Control-Allow-Headers:
      Content-Type, Accept, Authorization

    3. Access-Control-Allow-Methods:
      GET, POST, PATCH, PUT, DELETE, OPTIONS
    4. Access-Control-Allow-Origin: #Access-Control-Allow-Origin: не помогло
    5. Connection:
      keep-alive
    6. Date:
      Sat, 17 Sep 2022 19:58:48 GMT
    7. Location:
    8. Server:
      nginx/1.10.0
    9. Set-Cookie:
      DomAuthSessId=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/
    10. Transfer-Encoding:
      chunked
Не помогло. Какие есть мысли побороть 302 ошибку? То бишь лог аут отрабатывает, но location.reload(); не происходит. Браузер блокирует.
Естественно смущает здесь
Location:
http://site.ru/
когда по всем остальным Get и post по сайту вопросов нет.
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
465
Комрадосы! Прошу помощи зала!

Вводные. nginx фронтом. ssl поднят на одном из доменов site.ru.
Две инструкции server {} для 80 и 443.
Третья с редиректом
server {
listen 80;
server_name site.ru www.site.ru;
return 301 https://$host$request_uri;
}

Все работает. Но есть один POST запрос вида
Код:
$(document).on('click', '.logout', function(e){
        e.preventDefault();
            _doSetCookie('autologin','no','',''); //нажата кнопка Выход
                $.ajax({
                    type: 'post',
                    async : false,
                    url: '?logout',
                    data: 'redirectto=person/',
                    dataType: "json",
                    success: function(data) {
                        _doSetCookie('shopcart','onimod');
                        location.reload();
                         }
            });

});
Который неизменно заканчивается
Mixed Content: The page at ' ' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ' '. This request has been blocked; the content must be served over HTTPS.

В конфиге сервера nginx пытался бороть как

Код:
if ( $request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|PATCH|DELETE)$ ) {

    return 444;

}

set $origin $http_origin;

if ($origin !~ '^https?://(subdom1|subdom2)\.site\.ru$') {

    set $origin 'https://site.ru';

}

#if ($origin !~ '^https?://(subdom1|subdom2)\.site\.ru$') {

  #  set $origin 'http://site.ru'; #не помогло

#}

if ($request_method = 'OPTIONS') {


    add_header 'Access-Control-Allow-Origin' "$origin" always;

    add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, PUT, DELETE, OPTIONS' always;

    add_header 'Access-Control-Allow-Headers' 'Content-Type, Accept, Authorization' always;

    add_header 'Access-Control-Allow-Credentials' 'true' always;


    add_header Access-Control-Max-Age 1728000;

    add_header Content-Type 'text/plain charset=UTF-8';

    add_header Content-Length 0;

    return 204;

}

 

if ($request_method ~ '(GET|POST|PATCH|PUT|DELETE)') {

    add_header Access-Control-Allow-Origin "$origin" always;

    add_header Access-Control-Allow-Methods 'GET, POST, PATCH, PUT, DELETE, OPTIONS' always;

    add_header Access-Control-Allow-Headers 'Content-Type, Accept, Authorization' always;

    add_header Access-Control-Allow-Credentials true always;

}

Консоль ?logout
    1. URL-адрес запроса:
    2. Метод запроса:
      POST
    3. Код состояния:
      302
    4. Политика источника ссылки:
      strict-origin-when-cross-origin
  1. Заголовки откликовПросмотреть источник
    1. Access-Control-Allow-Credentials:
      true
    2. Access-Control-Allow-Headers:
      Content-Type, Accept, Authorization

    3. Access-Control-Allow-Methods:
      GET, POST, PATCH, PUT, DELETE, OPTIONS
    4. Access-Control-Allow-Origin: #Access-Control-Allow-Origin: не помогло
    5. Connection:
      keep-alive
    6. Date:
      Sat, 17 Sep 2022 19:58:48 GMT
    7. Location:
    8. Server:
      nginx/1.10.0
    9. Set-Cookie:
      DomAuthSessId=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/
    10. Transfer-Encoding:
      chunked
Не помогло. Какие есть мысли побороть 302 ошибку? То бишь лог аут отрабатывает, но location.reload(); не происходит. Браузер блокирует.
Естественно смущает здесь
Location:
http://site.ru/
когда по всем остальным Get и post по сайту вопросов нет.
это так и есть...
причина - домина не знает про SSL если он на ней не включён (т.е запрос был по хттп к самой домине)
вариант - принудительно в форме делать хттпс (аутентификации)
xhr идет через нжикс, а ответ домина даёт "клиенту"
 
Последнее редактирование:

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
вариант - принудительно в форме делать хттпс (аутентификации)
xhr идет через нжикс, а ответ домина даёт "клиенту"
Не понял, сэр. Там все относительно. Как делать?
Это же просто лог аут. Никакой формы нет. Тупо ссылка с <base href='https://site.ru/shop/'> https://site.ru/shop/?logout
И nginx должен вернуть тот же локейшон https... Выкурил гугл по nginx cors - не помогло.

А вот при логине все нормально работает без принудилова. И автологин тоже работает.

Я покуда поставил костылек по error. Но такоЭ...

Код:
$(document).on('click', '.logout', function(e){   
        e.preventDefault();
            _doSetCookie('autologin','no','',''); //нажата кнопка Выход
                $.ajax({
                    type: 'post',
                async : false,
                    url: '?logout',
                    data: 'redirectto=person/',
                    dataType: "html",
                    success: function(resp) {
                            console.log('success for HTTP');
                        _doSetCookie('shopcart','onimod');
                        location.reload();
                         },
                  error: function (error) {               
                        console.log("for HTTPS insecure XMLHttpRequest endpoint error object:");
                    _doSetCookie('shopcart','onimod');
                    location.reload();                   
                  }   
            });

});
 
Последнее редактирование:

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Победил установкой <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

Вариант 2 в nginx
Код:
server {
    ...
    add_header Strict-Transport-Security "max-age=31536000" always;
    add_header Content-Security-Policy upgrade-insecure-requests;
    ...
}
 
Последнее редактирование:
  • Нравится
Реакции: lmike

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
465
Не понял, сэр. Там все относительно. Как делать?
Это же просто лог аут. Никакой формы нет. Тупо ссылка с <base href='https://site.ru/shop/'> https://site.ru/shop/?logout
И nginx должен вернуть тот же локейшон https... Выкурил гугл по nginx cors - не помогло.

А вот при логине все нормально работает без принудилова. И автологин тоже работает.

Я покуда поставил костылек по error. Но такоЭ...

Код:
$(document).on('click', '.logout', function(e){ 
        e.preventDefault();
            _doSetCookie('autologin','no','',''); //нажата кнопка Выход
                $.ajax({
                    type: 'post',
                async : false,
                    url: '?logout',
                    data: 'redirectto=person/',
                    dataType: "html",
                    success: function(resp) {
                            console.log('success for HTTP');
                        _doSetCookie('shopcart','onimod');
                        location.reload();
                         },
                  error: function (error) {             
                        console.log("for HTTPS insecure XMLHttpRequest endpoint error object:");
                    _doSetCookie('shopcart','onimod');
                    location.reload();                 
                  } 
            });

});
механизм сессионной аутентификации предполагает форму (или использует умолчальную)
про логаут - я уже смутно помню (куда копать)
и ещё момент - redirectto емнип поддерживает "полный" урл
1663585333211.png
 
Последнее редактирование:

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
и ещё момент - redirectto емнип поддерживает "полный" урл
Посмотреть вложение 63312
Не взлетело. upgrade-insecure-requests решил задачу. Но его надо только на https сайтах цеплять — на http начинает ломиться в https.

К тому же надо делать относительно. Ведь есть еще тестовый сервер, где это надо гасить.
Решается переменной в $$HTMLHead
http :="http"+@If(@Contains(@LowerCase(Server_Name);"site.ru"); "s"; "")+"://";
dbname :=@If(@Contains(@LowerCase(Server_Name);"site");"/shop/";"/"+@WebDbName+ "/");
base_ := http + Server_Name + dbname;
basehref := "<base href=\""+base_ +"\">";
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
43
Не взлетело. upgrade-insecure-requests решил задачу. Но его надо только на https сайтах цеплять — на http начинает ломиться в https.

К тому же надо делать относительно. Ведь есть еще тестовый сервер, где это надо гасить.
Решается переменной в $$HTMLHead
http :="http"+@If(@Contains(@LowerCase(Server_Name);"site.ru"); "s"; "")+"://";
dbname :=@If(@Contains(@LowerCase(Server_Name);"site");"/shop/";"/"+@WebDbName+ "/");
base_ := http + Server_Name + dbname;
basehref := "<base href=\""+base_ +"\">";
Сорян - не заходил на сайт)
Решается через /location
proxy_redirect http:// $scheme://;
Если Location в ответе содержит http:// - то перенаправит в зависимости от исходного запроса или на http:// Или на https://
 

NordSig

Member
18.12.2020
24
0
BIT
59
Может поделитесь готовым конфигом что бы с конфортом и без ошибок работать в Web?
Nginx reverse proxy в качестве фронта в DMZ, в LAN Domino Web-server.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!