У меня есть несколько HTTP-сервисов, работающих на одном компьютере, на разных портах. Я хотел бы использовать nginx в качестве обратного прокси, но, похоже, я не могу правильно настроить свою настройку.
Я бы хотел следующее:
/fossil/
==> http://127.0.0.1:8080/fossil/index.php
/fossil/(whatever)
==> http://127.0.0.1:8080/(whatever)
/webmin/
==> http://127.0.0.1:10000/
http://127.0.0.1:8001
Кажется, проблемы вызывают первые два; Я хочу все под /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