Вопрос или проблема
У меня есть следующий рабочий конфигурационный файл обратного прокси nginx
server {
listen 192.168.100.7:443;
server_name mysite.internal;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
proxy_pass http://192.168.100.8;
proxy_http_version 1.1;
}
ssl on;
ssl_certificate /etc/nginx/certs/mycert.cer;
ssl_certificate_key /etc/nginx/certs/mycert.key;
ssl_session_timeout 5m;
}
и я пытаюсь перенести его под apache httpd, но у меня не получается заставить его работать
Вы можете использовать следующую конфигурацию Apache для обратного прокси.
<VirtualHost *:443>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1/
RequestHeader set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"
DocumentRoot /var/www/html/
ServerName www.yourdomain.com
ErrorLog logs/yourdomain.com-error.log
CustomLog logs/yourdomain.com-access.log common
SSLEngine on
<Directory /var/www/html/>
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/DigiCertCA.crt
</VirtualHost>
.
Ответ или решение
Конвертация конфигурации обратного прокси-сервера из Nginx в Apache может быть немного сложной задачей, но с правильным пониманием и вниманием к деталям, эту проблему можно успешно решить. Рассмотрим ваш текущий конфигурационный файл Nginx и преобразуем его в эквивалентную конфигурацию для Apache.
Конфигурация Nginx
Ваш существующий конфигурационный файл Nginx выглядит следующим образом:
server {
listen 192.168.100.7:443;
server_name mysite.internal;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
proxy_pass http://192.168.100.8;
proxy_http_version 1.1;
}
ssl on;
ssl_certificate /etc/nginx/certs/mycert.cer;
ssl_certificate_key /etc/nginx/certs/mycert.key;
ssl_session_timeout 5m;
}
Преобразованная конфигурация для Apache
Для Apache httpd эквивалентная конфигурация будет следующей:
<VirtualHost 192.168.100.7:443>
ServerName mysite.internal
# Настройка обратного проксирования
ProxyPreserveHost On
ProxyPass / http://192.168.100.8/
ProxyPassReverse / http://192.168.100.8/
# Настройки заголовков
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}s"
RequestHeader set Host "%{HTTP_HOST}s"
RequestHeader set X-Forwarded-Proto "https"
# Настройки SSL
SSLEngine on
SSLCertificateFile /etc/nginx/certs/mycert.cer
SSLCertificateKeyFile /etc/nginx/certs/mycert.key
# Логи
ErrorLog ${APACHE_LOG_DIR}/mysite_error.log
CustomLog ${APACHE_LOG_DIR}/mysite_access.log combined
# Настройки директории
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
Разбор конфигурации
-
Аналогия listen и ServerName: Строка
listen 192.168.100.7:443;
из Nginx соответствуетVirtualHost 192.168.100.7:443>
в Apache, где вы задаете IP и порт для прослушивания. -
Настройки обратного прокси-сервера:
- В Apache используются директивы
ProxyPass
иProxyPassReverse
для перенаправления запросов к целевому серверу, аналогичноproxy_pass
в Nginx. - Включение
ProxyPreserveHost On
в Apache аналогично использованиюproxy_set_header Host
в Nginx для передачи исходного имени хоста.
- В Apache используются директивы
-
Заголовки:
- В Apache заголовки указываются с помощью
RequestHeader set
, что эквивалентноproxy_set_header
в Nginx.
- В Apache заголовки указываются с помощью
-
SSL-конфигурация:
- Для SSL используйте директивы
SSLCertificateFile
иSSLCertificateKeyFile
в Apache, которые должны указывать на те же файлы сертификатов, что и в Nginx.
- Для SSL используйте директивы
-
Логирование и директории:
- Указывайте пути для логов через
ErrorLog
иCustomLog
. Настройки директории указываются с помощью секции<Directory>
.
- Указывайте пути для логов через
Заключение
Важно убедиться, что у вас установлены все необходимые модули Apache, такие как mod_proxy
и mod_ssl
. Подробности по установке и активации модулей можно найти в документации Apache. После внесения изменений в конфигурацию, перезапустите службу Apache для применения настроек.