nginx всегда отправляет запросы в локальный apache

Я использую на одном сервере Apache (порт 81) и NGINX (порт 80). Для www.example.com у меня есть приведенный ниже файл конфигурации NGINX.

Проблема заключается в том, что когда Apache запускается на этом сервере, ВСЕ запросы для www.example.com идут на сервер Apache на порт 81. Это не настроено в восходящем потоке, и www.example.com также не настроен в локальный экземпляр Apache, поэтому ошибки повсюду.

Я не хочу, чтобы это было локальным, а только внешним, как определено в восходящем потоке.

Когда я останавливаю apache, используется восходящий поток, и запросы от nginx идут на серверы, определенные в восходящем потоке, когда я снова запускаю Apache, все запросы маршрутизируются локально на Apache

Итак, как я могу избежать запросов, идущих на Apache, когда это

1
задан 28 February 2018 в 16:47
1 ответ

Нам нужны любые .org домен должен перенаправлять на .net домен documentroot

Я предполагаю, что вы имеете в виду «перезапись», а не внешнее «перенаправление» , как код в вашем вопросе? (Вы также изменили направление требуемой перезаписи, как указано в вашем вопросе, но в любом случае я буду придерживаться того, что вы указали в комментариях ... .org на .net)

Предполагается, что у вас есть только одноуровневые TLD, как указано в вашем коде (например, .net , .me , .info , ). org и т. д.), а не многоуровневые «TLD», такие как .co.uk .

 RewriteCond% {HTTP_HOST}! ^ [^.] + \. abc \ .net [  NC]
RewriteCond% {HTTP_HOST}! ^ [^.] + \. Example \ .me [NC]
RewriteCond% {HTTP_HOST}! ^ [^.] + \. Mysite \ .info [NC]
RewriteCond% {HTTP_HOST}! ^ [^.] + \. Xyz \ .org [NC]
RewriteCond% {HTTP_HOST}! \. Internal $ [NC]
RewriteCond% {REQUEST_URI}! ^ / Collateral / [NC]
RewriteRule ^ (. +) / Var / www / domains /% {HTTP_HOST} / httpdocs /% {HTTP_HOST} / $ 1
 

Попробуйте вместо этого что-нибудь вроде следующего:

# If any of these domains are requested then stop
RewriteCond %{HTTP_HOST}      ^[^.]+\.abc\.net [NC,OR]
RewriteCond %{HTTP_HOST}      ^[^.]+\.example\.me [NC,OR]
RewriteCond %{HTTP_HOST}      ^[^.]+\.mysite\.info [NC,OR]
RewriteCond %{HTTP_HOST}      ^[^.]+\.xyz\.org [NC,OR]
RewriteCond %{HTTP_HOST}      \.internal$ [NC,OR]
RewriteCond %{REQUEST_URI}    ^/collateral/ [NC]
RewriteRule ^ - [L]

# Split the requested host into HOSTNAME + TLD (env vars)
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)\.([^.]+)
RewriteRule ^ - [E=HOSTNAME:%1,E=TLD:%2]

# Change TLD "org" to "net"
RewriteCond %{ENV:TLD} =org [NC]
RewriteRule ^ - [E=TLD:net]

RewriteRule (.+) /var/www/domains/%{ENV:HOSTNAME}.%{ENV:TLD}/httpdocs/%{ENV:HOSTNAME}.%{ENV:TLD}/$1 [L]

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

Затем мы разделяем запрошенный HTTP_HOST в имя хоста (субдомен + домен) и только tld . И сохраните их в двух переменных среды: HOSTNAME и TLD соответственно.

Затем мы тестируем env var TLD env var и при необходимости изменяем его (т. Е. org в net ).

И, наконец, выполняется безусловная перезапись в соответствующий корень документа и подкаталог (с использованием переменных env, назначенных выше), как в вашем коде. Обратите внимание, что в описании вы указали только «корень документа», но ваш код также включает подкаталог с тем же именем, поэтому я также включил подкаталог.

Это предполагает, что директивы mod_rewrite, указанные в вашем вопросе, выполнены. т.е. Дальше по конфигу нет других зависимых директив? Я добавил флаг L для удобства.

0
ответ дан 4 December 2019 в 04:13

Теги

Похожие вопросы