Рейтинг:0

Обратный прокси-сервер nginx 404 с двумя серверами

флаг va

У меня проблема с конфигурацией NGINX. У меня есть два веб-сервера, работающих на серверах Windows. Какой из них вызывается извне с 443, а затем должен быть перенаправлен на сервер с 41001. Второй блок сервера должен называться FQDN, и nginx должен перенаправить его на FQDN.com/test. Внутренний и внешний.

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

Вот как выглядят мои конфигурации и журналы ошибок

сервер {
    имя_сервера test.example.com;
    вернуть 301 http://test.example.com/test$request_uri;
    }


сервер {
        слушать 443 ssl http2;
        слушать [::]:443 ssl http2;
 
        журнал доступа /var/log/nginx/test_service_access.log;
        error_log /var/log/nginx/test_service_error.log;

        ssl_certificate /etc/nginx/ssl/test.com.pem;
        ssl_certificate_key /etc/nginx/ssl/test.key;
        ssl_session_timeout 1 д;
        ssl_session_tickets выключен;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G> ssl_prefer_server_ciphers выключен;

        местоположение/тест {
        прокси_пасс https://10.10.10.10/test/;
        }

        client_max_body_size 0;
        proxy_connect_timeout 90 с;
        proxy_send_timeout 90 с;
        proxy_read_timeout 90 с;
        send_timeout 90;
    }

сервер {
        имя_сервера test2.example.com;
        # Перенаправить все HTTP-запросы на HTTPS с ответом 301 Moved Permanently.
        вернуть 301 https://test2.example.com$request_uri;
}

сервер {
        слушать 443 ssl http2;
        слушать [::]:443 ssl http2;
        имя_сервера test2.example.com;

        журнал доступа /var/log/nginx/test2_service_access.log;
        error_log /var/log/nginx/test2_service_error.log;

        ssl_certificate /etc/nginx/ssl/test2.example.com.pem;
        ssl_certificate_key /etc/nginx/ssl/test2example.key;

# ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1 д;
        ssl_session_tickets выключен;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G>
        ssl_prefer_server_ciphers выключен;

        add_header Strict-Transport-Security max-age=15768000;

        место расположения / {

# преобразователь 10.150.10.10 8.8.8.8;
        прокси_пасс https://test2.example.com:41001/;
        proxy_redirect https://test2.example.com:41001/ https://test2.example.com/;

        client_max_body_size 0;
        proxy_connect_timeout 90 с;
        proxy_send_timeout 90 с;
        proxy_read_timeout 90 с;
        send_timeout 90;
        }
    }
}

Я посмотрел на error.logs и вот что получилось.

13.02.2022, 12:54:58 [ошибка] 2620#2620: *15 open() "/usr/share/nginx/html/DocuWare/Platform/LoginRedirect" не удалось (2: нет такого файла или каталога), клиент : xxx.xxx.xxx.xxx, сервер: , запрос: "GET /DocuWare/Platform/LoginRedirect?returnUrl=%2fdocuware%2fPlatform%2fWebClient%2f HTTP/2.0", хост: "test2.domain.com", реферер: "https://test.domain.com/docuware/Platform/WebClient/"

13.02.2022, 12:35:17 [ошибка] 2541#2541: *1 истекло время ожидания восходящего потока (110: время ожидания соединения истекло) при подключении к восходящему, клиент:

Что касается первой ошибки, я не понимаю, что именно не так

Я так понимаю, мне нужно определить апстрим для сервера с портом 41001, это правильно?

Я что-то упустил здесь?

ОБНОВИТЬ

Я настроил свою конфигурацию на наименьшую, чтобы проверить это. Как следует, моя конфигурация выглядит так

################################################### #####################
   восходящие счеты {
      сервер 10.120.50.11; 
   }
   
   сервер {
      слушать 80;
      имя_сервера abacus.example.com;
      вернуть 301 https://abacus.example.com$request_uri;
   }
    
   сервер {
      слушать 443 ssl;
      имя_сервера abacus.example.com;
      ssl_certificate /etc/nginx/ssl/xxx.com.pem;
      ssl_certificate_key /etc/nginx/ssl/xxx.key;
      ssl_protocols TLSv1.2 TLSv1.3;

      журнал доступа /var/log/nginx/abacus_service_access.log;
      error_log /var/log/nginx/abacus_service_error.log;

   место расположения / {
      proxy_pass http://abacus;
   }
}

