Создайте сервер в Linux KVM

На самом деле способ, которым PHP обрабатывает сессии, намного лучше, чем Ваш пример Сервлета. Позвольте мне объяснить.

С PHP (по умолчанию) сессия представлена файлом в файловой системе. Когда Вы звоните session_start(), это проверяет, чтобы видеть, существует ли файл и загружает его раз так. В противном случае это создает один и затем блокирует его. Это обладает двумя основными преимуществами. Во-первых, это, позволяет многим процессам на том же сервере "совместно использовать" данные сессии. Во-вторых, если кто-то будет делать попытку к DDOS Вашего сайта, то данные сессии не удалят его (Ваше узкое место будет в другом месте, Вы не должны волноваться о свопинге или исчерпывании пространства памяти, потому что у Вас есть много сессий).

Способы сериализации/десериализации в php на самом деле довольно эффективны, поскольку они записаны в C и следовательно скомпилированы. Таким образом, это не узкое место. Причину сессии PHP часто называют evil это, они блокируются. При открытии файла сессии это получает монопольную блокировку на файле (или блоки, пока это не сделано). Это сохраняет ту блокировку, пока сеанс не закрыт (Или к концу сценария, или к session_write_close(). Это желательно, так как это предотвращает проблемы параллелизма. Но поймите, что, если Вы имеете длительный запрос и пытаетесь сделать другой, в то время как он выполняется, Вы заблокируетесь.

Теперь, истинная красота метода PHP, то, что можно заменить обработчик сессий обработчиком сессий пространства пользователя (Храните данные сессии в базе данных, memcached, дб NoSQL, и т.д.). Почему это хорошо? Поскольку затем с тем же самым кодом можно мигрировать от единственного сервера до многих. Все, что необходимо сделать, звонить session_set_save_handler()...

Теперь, что касается Ваш "Я не хочу повторно запрашивать базу данных по каждому запросу", спрашиваю я почему нет? Все, что Вы делаете, является простым поиском PK. Если Вы действительно не искажаете схему, даже обновление/запись/операторы удаления должно быть ДЕЙСТВИТЕЛЬНО эффективным. Я предложил бы идти с таблицей Memory (в MySQL), поскольку это быстрее, и Вы действительно не заботитесь о поддержании данных, если сервер перезапускает. Если Вы - то, что соответствующий, установите memcached и позвольте ему обработать устройство хранения данных сессий (таким образом, Вам не нужен SQL)...

1
задан 19 March 2012 в 19:01
4 ответа

Если я правильно понял ваш вопрос, вам понадобятся 2 службы.

  1. прокси ssh
  2. веб-прокси (я рекомендую использовать для этого nginx / HA-Proxy).

Прокси-служба ssh достигается за счет использования ключей SSH и директивы command = "", у вас есть ключ auth на вашем прокси-сервере с / bin / false в качестве оболочки, затем определите command = "ssh user @ real- server "ssh-rsa ... line.

с использованием веб-прокси для передачи соединений на основе имени хоста / uri соответствующему бэкэнду.

Это далеко не красиво, но возможно, это будет намного проще просто выделите несколько общедоступных IP-адресов самой машине, если они вообще доступны.

2
ответ дан 3 December 2019 в 17:16

На самом деле это не так уж сложно ... вы просите своего провайдера установить соединение бизнес-класса с несколькими IP-адресами.

В противном случае вам придется давать им разные имена хостов, и вы доставляете гостей на их сайт через директивы virtualhost, а не через виртуальные машины.

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

1
ответ дан 3 December 2019 в 17:16

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

Ссылка на HowTo: http://www.apachetutor.org/admin/reverseproxies

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

Но будьте осторожны, это работает только для HTTP. Существует расширение для HTTPS, которое можно использовать для достижения того же, но поддержка браузеров AFAIK плохая.

Вам также нужна простая сеть только для хоста. Таким образом, вы можете перенаправить порты SSH на внутренние IP-адреса с помощью iptables и использовать HTTP с обратным прокси.

Кроме того, я думаю, что то, что вы хотите достичь, глупо. Не раздайте root своим пользователям и используйте какую-либо панель управления массовым хостингом. Это способ наименьшей работы :)

Надеюсь, это поможет :)

1
ответ дан 3 December 2019 в 17:16

Если я правильно понимаю, вы создали виртуальную машину KVM на физическом сервере и предоставили пользователям root-доступ к виртуальной машине?

Находится ли физический сервер в помещении вашей компании или за пределами площадки в центре обработки данных?

Если это полностью под вашим контролем, вы можете использовать мостовую сеть KVM, чтобы предоставить каждому KVM выделенный IP-адрес. Настройка мостов зависит от версии Linux.

Вот как настроить мосты для KVM в CentOS / Redhat .

Мостовое соединение также возможно, если ваш сервер находится в Colo / Off site.

Если вы не можете используйте мост, другой вариант - использовать NAT, что IMO громоздко.

1
ответ дан 3 December 2019 в 17:16

Теги

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