Перенаправление Apache от http до https, не работающего

Я раньше был в той же ситуации, предъявляя иск lighttpd рядом с апачем) для сокращения нагрузки на апача.

Лучше служить статическому содержанию с легким веб-сервером, поскольку требуется меньше ресурсов. Также должны упомянуть, который PHP требует, чтобы апач выполнил в предразветвленном режиме, который отключает апача от выполнения эффективно. Можно распределить загрузку в два, по-другому настроить веб-серверы, каждый обрабатывающий трафик, в котором это является лучшим.

Некоторые примечания реализации:

У Вас есть три опции:

  1. измените свой код и трафик сегмента в уровне IP
  2. не изменяйте свой код и трафик сегмента в приложении (http) слой
  3. заставьте один из веб-серверов передавать запросы, прибывающие в другой веб-сервер для фактического обслуживания

Первое более быстро, второе требует меньшего количества конфигурации, третье похоже на мула.

Я не рассмотрел бы третью возможность на вашем месте, поскольку она идет с кошмаром конфигурации, также при неправильном конфигурировании чего-то в первом веб-сервере ничто не будет работать, и более трудно определить, где проблема.

В прошлом у меня должно было быть решение срочно, таким образом, я пошел с опцией 2 и использовал обратный прокси, названный фунтом, чтобы сегментировать запросы на статический / динамический контент и распределить загрузку в два различных веб-сервера.

Хотя это работает, это требует активно контроля http содержания, которое берет его сбор на производительности (дополнительный демон, работающий).

С опцией 2 можно получить лучшую производительность с использованием дополнительного IP для статического содержания (static.domain.org) и добраться, клиенты обращаются к этому static.domain.org для содержания. Это все еще потребует обратного прокси, но прокси не должен проверять Хост: заголовок в любом из запросов, таким образом, это будет более быстро.

вот отрывок конфигурации фунта для Вашей ссылки:

ListenHTTP 
        Address 195.175.71.17
        Port 80
        Client 30
        RewriteLocation 2

        Service
                HeadRequire "^[Hh]ost:\s*www.nasa.gov$"
                URL "^/static/content"
                BackEnd
                        Address 127.0.0.1
                        Port 81
                        TimeOut 300
                End
        End
        Service
                HeadRequire "^[Hh]ost:\s*www.nasa.gov$"
                BackEnd
                        Address 127.0.0.1
                        Port 80
                        TimeOut 300
                End
        End
ListenHTTP 

3
задан 23 August 2012 в 06:32
8 ответов

Red Hat-подобные дистрибутивы (Centos, SL) поставляются с файлом

/ etc / sysconfig / i18n

, который по умолчанию (ну, в моем случае) содержит

LANG = "en_GB"

SYSFONT = "latarcyrheb-sun16"

И вышеупомянутый файл получен из /etc/profile.d/lang.sh

В моем случае я хотел изменить en_GB.UTF-8 на en_GB.iso88591 поэтому я обнаружил, что «правильный» способ сделать это - добавить в / etc / sysconfig / i18n

CHARSET = "iso8895-1"

После того, как это будет сделано, в локали для каждой учетной записи в системе должно быть указано:

меня @ wark: ~ $ locale

LANG = en_GB.UTF-8

LC_CTYPE = "en_GB.iso88591"

LC_NUMERIC = "en_GB.iso88591"

LC_TIME = "en_GB.iso88591"

LC_COLLATE = " en_GB.iso88591 "

LC_MONETARY =" en_GB.iso88591 "

LC_MESSAGES =" en_GB.iso88591 "

LC_PAPER =" en_GB.iso88591 "

LC_NAME =" en_GB.iso88591AD "

en_GB.iso88591 "

LC_TELEPHONE =" en_GB.iso88591 "

LC_MEASUREMENT =" en_GB.iso88591 "

LC_IDENTIFICATION =" en_GB.iso88591 "[--- 1222] LC_ALL = en_GB.iso88591 [--- 48981-

Многие примеры работают с конкретными конфигурациями. Этот всегда работает, независимо от того, какую конфигурацию использует ваш сервер Apache:

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]
15
ответ дан 3 December 2019 в 04:37

Несколько дней назад я столкнулся с точно такой же проблемой. Я попробовал следующее в моей конфигурации VirtualHost (применимо для http-порта 80) в файле apache httpd.conf, который работал.

<Virtualhost *:80>
ServerAdmin webmaster@site.com
ServerName site.com
ServerAlias site.com www.site.com

RedirectMatch permanent ^(.*)$ https://www.site.com$1
</Virtualhost>

Это работает как шарм, и вам не нужно больше нигде конфигурации или дополнительных модулей.

11
ответ дан 3 December 2019 в 04:37

Лучше использовать для этого .htaccess (если возможно), не нужно возиться с файлами конфигурации apache. Добавьте эти строки в начало вашего .htaccess .

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
1
ответ дан 3 December 2019 в 04:37

Многие примеры работают с конкретными конфигурациями. Этот работает всегда, http://www.serveridol.com/2012/09/24/apache-forcing-all-url-to-https-on-www-domain/

0
ответ дан 3 December 2019 в 04:37

Я думаю, что в прошлый раз, когда это случилось со мной, это могло быть что-то странное вроде NameVirtualHost *: 80 / NameVirtualHost * : 443 и / или Listen 80 / Listen 443 находились где-то в другом месте, кроме ports.conf для apache2.

Вот что у меня в VirtualHost для перенаправления на https для все страницы, кроме прессы (было видео, которое не могло быть обслужено https, поэтому пришлось перенаправлять обратно на http, иначе люди получали бы неприятные предупреждения о том, что страница небезопасна):

<VirtualHost *:80>
    ServerName example.com
    RewriteEngine On

    RewriteCond %{REQUEST_URI} !^/press/.*
    RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NC]
</VirtualHost>
0
ответ дан 3 December 2019 в 04:37
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1
-2
ответ дан 3 December 2019 в 04:37

У меня была такая же проблема с apache 2.4 на centos 7, и исправление, которое сработало для меня без использования RewriteEngine, заключалось в добавлении : 443 в директиву ServerName под VirtualHost для https.

<VirtualHost 123.45.67.890:443>
DocumentRoot "/opt/www/example-docroot"
ServerName example.com:443
1
ответ дан 3 December 2019 в 04:37

Наша проблема заключалась в приоритете файла конфигурации. Короче говоря, HTTP VirtualHost в 000-default.conf переопределял настройки, которые мы создали в нашем собственном файле конфигурации.

Это сбивает с толку любого, кто знает значение слова «по умолчанию», которое означает что-то, что используется только в том случае, если оно не определено где-либо еще. Мы по глупости предположили, что 000-default.conf предоставит конфигурацию только в том случае, если она не определена в другом файле конфигурации.

Мы ошибались. Apache просто использует конфигурацию в первом файле, который он встречает, на основе имени файла в алфавитно-цифровом порядке. Он переходит к следующему файлу, если не может найти соответствующий VirtualHost в этом файле, что вызывает забавную путаницу, если вы не знаете, как это работает, но довольно аккуратно, как только вы это сделаете.

0
ответ дан 15 July 2021 в 22:46

Теги

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