Вопрос или проблема
Я пытаюсь заменить Apache на httpd от OpenBSD, но не могу разобраться, что делать с моими директивами ProxyPass.
В конфигурации Apache это выглядит так:
ProxyPass /someurl http://192.168.123.123/someotherurl
ProxyPassReverse /someurl http://192.168.123.123/someotherurl
- Я думал, что для этого мне следует использовать relayd, но как мне сделать перенаправление URL?
- Мне нужно настроить relayd, чтобы он слушал на порту 80 и перенаправлял некоторые запросы на разные внутренние машины, а остальные на httpd на localhost?
Отличный вопрос! Новый httpd
от OpenBSD не является веб-сервером с полным набором функций, и он не предназначен для этого. Что касается relayd
, который был предшественником httpd
, я не думаю, что он также имеет возможность выполнять то, что вам нужно.
Лучшей заменой Apache без исключений все еще является nginx.
Он легко доступен в дереве портов OpenBSD как www/nginx
и может быть легко установлен как предварительно скомпилированный пакет с помощью pkg_add(1)
— doas pkg_add nginx
.
После установки nginx, вы бы использовали директиву proxy_pass
, и она, вероятно, будет выглядеть так:
location /someurl {
proxy_pass http://192.168.123.123/someotherurl;
}
Что касается ProxyPassReverse
, у nginx есть более подходящее название для этого — proxy_redirect
, и значение по умолчанию default
должно уже быть достаточно для ваших нужд (если ваши директивы ProxyPassReverse
и ProxyPass
имели одно и то же значение). Удачи!
Ответ или решение
Для замены функциональности ProxyPass
из Apache на OpenBSD 5.8, вы можете использовать веб-сервер Nginx, который предлагает гораздо более широкий функционал по сравнению с httpd
в OpenBSD.
Установка Nginx на OpenBSD
- Установите Nginx:
Выполните команду:doas pkg_add nginx
Конфигурация проксирования
-
Настройте конфигурацию Nginx:
Отредактируйте файл конфигурации Nginx, который обычно находится по пути/etc/nginx/nginx.conf
или в отдельной директории, например,/etc/nginx/conf.d/
.Пример конфигурации, аналогичной
ProxyPass
из Apache:server { listen 80; server_name ваш_домен.com; location /someurl { proxy_pass http://192.168.123.123/someotherurl; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Здесь
location /someurl
определяет путь, который будет проксироваться. Директиваproxy_pass
указывает целевой URL. Дополнительные заголовки помогают обеспечить передачу информации о клиенте и необходимости протокола.
Обработка обратного проксирования
-
Управление редиректами:
Для аналогии сProxyPassReverse
в Nginx используется директиваproxy_redirect
. Если исходный и целевой адреса совпадают, то можно просто установить значение по умолчанию:location /someurl { proxy_pass http://192.168.123.123/someotherurl; proxy_redirect http://192.168.123.123/someotherurl /someurl; }
Этот фрагмент говорит Nginx автоматически изменять заголовки Location и Refresh, чтобы они указывали на ваш проксированный путь.
Запуск и тестирование
-
Запустите Nginx:
После того как конфигурация внесена, запустите службу Nginx:doas rcctl start nginx
-
Проверьте конфигурацию:
Убедитесь, что конфигурация Nginx корректна:doas nginx -t
Если проверка прошла успешно, откройте в веб-браузере
http://ваш_домен.com/someurl
для тестирования работы прокси.
Заключение
Используя Nginx в качестве обратного прокси на OpenBSD 5.8, вы получите функциональность, сопоставимую с Apache ProxyPass. В дополнение к этому, Nginx предлагает высокую производительность и масштабируемость, что делает его предпочтительным выбором для многих сценариев.