Рейтинг:0

Nginx/прокси не работает должным образом

флаг de

Недавно я удалил apache2 для Nginx. Я пытаюсь слушать 88, 808 и 888 для своих сайтов и перенаправлять разные поддомены для каждого (и другой домен на другой сервер). проблема в том, что Nginx дает плохой шлюз для всех проксируемых запросов и тайм-аут для прямого доступа по IP.

конфиг прокси: --> otherdomain.fr = ошибка 502, плохой шлюз

# HTTP
сервер {
    # Слушаем по ipv4
    слушать 80;
    #слушай [::]:80;

    server_name ~.*.otherdomain.fr;

    место расположения / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Хост $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass "http://192.168.1.17";
    }
}

сервер{
    слушать 80;
    имя_сервера nextcloud.domain.me;
    место расположения / {
        proxy_set_header Хост $host;
        proxy_pass "http://127.0.0.1:888";
        прокси_перенаправление выключено;
    }
}

сервер{
    слушать 80;
    имя_сервера домен.me;
    место расположения / {
        proxy_set_header Хост $host;
        proxy_pass "http://127.0.0.1:808";
        прокси_перенаправление выключено;
    }
}

пример для порта 88: --> ip:88 = время ожидания

(очевидно, он включен и пользователь nginx имеет доступ к файлам)

сервер {
    # Слушаем по ipv4
    слушать 88;
  
    место расположения / {
        корень /var/www/html/тесты;
    }

}

Я явно делаю что-то не так, но я не могу понять, что, если бы вы могли помочь мне, это было бы невероятно. Заранее спасибо!

РЕДАКТИРОВАТЬ :

netstat -тулпен | grep -E '8.?8'

TCP 0 0 127.0.0.1:10028 0.0.0.0:*
ПРОСЛУШИВАТЬ 0 28186 1929/мастер TCP 0 0 0.0.0.0:80 0.0.0.0:* ПРОСЛУШИВАТЬ 0 91603 8801/nginx: master TCP 0 0 127.0.0.1:12340
0.0.0.0:* ПРОСЛУШИВАТЬ 0 25868 734/dovecot TCP 0 0 127.0.0.1:631 0.0.0.0:*
ПРОСЛУШАТЬ 0 19881 497/cupsd TCP 0 0 0.0.0.0:88 0.0.0.0:* ПРОСЛУШИВАТЬ 0 75033 8801/nginx: master TCP 0 0 0.0.0.0:888
0.0.0.0:* ПРОСЛУШИВАТЬ 0 75032 8801/nginx: master TCP 0 0 0.0.0.0:443 0.0.0.0:*
СЛУШАТЬ 0 75030 8801/nginx: мастер TCP 0
0 127.0.0.1:10025 0.0.0.0:* ПРОСЛУШАТЬ 0
28182 1929/мастер udp6 0 0 :::32885
:::* 113 21172
482/авахи-демон: р"""

digijay avatar
флаг mx
В чем причина различать порты, а затем проксировать их? Что выводит `netstat -tulpen | grep -E '8.?8?'`` ? У вас есть директивы `listen` для всех этих портов?
louis habert avatar
флаг de
1./ Я проксирую и различаю порты, потому что использую разные серверы для каждого из них (808 — это сервер cherrypy, который на самом деле не работает, otherdomain.fr — это другая машина (apache2), 888 — это nextcloud с этим экземпляром nginx (и php8.0) и я использую 88 только для целей тестирования, поэтому я не использую для него субдомен) 2./см. РЕДАКТИРОВАТЬ 3./да знаю
louis habert avatar
флаг de
РЕДАКТИРОВАТЬ: я мог бы удалить порт для nextcloud и, возможно, порт 88
djdomi avatar
флаг za
nginx требует либо местоположения, либо имени сервера, либо IP-адреса в имени сервера. иначе он не будет обслуживать содержимое, так как не знает, что с ним делать. Более того, по какой причине вы используете `~.*.` в имени сервера?
флаг us
Каково содержание nginx `error.log`?
louis habert avatar
флаг de
@djdomi регулярное выражение предназначено для перенаправления каждого поддомена otherdomain.fr на этот IP-адрес.
louis habert avatar
флаг de
@ТероКилканен На 3 запроса: другойдомен.fr домен.me:88 nextcloud.domain.me Я получил : `2021/11/05 10:05:52 [ошибка] 22452#22452: *1 Ошибка подключения() (113: нет маршрута к хосту) при подключении к восходящему каналу, клиент: 172.70.90.59, сервер: ~.*.otherdomain .fr, запрос: "GET/HTTP/1.1", вверх по течению$ 05.11.2021, 10:05:55 [ошибка] 22452#22452: *3 Ошибка подключения() (113: Нет маршрута к хосту) при подключении к восходящему каналу, клиент: 172.70.162.73, сервер: ~.*.otherdomain. fr, запрос: "GET /favicon.ico HTTP/1.$`
Рейтинг:1
флаг us

Вам не нужны кавычки вокруг целевого URL proxy_pass.

Основная проблема заключается в server_name ~.*.otherdomain.fr и тот факт, что вы используете proxy_set_header Хост $host.

В этом случае кажется, что ваше регулярное выражение для имя сервера недействителен и воспринимается как строка. Затем эта строка появляется в $хост переменная.

Ты должен попытаться

имя_сервера *.otherdomain.fr;

вместо. Если это не работает, используйте

proxy_set_header Хост $http_host;

Который передает заголовок HTTP Host вместо содержимого $хост переменная.

djdomi avatar
флаг za
я правильно догадался, что regrx работает, но конфликтует с остальными;) спасибо за разъяснение моих мыслей

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

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