Я знаю, что есть много статей об обратном прокси, есть много вещей о InBound
и OutBound
, но я хотел бы знать, что я сделал неправильно.
У меня есть сервер NodeJs, который доступенhttp://192.168.0.1:3000
Когда я создаю обратный прокси-сервер с помощью фермы серверов, как показано ниже
Шаблон : *
Тип действия: Route To Server Farm
Схема: http
, Ферма серверов: FarmName
, Путь: {R:0}
при просмотре http://localhost
все работает как чудо,но проблема основана на запросе субдомена или подпапки.
Я хочу, чтобы прокси http://localhost/site/sub1
до http://192.168.0.1:3000
Я установил InBound
и OutBound
правила, как показано ниже:
<rewrite>
<globalRules>
<rule name="ARR_testd_loadbalance" enabled="true" stopProcessing="true">
<match url="^site/sub1(.*)" />
<action type="Rewrite" url="http://192.168.0.1:3000/{R:1}" />
<serverVariables>
<set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
<set name="HTTP_ACCEPT_ENCODING" value="" />
</serverVariables>
</rule>
<rule name="query" stopProcessing="true">
<match url="^sockjs/(.*)" />
<action type="Rewrite" url="http://192.168.0.1:3000/sockjs/{R:1}" />
</rule>
</globalRules>
<outboundRules>
<rule name="RewriteAbsoluteUrlsInResponse" preCondition="ResponseIsHtml1">
<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://192.168.0.1(\:3000)?/(.*)" />
<action type="Rewrite" value="/site/sub1/{R:3}" />
</rule>
<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1">
<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" negate="false" />
<action type="Rewrite" value="/site/sub1/{R:1}" />
</rule>
<rule name="Restore-AcceptEncoding" preCondition="NeedsRestoringAcceptEncoding">
<match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)"></match>
<action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}"></action>
</rule>
<preConditions>
<preCondition name="NeedsRestoringAcceptEncoding">
<add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".+" />
</preCondition>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/(.+)" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
на основе вышеуказанных правил Я все еще вижу ошибку с сервера NodeJsas: Когда страница загружается из NodeJS, она показывает мне ошибку 404
, такую как:
Ошибка: 404
Упс, страница не найдена
Извините, запрошенная страница не существует илибыл удален!
и на частном сервере Rocket я вижу
[34mI20190129-17: 17: 04.122 (3.5) rocketchat: logger server.js: 199 [34mMeteor ➔ метод public-settings / get -> userId: null, arguments: [] [34mI20190129-17: 17: 04.125 (3.5) meteor_autoupdate_clientVersions {id: 'TFhMadFtuynon7rHB', clientAddress: '192.168.0.201', httpHeaders: {* '48 * refe: {* '48 * referer: {* '48 * refehttp://localhost/site/sub1', 'x-forwarded-for': '[:: 1]: 3704,192.168.0.201', 'x-forwarded-host': '192.168.0.9:3000', 'x-forwarded-port':' 3000 ',' x-forwarded-proto ':' http ', хост:' 192.168.0.9:3000 ',' user-agent ':' Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, как Gecko) Chrome / 70.0.3538.102 Safari / 537.36 OPR / 57.0.3098.116 ',' accept-language ':' en-US, en; q = 0,9 '}, userId: null}
и если RewriteAbsoluteUrlsInResponse
и RewriteRelativePaths
работают, почему я получаю ошибку 404
от NodeJS?