Как вы получаете два веб-сервера, работающие на одной машине?
Я хочу разместить пять сайтов на одном только что купленном VPS.
- PHP-сайт под названием domain.com
- сайт django под названием beta.domain.com
- phpmyadmin, который будет domain.com/phpmyadmin
- phppgadmin, который будет beta.domain.com/phppgadmin
- и еще один сайт 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 бок о бок).