Использование httpd ProxyPass с DirectoryIndex

#apache #url-rewriting #httpd.conf #proxypass

#апач #url-переписывание #httpd.conf #проксипасс

Вопрос:

Как я могу использовать a ProxyPass и DirectoryIndex одновременно?

У меня есть следующее правило:

 # Index
DirectoryIndex index.html

# Service Endpoint
ProxyPass /endpointA http://127.0.0.1:wxyz/
ProxyPassReverse /endpointA http://127.0.0.1:wxyz/

# Root Endpoint
ProxyPass / http://127.0.0.1:8080/static/
ProxyPassReverse / http://127.0.0.1:8080/static/
 

Ожидаемое поведение заключается в том , что , когда пользователь попадает на компьютер / , он должен быть обслужен 127.0.0.1:8080/static/index.html

Однако я получаю 404 от /static/ конечной точки, поскольку кажется, что страница по умолчанию не пытается быть загруженной; все это работает правильно, если я нажму

 /index.html
 

Что направляет меня к 127.0.0.1:8080/static/index.html

Как я могу заставить ProxyPass и DirectoryIndex работать одновременно или какую-либо другую комбинацию конфигурации, чтобы, когда пользователь просто нажимает / , они перенаправлялись 127.0.0.1:8080/static/index.html , а не просто 127.0.0.1:8080/static ?

Ответ №1:

Проблема в том, что DirectoryIndex не будет использоваться, потому что сервер уже сопоставил ProxyPass / , и поэтому он уже был передан на другой сервер.

Вы должны установить DirectoryIndex на своем внутреннем сервере. то есть на порту 8080.

Комментарии:

1. Ваш ответ может привести к путанице. Используется DirectoryIndex, чтобы index.html является ли он локальным или удаленным, не имеет никакого значения.

2. Используется ли DirectoryIndex на поддерживаемом сервере? В противном случае запрос к бэкбенд-серверу на / просто завершится неудачей.

3. Это, op уже сказал, что часть, я добавил новый ответ, чтобы предложить, что он может сделать, чтобы избежать /index.html будучи обратным прокси-сервером.

4. Где это говорит что-нибудь о DirectoryIndex внутреннего сервера?

5. Я полностью извиняюсь, мне показалось, что мне не хватило кофе, и я неправильно все понял. Я исправил свой ответ после прочтения и некоторого тестирования. Спасибо за ваше терпение!

Ответ №2:

Я протестировал несколько способов, и единственный, кто дал тот же результат, который вы, кажется, хотите для меня на данный момент, похоже, использует mod_rewrite, как в:

 RewriteEngine on
RewriteRule ^/$ http://127.0.0.1:8080/static/index.html [P,L]
 

затем вы можете добавить все остальное:

 RewriteRule ^/(. ) http://127.0.0.1:8080/static/$1 [P,L]
 

Это может быть грубый способ сделать это.

Комментарии:

1. Это не дает ответа на вопрос. Пользователь хочет index.html быть прокси-сервером.

2. wops, вы совершенно правы, я неправильно понял, позвольте мне это исправить.

3. кстати, я также поддерживаю ответ @DanielScott, в котором он говорит вам использовать такие перенаправления или индексные ссылки в самой серверной части, поскольку вы в любом случае отказываетесь от / к серверной части. Единственный способ, который я нашел для управления этим из интерфейса в этом случае, — это mod_rewrite, или, по крайней мере, в моих тестах, это единственное, что имеет приоритет над proxypass