Назад | Перейти на главную страницу

Почему прокси-сервер lighttpd или Apache2 изменяет мой URL-адрес при доступе к index.html?

У меня небольшая неудобная установка с веб-сервером Apache 2, который является привратником и проксирует трафик на основе входящего домена:

<VirtualHost *:80>
  ServerName example.org

  RewriteEngine On
  RewriteRule ^/(.*) http://localhost:3000/$1 [P]
</VirtualHost>

Работает под localhost:3000 У меня запущен lighttpd, который обслуживает статический контент и действует как обратный прокси для двух других служб, работающих на портах 3001 и 3002. Конфигурация выглядит так:

# lighttpd will also be used to forward requests to node.js
server.modules = (
  "mod_proxy"
)

# This config is meant to work relative to certain directories,
# it is not meant to be used somewhere globally in /etc/
var.projectRoot = var.CWD

# Setting up paths
server.document-root = var.projectRoot + "/client"

# Port to listen on
server.port          = 3000

# We don't want to provide names of individual files
index-file.names = ( "index.html" )

# Serve all API calls to the API server
$HTTP["url"] =~ "^/api/.*$" {
  proxy.server  = ( "" => (
      ( "host" => "127.0.0.1", "port" => 3001 )
    )
  )
}

# Serve all pages that are not known as static or api routes
# to the page instance
$HTTP["url"] !~ "^/(assets|game|ige|api).*$" {
  proxy.server  = ( "" => (
      ( "host" => "127.0.0.1", "port" => 3002 )
    )
  )
}

Вся установка отлично работает в следующих случаях:

Однако просьба GET /game (где game в папке есть index.html файл) обслуживается, но меняет URL-адрес на http://localhost:3000/game. Или, если быть более точным: он изменяется на любой URL-адрес, который я указал в vhost Apache2, если я поставлю example.org:3000 там он будет пытаться служить example.org:3000/game, Игнорирование директивы прокси [P].

вещи только идет не так, когда lighttpds "переписывает", чтобы доставить folder/index.html файлы для folder/ Запросы. Кто-нибудь может сказать мне, почему?

Поведение одинаково для Chrome и Firefox, и я не получаю перенаправления HTTP.

Это могло быть какое-то перенаправление сервером lighttpd, поскольку у вас нет ProxyPassReverse указана директива (работает с RewriteRule слишком). Тем не менее, я не вижу в вашей конфигурации ничего, что специально требует, чтобы mod_rewrite выполнял этот прокси: лучше всего избегать его использования, когда есть специальные директивы для выполнения этой работы.

Не могли бы вы попробовать это вместо этого?

<Location />
    ProxyPass        http://localhost:3000
    ProxyPassReverse http://localhost:3000
</Location>