Apache http в HTTPS перенаправить с переписать

3746
Drew

Использование Apache 2.4 на OS X Yosemite. Нужно изменить этот виртуальный хост для того, чтобы перенаправить http://server.kibanaи http://www.server.kibanaнаhttps://server.kibana

Вот это Вхост:

<VirtualHost *:8443> ServerName www.server.kibana ServerAlias server.kibana ServerAdmin admin@server.kibana # RedirectPermanent http://server.kibana https://server.kibana # DocumentRoot /usr/local/var/www/kibana-4.0.2-darwin-x64/src/public SSLEngine on SSLCertificateFile "/usr/local/etc/apache2/2.4/ssl-keys/server.crt" SSLCertificateKeyFile "/usr/local/etc/apache2/2.4/ssl-keys/server.key" # # Proxy # ProxyRequests Off <Proxy *> Order Allow,Deny Allow from all AuthType Basic AuthName "Authenticated proxy" AuthUserFile /usr/local/etc/apache2/2.4/elastic.htpwd Require valid-user </Proxy> ProxyPass / http://127.0.0.1:5601 ProxyPassReverse / http://127.0.0.1:5601 RewriteEngine on RewriteCond %/% !-f RewriteRule .* http://127.0.0.1:5601% [P,QSA] ErrorLog /usr/local/var/log/apache2/kibana_error.log LogLevel warn CustomLog /usr/local/var/log/apache2/kibana_access.log combined </VirtualHost> 

Любые предложения, что добавить или как изменить RewriteRule и RewriteCond? Thanx!

0

2 ответа на вопрос

0
KenWeiLL

Попробуйте добавить этот код ниже «RewriteEngine on» и посмотрите, работает ли он.

RewriteCond % 80 RewriteRule ^(.*)$ https://server.kibana/$1 [R=301,L] 
это ничего не делает. Зачем мне на самом деле нужно проверять порт? Drew 8 лет назад 0
Обе ссылки являются http. http 80 порт доступа по умолчанию, будь то www или не www. Трафик, который идет от порта 80 или через доступ http, должен быть передан к https (через порт 443) с кодом выше. Вы пытались обновить кеш браузера перед его тестированием? KenWeiLL 8 лет назад 0
Я упомянул порт https в ``. Разве этого не должно быть достаточно? Мой апач слушает порт 8080 для http и 8443 для https, но брандмауэр pf перенаправляет весь трафик на порты 80 и 443. Какой порт мне следует написать в приведенном выше коде? Drew 8 лет назад 0
В любом случае, спасибо за подсказку, чтобы очистить кеш. Похоже, сценарий BillThor является единственным рабочим решением. Drew 8 лет назад 0
0
BillThor

Вы можете использовать это и переписать домен, на который выдан сертификат:

RewriteCond % !=on [NC] RewriteRule ^(.*) https://www.example.com$1 [R=301,L] 

Или используйте этот включаемый файл, где вы хотите применить SSL, при этом предоставляя HTTP-доступ к частям сервера.

# Script to require SSL  <If "% == 'on'"> SSLOptions +StrictRequire SSLRequireSSL </If> <Else> RedirectMatch permanent ^/?(.*) https://www.example.com/$1 </Else> 

Вы могли бы использовать %вместо www.example.com. Это хорошо работает с обычным сертификатом.

RewriteCond % !=on [NC] RewriteRule ^(.*) https://%$1 [R=301,L] 

Переменная %содержит имя хоста из запроса и может использоваться вместо www.exaxmple.com. Однако это не может быть имя хоста, которое соответствует сертификату. Он работает с многодоменными сертификатами.

RewriteCond % !=on [NC] RewriteRule ^(.*) https://%$1 [R=301,L] 

Добавление UseCanonicalName dnsв вашу конфигурацию UseCanonicalName dnsпредоставит SERVER_NAMEот DNS. Однако вам необходимо убедиться, что DNS предоставляет нужный домен. Если это работает, вы можете использовать одну и ту же конфигурацию для всех серверов. В качестве альтернативы, вы можете включить небольшой файл для конкретного сервера, чтобы указать имя сервера.

Вам нужно прослушивать разные порты для HTTP и HTTPS. Протестируйте каждый перед включением перезаписи. Это минимальная конфигурация для сайта, который прослушивает HTTP и HTTPS и перенаправляет все запросы на HTTPS. Для перенаправления потребуется порт, если используются нестандартные порты. Эта конфигурация основана на том, что доступ к каталогу настраивается вне определения виртуального хоста.

<VirtualHost *:80 *:443> ServerAdmin webmaster@systemajik.com DocumentRoot /var/www/ ServerName www.example.com ServerAlias example.com  SSLEngine On SSLCipherSuite HIGH:MEDIUM SSLCertificateFile /etc/ssl/certs/www.example.com-cert.pem SSLCertificateKeyFile /etc/ssl/private/www.example.com-key.pem SSLCACertificatePath /etc/ssl/certs/  RewriteEngine On RewriteCond % !=on [NC] RewriteRule ^(.*) https://%$1 [R=301,L]  </VirtualHost> 
Я добавил `RewriteCond% ! = На [NC]` `RewriteRule ^ / (. *) Https://127.0.0.1:5601/$1 [R = 301, L]`, и это не работает. Он все еще перенаправляет меня на "Работает" страницу по умолчанию apache (((и как попробовать файл? Drew 8 лет назад 0
Таким образом, единственным рабочим решением в моем случае является сценарий, который вы написали. Это работает (после того, как я очистил кеш браузера, но другого решения нет ((() Просто скажем, у меня есть два разных хоста, и я хочу сделать этот скрипт более универсальным (работающим для обоих хостов), как я должен изменить `https: // www.example.com / $ 1`? есть ли переменные типа `% ` или что-то еще? Или я должен создать для каждого виртуального хоста свой собственный скрипт? Это не очень хорошая идея, ты ((( Drew 8 лет назад 0
@Andrew Первый вариант работает для меня, но я использую желаемое имя хоста, а не IP-адрес. Я отредактировал ответ на работу, когда путь не указан. Я обновил ответ, чтобы предоставить параметры для установки имени хоста, BillThor 8 лет назад 0
Не могли бы вы написать примеры для всех трех случаев. Я перепробовал их все, но не уверен, правильно ли я это сделал ... Я всегда получаю одно и то же: 500 Internal Server Error Drew 8 лет назад 0
@ Андрей. Вы проверили журнал ошибок? У меня не будет времени проверить и обновить пост до сегодняшнего вечера. BillThor 8 лет назад 0
Пожалуйста, просто дай мне стартовую позу, когда у тебя будет время Drew 8 лет назад 0
При выполнении этой опции: «... используйте`% `вместо` www.example.com` с `+ StdEnvVars` для добавления в директиву` SSLOptions` ... "` единственная ошибка, которую получают, это ` 127.0.0.1 - - [19 / Jun / 2015: 15: 18: 40 -0700] "GET / HTTP / 1.1" 500 528 127.0.0.1 - - [19 / Jun / 2015: 15: 18: 40 -0700] " GET /favicon.ico HTTP / 1.1 "500 528` in ** access_log ** Drew 8 лет назад 0
И абсолютно то же самое с `% `. и, как я уже говорил, это в браузере: «Внутренняя ошибка сервера. Сервер обнаружил внутреннюю ошибку или неверную конфигурацию и не смог выполнить ваш запрос. Обратитесь к администратору сервера по адресу you@example.com, чтобы сообщить им о времени возникновения этой ошибки и действиях, которые вы выполнили непосредственно перед этой ошибкой. Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера. Drew 8 лет назад 0

Похожие вопросы