Слишком длинное имя рабочего хоста ProxyPass в apache2 (2.4.7 Ubuntu 14.04 LTS), как обойти это?

#apache #ubuntu #nginx #amazon-elb

#apache #ubuntu #nginx #amazon-elb

Вопрос:

Я должен настроить apache2 как обратный прокси-сервер из внутреннего ELB AWS. URL-адрес ELB составляет 85 символов. Настройка с помощью виртуального хоста завершается неудачно, так как выдает ошибку

 ProxyPass worker hostname (internal-elb-greater-than-64-character-url-that-fails-in-apache-aws.amazon.com) too long. 
  

Это работает очень хорошо, если URL-адрес ELB меньше или равен 64 символам.

Конфигурация выглядит следующим образом в файле /etc/apache/sites-enabled/000-sites.conf (фактический ELB и имя веб-сайта заменены)

 <VirtualHost *:80>
    ProxyPreserveHost On
    ServerName www.mydomain.com

    ServerAdmin me@mydomain.com
    DocumentRoot /var/www/html

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker.*
    RewriteRule . https://www.mydomain.com%{REQUEST_URI} [R=301,L]

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPass /test/ http://localhost:8080/
    ProxyPassReverse /test/ http://localhost:8080/

    ProxyPass / http://internal-elb-greater-than-64-character-url-that-fails-in-apache-aws.amazon.com/
    ProxyPassReverse / http://internal-elb-greater-than-64-character-url-that-fails-in-apache-aws.amazon.com/
</VirtualHost>
  

Я смог настроить то же самое с nginx со следующей конфигурацией в файле /etc/nginx/nginx.conf

 server {
    listen       80;
    server_name  localhost;
    root         /usr/share/nginx/html;

    #access_log  /var/log/nginx/host.access.log  main;
    location /test/ {
            if ( $http_x_forwarded_proto != 'https' ){
                    rewrite ^ https://www.mydomain.com$request_uri? permanent;
            }
            proxy_pass http://localhost:8080/;
    }

    location / {
            if ( $http_x_forwarded_proto != 'https' ){
                    rewrite ^ https://www.mydomain.com$request_uri? permanent;
            }
            proxy_pass http://internal-elb-greater-than-64-character-url-that-fails-in-apache-aws.amazon.com/;
    }

    location /elb-status {
            return 200;
    }

    # redirect server error pages to the static page /40x.html
    #
    error_page  404              /404.html;
    location = /40x.html {
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    }
}
  

Nginx работает по желанию — с измененным URL-адресом PING для проверки работоспособности.

Мне было интересно, какой может быть эквивалентная конфигурация в apache2 (2.4.7 Ubuntu 14.0 LTS). Я попробовал это на apache2.4.9 в Fedora, все тот же результат.

Как я могу заставить apache2 работать, поскольку мы не рассматриваем nginx перед внутренним балансировщиком нагрузки — это не мое решение.

Ответ №1:

Вам нужно использовать mod_rewrite:

https://issues.apache.org/bugzilla/show_bug.cgi?id=53218

О перезаписях: http://httpd.apache.org/docs/2.4/rewrite /

Итак, мое предположение (не проверено):

 RewriteRule ^/(.*)$ http://internal-elb-greater-than-64-character-url-that-fails-in-apache-aws.amazon.com/$1 [P]
  

Комментарии:

1. Не будет ли это перенаправление? Viljo Viitanen

2. @RuanCarlos нет. Смотрите Документацию по перезаписи, флаг [P] = прокси.

3. Я видел, но когда я попробовал перенаправить, только прокси-сервер, когда я подключаю виртуальный сервер напрямую. Но спасибо

Ответ №2:

Если ваш URL-адрес слишком длинный, пожалуйста, используйте вместо него Alise, у меня это сработало. В вашем файле mod_proxy.conf:

Алиса http://dummy:8009 http://yourlongoriginalurl:8009

Proxypass / http://dummy:8009

Комментарии:

1. вы имели в виду «псевдоним»?