Размещение приложения Faceook и веб-сайта на одном сервере с Apahe и Tomcat - PullRequest
0 голосов
/ 01 июля 2018

У меня есть приложение Facebook, размещенное на сервере с использованием tomcat. У меня также есть сервер Apache на той же машине, где я обрабатываю входящие запросы и перенаправляю их, основываясь на том, подходит ли ему безопасный порт (SLL 443) или 80 (стандартный порт HTTP). У меня есть только один домен, который является www.myfacebookapp.net.

Проблема начинается, когда мне нужно разместить приложение и веб-сайт на одном сервере. Обычно это не должно быть проблемой, однако и мое приложение, и веб-сайт должны поддерживать SSL (Facebook сделал это обязательным, поскольку он не принимает любое соединение, которое не является безопасным (не https))

Ниже приведена сводная информация о моей конфигурации

  1. У меня есть только один домен www.yarimelma.net
  2. У меня есть сертификат SSL, который поддерживает только один домен.
  3. Я предоставил содержимое статической веб-страницы в /var/www/http/public_html/index.html
  4. Мой экземпляр tomcat работает на 8080, а мой путь к приложению - www.myfacebookapp.net/myApp
  5. Поэтому, когда я запускаю свое приложение на Facebook, оно отправляет запрос POST на URL: https://www.myfacebookapp.net/myApp
  6. Я настроил свой экземпляр apache с виртуальными хостами так, чтобы

     VirtualHost1 (*: 80) 
          ServerName www.myfacebookapp.net
          DocumentRoot /var/www/http/public_html/
     VirtualHost1 (*: 443)  #direct to tomcat
          ServerName www.myfacebookapp.net
          DocumentRoot /var/www/http/public_html/ ProxyPreserveHost On
          ProxyPass / http://127.0.0.1:8080/ 
          ProxyPassReverse / http://127.0.0.1:8080/
          ServerName www.myfacebookapp.net
          SSLEngine on
          #other ssl related config
    

Он отлично работает с моим приложением facebook, а также с веб-страницей, когда я захожу на мою веб-страницу с 80 (http://www.myfacebookapp.net)). Однако я должен также поддерживать свою веб-страницу с поддержкой соединений https. К сожалению, я не могу добиться этого с этой конфигурацией. Итак, что я хотел бы сделать,

  • Доступ к веб-странице по https, так что https://www.myfacebookapp.net
  • Кроме того, сохраняйте перенаправление tomcat с защищенного порта при обращении к нему по URL-адресу https://www.myfacebookapp.net/myApp (который активирует Facebook для отображения фрейма приложения Facebook)

Можно ли добиться этого без каких-либо дополнительных доменных имен и SSL-сертификата?

Мне не удалось найти такую ​​конфигурацию, чтобы

  1. если запрос поступил с https://www.myfacebookapp.net/myApp *: 443 ->, затем перенаправить на http://127.0.0.1:8080 (приложение tomcat to server)
  2. Если запрос поступил от https://www.myfacebookapp.net ->, затем перенаправить на / var / www / html / public_html (для обслуживания веб-страницы)

В документации Apache говорится, что я не могу определить два виртуальных хоста для 443 (https) и одного домена.

Как правило, я хочу разместить свое приложение Facebook и веб-сайт на одном сервере, и оба должны быть доступны через https.

Кто-нибудь знает какое-либо решение по этому поводу?

Спасибо /

1 Ответ

0 голосов
/ 01 июля 2018

Вам нужен только один VirtualHost на порту 443, и выполните внутри него условное перенаправление для компонента Tomcat. Вот так:

Listen *:443
<VirtualHost *:443>
    ServerName www.example.com
    ServerAlias example.com

    LogLevel debug
    ErrorLog "logs/443-error_log"
    CustomLog "logs/443-access_log" combined

    DocumentRoot /var/www/http/public_html

    SSLEngine On
    # OTHER SSL RELATED CONFIGURATIONS

    ProxyPreserveHost On
    ProxyPass        /myapp/ http://127.0.0.1:8080/myapp/
    ProxyPassReverse /myapp/ http://127.0.0.1:8080/myapp/

</VirtualHost>

Некоторые детали:

  • ServerAlias ​​действителен, только если существует ваш домен без www, удалите его в противном случае.
  • Мне нравится разделять журналы для каждого VirtualHost. Он дает вам больше контроля над LogLevel и его легче отлаживать, если у вас их много.
  • Поскольку ProxyPass настроен для /myapp, все остальные запросы будут обрабатываться из статических файлов в вашем каталоге DocumentRoot.

Кстати, причина, по которой вы не можете запустить 2 VirtualHosts с SSL в одном домене, заключается в том, что согласование сертификата между браузером и Apache выполняется до Apache знает, какой домен запрашивает браузер. Когда он видит запрос на порту 443, он берет первый VirtualHost, если находит и использует этот сертификат.

...