Я раньше был в той же ситуации, предъявляя иск lighttpd рядом с апачем) для сокращения нагрузки на апача.
Лучше служить статическому содержанию с легким веб-сервером, поскольку требуется меньше ресурсов. Также должны упомянуть, который PHP требует, чтобы апач выполнил в предразветвленном режиме, который отключает апача от выполнения эффективно. Можно распределить загрузку в два, по-другому настроить веб-серверы, каждый обрабатывающий трафик, в котором это является лучшим.
Некоторые примечания реализации:
У Вас есть три опции:
Первое более быстро, второе требует меньшего количества конфигурации, третье похоже на мула.
Я не рассмотрел бы третью возможность на вашем месте, поскольку она идет с кошмаром конфигурации, также при неправильном конфигурировании чего-то в первом веб-сервере ничто не будет работать, и более трудно определить, где проблема.
В прошлом у меня должно было быть решение срочно, таким образом, я пошел с опцией 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
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]
Несколько дней назад я столкнулся с точно такой же проблемой. Я попробовал следующее в моей конфигурации 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>
Это работает как шарм, и вам не нужно больше нигде конфигурации или дополнительных модулей.
Лучше использовать для этого .htaccess
(если возможно), не нужно возиться с файлами конфигурации apache.
Добавьте эти строки в начало вашего .htaccess
.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Многие примеры работают с конкретными конфигурациями. Этот работает всегда, http://www.serveridol.com/2012/09/24/apache-forcing-all-url-to-https-on-www-domain/
Я думаю, что в прошлый раз, когда это случилось со мной, это могло быть что-то странное вроде 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>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1
У меня была такая же проблема с 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
Наша проблема заключалась в приоритете файла конфигурации. Короче говоря, HTTP VirtualHost в 000-default.conf
переопределял настройки, которые мы создали в нашем собственном файле конфигурации.
Это сбивает с толку любого, кто знает значение слова «по умолчанию», которое означает что-то, что используется только в том случае, если оно не определено где-либо еще. Мы по глупости предположили, что 000-default.conf
предоставит конфигурацию только в том случае, если она не определена в другом файле конфигурации.
Мы ошибались. Apache просто использует конфигурацию в первом файле, который он встречает, на основе имени файла в алфавитно-цифровом порядке. Он переходит к следующему файлу, если не может найти соответствующий VirtualHost в этом файле, что вызывает забавную путаницу, если вы не знаете, как это работает, но довольно аккуратно, как только вы это сделаете.