################################################### ######################
   вышестоящая документация {
      сервер 10.120.50.10; 
   }
   
   сервер {
      слушать 80;
      имя_сервера docuware.example.com;
      вернуть 301 https://docuware.example.com$request_uri;
   }
   
   сервер {
      слушать 443 ssl;
      имя_сервера docuware.example.com;
      ssl_certificate /etc/nginx/ssl/xxx.pem;
      ssl_certificate_key /etc/nginx/ssl/xxx.key;
      ssl_protocols TLSv1.2 TLSv1.3;

      журнал_доступа /var/log/nginx/docuware_service_access.log;
      error_log /var/log/nginx/docuware_service_error.log;
      
   место расположения / {
      proxy_pass http://docuware/docuware;
   }
}
}

Когда я обращаюсь к серверу «abacus.example.com», я попадаю на домашнюю страницу IIS. Итак, здесь я должен определить, что я захожу извне с 443 (HTTPS) и меня перенаправляют на порт 23001.

Если я обращаюсь к серверу «docuware.example.com/docuware», я получаю 404 — файл или каталог не найден. Итак, здесь я должен как-то определить, что он может получить доступ к серверу с подпутью.

Во внутренней сети это работает без проблем. Меня перенаправляют на "docuware.example.com/DocuWare/Platform/WebClient/ClientAccount/xxx".

Вы видите здесь, что я должен настроить? Я часами бился об это головой.

djdomi avatar
флаг za
proxy_pass имхо неправильно установлен
флаг us
Пожалуйста, добавьте примеры запросов, какой именно URL вы пытаетесь запросить, и каков ожидаемый результат и фактический результат.
флаг va
я отредактировал свой пост для получения дополнительной информации
флаг va
@TeroKilkanen Добавлены обновления для запросов
флаг us
Используете ли вы один и тот же URL-адрес при доступе через внутреннюю и внешнюю сеть?
флаг va
@TeroKilkanen Да, знаю. Изнутри я получаю доступ с «https://docuware.domain.com/docuware» и «https://abacus.domain.com», и это работает. Вот почему я изо всех сил пытаюсь сделать эту работу извне. Будет ли работать прокси-сервер с «: 23001» и перенаправление для сервера abacus? и для docuware с подпутью "/docuware" из внешнего... я действительно понятия не имею, как это решить.
Рейтинг:0
флаг us

Одна вещь, которая, вероятно, необходима, — это установка правильного заголовка Host для проксируемых заголовков:

Для счетов:

место расположения / {
    proxy_set_header Хост abacus.example.com;
    proxy_pass http://abacus;
}

Для документального ПО:

местоположение / документация {
    proxy_set_header Хост docuware.example.com;
    proxy_pass http://docuware/docuware/;
}
флаг va
Большое спасибо! это решило мою проблему со счетами. Теперь это работает. Все еще есть проблемы с docuware. Я получаю страницу 404, которая не найдена, но URL-адрес меняется на «/Platform/WebClient/». В журнале ошибок написано: «/usr/share/nginx/html/Platform/WebClient/index.html» не найден».
флаг us
На какой полный URL он меняется?
флаг va
привет Теро! Большое спасибо за ваши знания и помощь. Мне удалось заставить его работать. я установил хост заголовка и proxy_pass с / в конце и установил read_timeout.Знай, все работает! последнее, что нужно сделать, это автоматически изменить URL-адрес «docuware.domain.com» на «docuware.domain.com/docuware» при доступе к нему через браузер. Я думаю, что я могу решить это :)
Рейтинг:0
флаг cl

Первая ошибка говорит о том, что nginx не может найти конкретный файл в том месте, которое у него есть. Один из способов решить эту проблему — предоставить nginx определенную папку для запрашиваемых файлов. Так работают веб-серверы.

Я не уверен, что вы можете перенаправить пользователя с помощью nginx с не-SSL-трафика на SSL-трафик. И запрос, и ответ должны быть одинаковыми зашифрованными/незашифрованными, независимо от того, сколько шагов требуется для доступа к целевому серверу из пользовательского веб-браузера.

Посмотрите в логи nginx, если nginx зацикливается, а запрос идет на тот же сервер, который перенаправляется.

флаг va
и как я могу это сделать? теперь мне удалось получить главную страницу IIS с «docuware.domain.com/docuware», но теперь я снова застрял...
pbies avatar
флаг cl
@Cyanmodex9 что делать?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.