Как запустить Nexus Sonatype на порту 80?

У меня есть сервер федора. Я установил Tomcat через менеджер пакетов yum. Затем я развернул войну нексуса в папке веб-приложений. Я попытался использовать jsvc для запуска сервера на порту 80, и это не сработало. Я видел, что вы также можете использовать переадресацию портов. Какая лучшая альтернатива?

редактировать 1: httpd

Я подписался на 3.8. Запуск Nexus за прокси из документа sonatype, и я немного запутался. Я установил httpd, и у меня следующая конфигурация, где example.com — мой домен.

/etc/httpd/conf.d/nexus.conf

NameVirtualHost *:80

<VirtualHost *:80>

  ServerName example.com
  ProxyRequests Off

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass /nexus/ http://localhost:8081/nexus/
  ProxyPassReverse /nexus/ http://localhost:8081/nexus/
  ProxyPreserveHost On

  <Location />
    Order allow,deny
    Allow from all
  </Location>

  ErrorLog logs/nexus/error.log
  CustomLog logs/nexus/access.log common
</VirtualHost>

/home/guillaume/www/nexus/conf

# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus

# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF
pr.encryptor.publicKeyPath=/apr/public-key.txt

когда я пытаюсь получить доступ

  • http://localhost:8081/nexus/index.html все работает
  • http://localhost/nexus/index.html все работает
  • http://example.com/nexus/index.html просто зависает (порт 80 открыт в брандмауэре)

    $netstat -tulpn | группа :80

    TCP 0 0 :::80 :::* ПРОСЛУШИВАТЬ 3965/httpd
    TCP 0 0 :::8081 :::* ПРОСЛУШАТЬ 3811/java
    udp 0 0 0.0.0.0:803 0.0.0.0:* 1051 /rpc.statd

Любая подсказка о том, как заставить этот прокси работать?

изменить 2: nginx

Я нашел ошибку, DNS был неверным: nslookup example.com разрешил x.x.x.x, когда мой ip был x.x.x.y

но мне понравилась конфигурация ngix

server {

        listen 80;
        server_name example.com;

        access_log off;
        error_log off;

        location / {
                proxy_pass      http://localhost:8081;
                proxy_redirect  off;

                #Proxy Settings
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

        # would be a good idea to redirect static assets
}

person Guillaume Massé    schedule 27.08.2012    source источник


Ответы (3)


Мне не нравится запускать серверы приложений Java на порту 80. Требуется, чтобы процесс запускался от имени пользователя root.

Лучший подход — установить Apache (или Nginx) и настроить Nexus в качестве обратного прокси. Для получения более подробной информации о том, как это делается, я предлагаю прочитать соответствующий раздел книги Nexus:

Примечание

  • Множество других преимуществ настройки обратного прокси. Например, вы можете настроить специальное сообщение об ошибке 503, которое будет отображаться всякий раз, когда вы отключаете Nexus для обслуживания.
person Mark O'Connor    schedule 27.08.2012
comment
Я также видел это wiki.ivonet.nl/display/LINUX/ Установить+или+обновить+Sonatype+Nexus - person Guillaume Massé; 28.08.2012
comment
Этот ответ устарел, учитывая мир, в котором существует докер. В наши дни крайне желательно запускать серверы приложений в контейнере на порту 80. - person Software Engineer; 10.08.2016

Для выполнения этой работы можно использовать authbind (вообще без прокси-сервера). Однако использовать его для nexus немного сложно, поскольку nexus запускается оболочкой службы java (jsw), которая, в свою очередь, запускается сценарием запуска (который при желании вызывает себя как другого пользователя).

Решение выглядит следующим образом (относительные пути относятся к домашнему каталогу nexus, $NEXUS_HOME):

  1. в conf/nexus.properties наборе
application-port=80
application-host=0.0.0.0

(или что вам нужно)

  1. create a (system) user for nexus, which has a login shell (!), e.g.

    adduser --system --shell /bin/sh --no-create-home --group nexus
    (make all of the nexus files belong to the new user, e.g. chown -R nexus:nexus .)
    A login shell is needed, because bin/nexus calls su - $RUN_AS_USER ..., that's why the user nexus must be able to "login" (not really).

  2. получить идентификатор нового пользователя: id -u nexus (предположим, что это был 108)

  3. создайте файл конфигурации authbind /etc/authbind/byuid/108 (используйте идентификатор пользователя nexus в качестве имени файла):

0.0.0.0,80
::,80

IP-адрес и порт должны быть такими же, как в nexus.properties (см. шаг 1). Порт IPv6 может понадобиться или не понадобиться, зависит от другой конфигурации (от Jetty). Безопасно включать его в authbind.

  1. создайте небольшой вспомогательный скрипт (необходимый для jsw), укажите путь к исполняемым файлам по умолчанию (например, /usr/local/bin/authbind-java):
#!/bin/sh
exec authbind java "$@"

(сделать файл исполняемым, chmod +x /usr/local/bin/authbind-java)

  1. отредактируйте файл конфигурации jsw bin/jsw/conf/wrapper.conf, найдите настройку wrapper.java.command (должно читаться как значение java) и замените значение на authbind-java (только что написанный вспомогательный скрипт).

Теперь вы готовы начать работу с нексусом. Из домашнего каталога Nexus:

RUN_AS_USER=nexus bin/nexus start

(или отредактируйте bin/nexus и установите RUN_AS_USER=nexus напрямую и вызовите bin/nexus start)

Теперь Nexus (сервер причала) должен запускаться, инициализироваться и, наконец, привязываться к порту 80, но все еще работать как «непривилегированный» пользователь nexus.


Дополнительное примечание: поскольку вы привязываете порт 80 для nexus, он, вероятно, работает на собственном (виртуальном) хосте, поэтому легко можно назначить ему собственное доменное имя (например, nexus.example.com). При этом я предпочитаю удалять префикс /nexus (контекстный путь) из URI, чтобы не печатать, он уже есть в имени домена. Чтобы нексус служил под корнем, установите nexus-webapp-context-path на /conf/nexus.properties). Путь к репозиторию станет, например, http://nexus.example.com/content/repositories/releases (вместо http://nexus.example.com/nexus/content/repositories/releases).

person nix    schedule 14.05.2015

Как насчет того, чтобы просто использовать iptables для перенаправления порта.
Итак, nexus по-прежнему работает на порту 8080, но вы также можете получить к нему доступ через порт 80.

iptables -t nat -A PREROUTING -i <interface> -p tcp --dport 80 -j REDIRECT --to-port 8080

См. (например) https://www.systutorials.com/816/port-forwarding-using-iptables/ для получения дополнительной информации о настройке.

person Rainer Jung    schedule 25.06.2014