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

Частичный обратный http-прокси с использованием nginx

У меня есть несколько HTTP-сервисов, работающих на одном компьютере, на разных портах. Я хотел бы использовать nginx в качестве обратного прокси, но, похоже, я не могу правильно настроить свою настройку.

Я бы хотел следующее:

Кажется, проблемы вызывают первые два; Я хочу все под /fossil/ обрабатываться ископаемыми через порт 8080; кроме самого корня, он должен обрабатываться специальной страницей PHP (в Apache).

Каким будет путь сюда?

На самом деле это довольно просто с двумя типами статического местоположения. location = - точное совпадение, а location / location - совпадение по префиксу. http://wiki.nginx.org/HttpCoreModule#location

server {
  server_name www.example.com;

  # Set defaults for the proxy_pass directives in each location
  # Add the client IP
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  # Pass through the request hostname
  proxy_set_header Host $host;

  # Everything that doesn't match a more specific location
  location / {
    proxy_pass http://127.0.0.1:8001;
  }

  location = /fossil/ {
    proxy_pass http://127.0.0.1:8080/fossil/index.php;
  }

  location /fossil/ {
    # Do you really want to strip off /fossil here but not above?
    # The trailing / replaces /fossil/ with /
    proxy_pass http://127.0.0.1:8080/;
  }

  location /webmin/ {
    proxy_pass http://127.0.0.1:10000/;
  }

  .. add your other locations ...
}

Попробуйте конфигурацию ниже.

Обязательно посмотрите комментарии в location = /fossil/ раздел. Также имейте в виду, что запросы к / fossil / (что угодно) превращаются в / (что угодно), поэтому любые URL-адреса, возвращаемые в вашем контенте, должны быть / fossil / (что угодно), а не / (что угодно). При необходимости вы можете использовать sub_filter на стороне nginx, чтобы заменить / fossil / (что угодно) на / (что угодно), когда контент возвращается клиенту.

location = /fossil/ {
  # matches /fossil/ query only
  #
  # if Apache isn't configured to serve index.php as the index
  # for /fossil/ uncomment the below rewrite and remove or comment
  # the proxy_pass
  #
  # rewrite /fossil/ /fossil/index.php;
  proxy_pass http://127.0.0.1:8080;
}

location = /fossil/index.php {
  # matches /fossil/index.php query only
   proxy_pass http://127.0.0.1:8080;
}

location /fossil/ {
  # matches any query beginning with /fossil/
  proxy_pass http://127.0.0.1:8080/;
}

location /webmin/ {
  # matches any query beginning with /webmin/
  proxy_pass http://127.0.0.1:10000/;
}

location / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be
  # matched first.
  proxy_pass http://127.0.0.1:8001;
}

# locations to be handled by nginx go below