如何在端口80上运行nexus sonatype?

时间:2012-08-27 15:31:52

标签: tomcat fedora nexus port80

我有一个fedora服务器。我通过yum包管理器安装了tomcat。然后我在webapps文件夹上部署了nexus war。 I tryed using jsvc在端口80上运行服务器但无效。我看到你也可以使用port fowarding。什么是最好的选择?

编辑1:httpd

我从sonatype doc跟踪3.8. Running Nexus Behind a Proxy,我有点困惑。 我安装了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>

/家庭/纪尧姆/网络/关系/ 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 | grep:80

    tcp 0 0 ::: 80 ::: * LISTEN 3965 / httpd
    tcp 0 0 ::: 8081 ::: * LISTEN 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
}

3 个答案:

答案 0 :(得分:5)

可以使用authbind来完成工作(根本不需要任何代理)。将它用于nexus虽然有点棘手,因为nexus是由一个java服务包装器(jsw)启动的,而后者又是由一个启动脚本启动的(如果需要的话,它会将自己召唤为另一个用户)。

解决方案如下(相对路径相对于nexus主目录$NEXUS_HOME):

    {li> in conf/nexus.properties set
    application-port=80
    application-host=0.0.0.0

    (或任何你需要的)

    1. 为nexus创建一个(系统)用户,它有一个登录shell(!),例如:

      adduser --system --shell /bin/sh --no-create-home --group nexus
      (使所有nexus文件属于新用户,例如chown -R nexus:nexus .
      需要登录shell,因为bin/nexus调用了su - $RUN_AS_USER ...,这就是用户nexus必须能够“登录”(不是真的)的原因。

    2. 获取新用户的用户ID:id -u nexus(让我们假装它是108

    3. 创建authbind配置文件/etc/authbind/byuid/108(使用nexus用户的id作为文件名):

    4. 0.0.0.0,80
      ::,80

      IP和端口应与nexus.properties中使用的相同(请参阅步骤1)。可能需要也可能不需要IPv6端口,具体取决于其他配置(来自Jetty)。在authbind中启用它是安全的。

      1. 创建一个小助手脚本(jsw需要),放入默认可执行文件的路径(例如/usr/local/bin/authbind-java):
      2. #!/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(刚刚编写的帮助脚本)
        2. 现在您已准备好开始使用nexus。来自nexus的主目录:

          RUN_AS_USER=nexus bin/nexus start

          (或修改bin/nexus并直接设置RUN_AS_USER=nexus并致电bin/nexus start

          Nexus(jetty服务器)现在应该启动,初始化并最终绑定到端口80,但仍然作为“非特权”用户nexus运行。

          附注:由于您为端口80绑定nexus,它可能在自己的(虚拟)主机上运行,​​因此很容易为其指定一个自己的域名(例如nexus.example.com)。这样做时,我更喜欢从URI中删除/nexus前缀(上下文路径),以保存输入,它已经在域名中。要让nexus在根目录下投放,请将nexus-webapp-context-path设置为/(在conf/nexus.properties中)。存储库路径将变为例如http://nexus.example.com/content/repositories/releases(而不是http://nexus.example.com/nexus/content/repositories/releases)。

答案 1 :(得分:4)

我不喜欢在端口80上运行java app服务器。需要以root身份运行该进程。

最好的方法是安装Apache(或Nginx)并将nexus配置为反向代理。有关如何完成此操作的详细信息,我建议您阅读Nexus书籍的相关部分:

注意

  • 设置反向代理的许多其他优点。例如,您可以设置自定义503错误消息,只要您关闭Nexus进行维护就会显示该消息。

答案 2 :(得分:4)

如何使用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/