2010-04-16 3 views
6

Я планирую переместить весь мой статический контент в CDN, поэтому на моем сервере у меня осталось только динамическое содержимое. Теперь у меня Nginx настроен как обратный прокси-сервер для Apache. Статический запрос, который пришел туда, где прямо доставляется Nginx без необходимости перехода на Apache.Будет ли Nginx в качестве обратного прокси для справки Apache только для динамического контента

В этом случае Nginx обработал большую часть запроса, и я четко вижу необходимость Nginx.

Теперь, когда я переместил весь статический контент в другой домен, все еще нужно иметь nginx перед Apache. Потому что теперь все запросы по умолчанию являются динамическими запросами, и все идут в Apache.

Есть ли другие преимущества использования Nginx и Apache для динамического контента.

Мой динамический контент PHP/MySQL

Edit:

Чтобы было ясно: теперь у меня есть Nginx в качестве обратного прокси-сервера. Он обеспечивает статический и динамический контент. Но я перемещаю свои статические файлы в CDN. У меня тогда все еще нужен Nginx в моем домене.

+0

Как это связано с AppEngine? –

+0

Под «динамическим контентом» вы подразумеваете различный контент для каждого пользователя или только контент, созданный через PHP? Если одна и та же страница используется для нескольких пользователей, у вас может быть кеш Nginx на несколько секунд, что очень поможет при работе с большой нагрузкой. –

+0

Нет, страницы всегда разные. Думаю, нет необходимости в Nginx. –

ответ

2

Нет, вам больше не нужен nginx.

+0

Можете ли вы дать мне некоторое объяснение, почему это больше не нужно. Разве это не помогает Apache в любом случае. –

+2

Я в какой-то мере сфокусирован на вашем вопросе.Вы добавили nginx с единственной целью обслуживания статического контента. Вы больше не используете статический контент, но вам интересно, нужен ли вам nginx? Теперь это нецелесообразно, только накладные расходы. – goat

+1

Я подумал, что, возможно, это помогло и для динамического контента. –

0

Nginx перед является лучшим решением в случае, если вы используете Apache 1.3:

Nginx может легко обслуживать тысячи conections, но Apache не может

+0

Можете ли вы дать небольшую информацию о том, что вы имеете в виду. Потому что я поставляю только динамический контент через Apache. И я использую Apache 2 –

3

Что я сделал для одного веб-сайта:

  • установить Nginx в качестве обратного прокси перед Apache
  • настроить его так:
    • Запросы на страницы PHP (т. динамический контент) отправлено на Apache
    • Запросы на статические файлы (CSS, JS, ...) напрямую обслуживаются nginx.

Это без того, чтобы создать два домена: все на том же домене.


В общем, что я сделал это:

  • служат изображения с Nginx, без сжатия GZIP, с кэшированием
  • служат Js/CSS (то есть текстовые файлы) от Nginx, со сжатием Gzip , с кешированием
  • обслуживать некоторые другие расширения (pdf, exeutables, ...) Форма Nginx, без сжатия, без кэширования
  • передавать другие запросы к Apache


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

server { 
    listen 80; 
    server_name MY_DOMAIN_NAME; 

    access_log /var/log/nginx/MY_DOMAIN_NAME.access.log; 

    gzip on; 
    gzip_comp_level 2; 
    gzip_proxied any; 
    gzip_types text/plain text/html text/css text/xml application/xml application/xml+rss application/xml+atom text/javascript application/x-javascript application/javascript; 

    location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     #access_log off; 
     gzip off; 
     expires 1d; 
    } 
    location ~* ^.+\.(css|js)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     #access_log off; 
     expires 1d; 
    } 
    location ~* ^.+\.(pdf|gz|bz2|exe|rar|zip|7z)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     gzip off; 
    } 


    location/{ 
     proxy_pass http://MY_DOMAIN_NAME:8080; 
     proxy_redirect  off; 

     proxy_set_header Host    \$host; 
     proxy_set_header X-Real-IP  \$remote_addr; 
     proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 
     proxy_max_temp_file_size 0; 

     client_max_body_size  10m; 
     client_body_buffer_size 128k; 

     proxy_connect_timeout  90; 
     proxy_send_timeout   90; 
     proxy_read_timeout   90; 

     proxy_buffer_size   4k; 
     proxy_buffers    4 32k; 
     proxy_busy_buffers_size 64k; 
     proxy_temp_file_write_size 64k; 
    } 
} 


Теперь, почему такое вещь ?

Ну, Nginx предполагается:

  • нужно меньше памяти
  • быть быстрее
  • Уметь обрабатывать большее количество соединений

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

+0

Хорошо, может быть, мой вопрос был не таким ясным. Но это настройка, которую у меня есть сейчас. Это объясняется в моем первом абзаце. Но теперь я перемещаю свои статические файлы в другой домен. Таким образом, ресурсы, которые я использую, падают еще больше. Но то, что я хотел знать, - это то, что мне тогда еще нужен Nginx. –

2

Вы также можете использовать nginx для выгрузки обработки SSL из экземпляров apache.

Например, у нас есть один стек, настроенный с пулом nginx-> haproxy-> серверов Apache. nginx и haproxy живут вместе в кластере пульса и подают запросы в пул апачей на бэкэнде. Мы устанавливаем все сертификаты SSL на интерфейсе nginx.

14

Да, вы абсолютно нуждаетесь в nginx перед Apache. Apache использует 1 поток или процесс для каждого соединения. Каждый из этих потоков занимает память. Если у вас несколько сотен человек, посещающих ваш сайт, и у вас включен keepalive, каждый из этих браузеров будет поддерживать процесс apache или поток, занятый занимающей память на вашем сервере.

Вы можете обойти это, отключив keepalive на вашем сервере apache, но это замедляет производительность вашего веб-сайта, поскольку браузеры не могут повторно использовать соединения.

Поэтому вместо nginx вы используете обратный прокси-сервер с включенным keepalive. Он может поддерживать тысячи соединений с небольшим объемом памяти (около 8 мегабайт). Поскольку nginx является локальным для вашего сервера apache, каждый запрос занимает только дочерний элемент или поток apache в течение нескольких микросекунд. Это означает, что вы можете обслуживать тысячи людей, имеющих лишь крошечную часть процессов apache.

Также конфигурация nginx намного более гибкая, чем apache, и благодаря наличию на передней панели она дает вам большую гибкость.

+1

Это, безусловно, лучший ответ с технической точки зрения. Вы не хотите, чтобы pre-fork Apache обрабатывал ваши клиентские соединения, используя keep-alives. Конечно, вы можете отключить keep-alives, а затем все ваши пользователи будут жаловаться на то, что ваш сайт медленный (особенно далеко от пользователей). – diq

+0

Очень хороший ответ, но давайте не забывать все остальные лакомства, которые может сделать nginx. Одним из очень важных для этого вопроса было бы кэширование. Кэширование динамического контента будет иметь смысл (где это возможно). Так что да, nginx поможет ... много. –

Смежные вопросы