
Я настраиваю nginx как обратный прокси. До этого я использовал только Apache, и без виртуальных хостов.
Я хочу, чтобы мои пользователи могли получать доступ к различным веб-сервисам интрасети, просто вводя название сервиса в адресную строку. Например, вводить «timesheets» вместо «timesheets.intranet.local».
На клиентской машине, если я использую «wget» или браузер для доступа к полному доменному имени сайта (timesheets.intranet.local), то все в порядке.
Если на клиентской машине я использую «wget» или браузер для доступа к простому имени хоста сайта (расписания), то происходит сбой.
Если я использую «wget» локально на сервере nginx, то оба варианта работают нормально.
Конфигурация моего сайта выглядит так:
server {
server_name timesheets timesheets.intranet.local;
location / {
proxy_pass http://127.0.0.1:8080;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /root/timesheet.crt;
ssl_certificate_key /root/timesheet.key;
}
Проблема не в разрешении имен. «wget» на клиентской машине правильно разрешает IP-адрес, но все равно не может получить страницу.
решение1
При настройке обратного проксирования необходимо обращать внимание не только на конфигурацию прокси-сервера, но и учитывать конфигурацию сервиса, стоящего за ним.
Прокси-сервер должен не только принимать имя в своем виртуальном хосте, но и выдавать заголовок Host, который ожидается от бэкенда. В этом случае проще всего настроить и прокси, и бэкенд на прием короткого неквалифицированного имени хоста.
Альтернативный способ может заключаться в переопределении того, какой заголовок хоста прокси отправляет на бэкенд. Тогда вам нужен только ваш бэкенд для сервера только этого имени хоста. Смотрите этот ответhttps://stackoverflow.com/questions/14352690/change-host-header-in-nginx-reverse-proxy