Как вы получаете два веб-сервера, работающие на одной машине?

Я хочу разместить пять сайтов на одном только что купленном VPS.

  1. PHP-сайт под названием domain.com
  2. сайт django под названием beta.domain.com
  3. phpmyadmin, который будет domain.com/phpmyadmin
  4. phppgadmin, который будет beta.domain.com/phppgadmin
  5. и еще один сайт Django под названием domain2.com

Все сайты django будут работать с mod_wsgi в apache, а все сайты PHP будут работать в nginx с fastcgi.

Я разработчик, а не системный администратор, поэтому мне сложно найти лучший способ сделать это. Причина, по которой я запускаю свой PHP из nginx, заключается в том, что я не хочу устанавливать mod_php, что позволяет мне использовать рабочий MPM в apache.

В настоящее время у меня nginx работает от порта 8080, а apache работает от порта 80. Когда я захожу на domain.com, он открывает сайт django. Когда я захожу на domain.com:8080, он открывает сайт PHP.

Как я уже говорил ранее, я не серверный человек, так что это заставляет мою голову крутиться. Есть ли способ получить доступ к материалам из nginx без указания номера порта в URL?

4 ответа

Решение

В основном, когда вы вводите "domain.com", веб-браузер фактически переходит на "domain.com:80" (порт 80 является портом HTTP по умолчанию).

Вы можете назначить только одно приложение для каждого порта на компьютере, поэтому только одно может прослушивать порт HTTP по умолчанию (80), а другому придется использовать другой порт.

Есть три способа обойти это:

1) правильным способом было бы использовать nginx в качестве основного веб-сервера (т. Е. Прослушивать http-порт 80 по умолчанию), настроить Apache на прослушивание другого порта (например, 8080), а затем настроить "обратный прокси-сервер" (Google здесь ваш друг). Это идеальная установка. Конфигурирование требует немного больше усилий, но существуют сотни полезных руководств.

2) использовать nginx для обслуживания сайтов django (если это возможно?)

3) быстрый и простой способ (хотя и не рекомендуется), предполагая, что сайты PHP предназначены только для веб-мастеров, а сайты django не будут нуждаться в https, вы можете настроить сайты PHP для работы по HTTPS. Таким образом, вы можете использовать Apache на порте 80 (по умолчанию HTTP) и nginx на порте 443 (по умолчанию HTTPS). Просто введите "https://" вместо "http://", и вы попадете на порт 443.

ИМО, нет необходимости запускать веб-приложения на обоих веб-серверах.

Из-за того, что я не могу найти хорошего и надежного автономного менеджера процессов fastcgi, я буду запускать как приложения Django, так и PHP на Apache, используя mod_wsgi для Django и mod_fcgid для приложений PHP. Единственное, что я мог бы рассмотреть, работая на отдельном веб-сервисе, это статические файлы. И nginx, и lighttpd превосходно справляются со статическими файлами. Под "статическими файлами" я подразумеваю не только изображения, таблицы стилей или javascript, но и статические HTML-страницы, генерируемые вашими веб-приложениями как часть механизма кэширования.

Что касается mod_php, это не понадобится, так как вы будете запускать PHP в режиме fastcgi с использованием mod_fcgid. Это также позволит вам использовать рабочий MPM (с резьбой).

Я надеюсь, что это дает вам некоторые советы.

Вам лучше использовать apache в качестве бэкэнда с прокси-сервером nginx на порту 80. Nginx может кэшировать страницы и перенаправлять определенные хосты на порт apache 8080.

location / {
    proxy_pass        http://localhost:8000;
    proxy_set_header  Host       $host;
    proxy_set_header  X-Real-IP  $remote_addr;
}

Разместите их на разных портах или IP-адресах. Пусть один сервер прослушивает 127.0.0.2 вместо 127.0.0.1, если это только для локальной разработки.

Для публичного обслуживания я бы предложил использовать fastcgi (fcgid, если используется apache) для всего. Там действительно нет необходимости во всех этих заменах, таких как wsgi; fastcgi великолепен и гораздо более гибок (например, вы можете запускать python2.5, python3.1 и ruby ​​бок о бок).

Другие вопросы по тегам