Назад | Перейти на главную страницу

Приложение работает в подкаталоге, но требует доступа к порту 8080, не может определить обратный прокси

Я новичок в управлении сервером, так что терпите меня.

У меня есть облачный сервер Microsoft Azure (не по выбору) под управлением Ubuntu 16.04 и Apache 2.4.18. У меня есть несколько приложений (/ omeka, / wordpress и т. Д.), Работающих в веб-подкаталогах, к которым я могу получить доступ через любой веб-браузер и не требует каких-либо конкретных прокси-серверов или пересылки портов. Я пытаюсь запустить другое приложение (ArchivesSpace) в другом веб-подкаталоге (/ archivesspace). Приложение имеет несколько точек взаимодействия на разных портах:

localhost: 8089 / - бэкэнд
localhost: 8080 / - штатный интерфейс
localhost: 8081 / - публичный интерфейс
localhost: 8090 / - консоль администратора Solr

Я успешно установил AS. Я могу сказать, потому что при подключении к серверу через SSH я могу использовать $ curl localhost:8080 а на выходе получается HTML-код домашней страницы AS.

Мой netstat показывает:

Proto  Recv-Q  Send-Q  Local Address  Foreign Address  State   PID
tcp6        0       0  :::8080        :::*             LISTEN  1985/java
tcp6        0       0  :::8081        :::*             LISTEN  1985/java
tcp6        0       0  :::8089        :::*             LISTEN  1985/java
tcp6        0       0  :::8090        :::*             LISTEN  1985/java

Я не могу получить доступ ни к одному из этих портов из браузера. Я всегда получаю ERR_EMPTY_RESPONSE ошибка.

Я пробовал поговорить об этом с людьми ArchivesSpace, и их последнее слово было в основном «настроить Apache как обратный прокси». Итак, я пробовал это делать, и мне не повезло. Я надеюсь, что здесь кто-нибудь поможет. Вот что у меня есть для обратного прокси в моем файле 000-default.conf, я просто пытаюсь заставить работать один из портов (8080).

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
</VirtualHost>

Listen 8080

<VirtualHost *:8080>
    ProxyHTMLStripComments on
    ProxyRequests off
    SetOutputFilter proxy-html
    ProxyHTMLDoctype XHTML
    ProxyPreserveHost On

    ServerName http://server.net/archivesspace

<Location />
    ProxyPass http://server.net:8080
    ProxyPassReverse http://server.net:8080
    Order allow,deny
    Allow from all
</Location>
</VirtualHost>

Я включил все эти моды Apache: proxy, proxy_ajp, proxy_http, rewrite, deflate, headers, proxy_balancer, proxy_connect, proxy_html

Я явно что-то не так делаю, просто понятия не имею что. Я также даже не совсем уверен, какие URL-адреса мне нужны. Я предполагаю, что server.net:8081 (или, может быть, server.net:8081/archivesspace?) Должен привести вас к общедоступному интерфейсу AS. В идеале это будет server.net/archivesspace. Верный ли обратный прокси-сервер?

Инструкции для apache-2.4 тег сказать, чтобы опубликовать вывод apache2ctl -S, так вот это.

[Wed Feb 15 16:34:59.401845 2017] [proxy_html:notice] [pid 3722] AH01425: I18n support in mod_proxy_html requires mod_xml2enc. Without it, non-ASCII characters in proxied pages are likely to display incorrectly.
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.2.0.4. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
*:80                   10.2.0.4 (/etc/apache2/sites-enabled/000-default.conf:1)
*:8080                 server.net/archivesspace (/etc/apache2/sites-enabled/000-default.conf:34)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex proxy: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl 
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33 not_used
Group: name="www-data" id=33 not_used

Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию, которая помогла бы определить мою проблему. Заранее благодарим за любые рекомендации, которые вы можете предложить.

Большое спасибо за это, Патрик! Это сработало. Я удалил все, кроме VirtualHost *:80 блок и добавил в него:

<Location /archivesspace>
    ProxyPass http://localhost:8081
    ProxyPassReverse http://localhost:8081
    Order allow,deny
    Allow from all
</Location>

<Location /archivesspace/admin>
    ProxyPass http://localhost:8080
    ProxyPassReverse http://localhost:8080
    Order allow,deny
    Allow from all
</Location>

Также обратите внимание, что порядок этих двух Location блоки важно. Если 8080 / admin указан первым, порт 8081 должен иметь подкаталог ниже / archivesspace (то есть / archivesspace / home), что не идеально. Если сначала указать 8081, будет доступен только / archivesspace.

Однако теперь, когда я могу получить доступ к страницам через браузер, похоже, что все CSS, изображения и тому подобное отсутствуют. Но это еще одна проблема, по которой мне, возможно, придется начать новый пост, если я не смогу это понять.

ОБНОВЛЕНИЕ: разобрался с материалом CSS. В файле config / config.rb необходимо изменить следующее:

AppConfig[:frontend_proxy_url] = "http://server.net/archivesspace/admin"
AppConfig[:public_proxy_url] = "http://server.net/archivesspace"

Говоря VirtualHost *:8080 вы говорите Apache прослушивать этот порт, что невозможно, поскольку ваше приложение Java уже прослушивает его. Вместо этого вам нужно в своем VirtualHost *:80 блок для добавления строк, таких как <Location /ArchivesSpaces/staff> с ProxyPass / ProxyPassReverse на ваш сервер (или localhost): 8080 внутри блока Location и таким же образом для остальных 3 портов. Вы можете выбрать все, что хотите в пути к местоположению.