4

我有一个 Fedora 服务器。我通过 yum 包管理器安装了 tomcat。然后我在 webapps 文件夹上部署了 nexus 战争。我尝试使用 jsvc在端口 80 上运行服务器,但没有成功。我看到你也可以使用端口转发。什么是最好的选择?

编辑1:httpd

我跟着3.8。从 sonatype doc在代理后面运行 Nexus,我有点困惑。我安装了 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 | 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
}
4

3 回答 3

6

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

解决方法如下(相对路径是相对于nexus主目录的,$NEXUS_HOME):

  1. conf/nexus.properties集合中
应用程序端口=80
应用程序主机=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 作为文件名):

0.0.0.0,80
::,80

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

  1. 创建一个小帮助脚本(jsw 需要),放入默认的可执行文件路径(例如/usr/local/bin/authbind-java):
#!/bin/sh
执行 authbind java "$@"

(使文件可执行,by chmod +x /usr/local/bin/authbind-java

  1. 编辑 jsw 配置文件bin/jsw/conf/wrapper.conf,找到设置wrapper.java.command(应该读取java为值)并将值替换为authbind-java(刚刚编写的帮助脚本)。

现在您已准备好启动 nexus。从 nexus 的主目录:

RUN_AS_USER=nexus bin/nexus 启动

(或直接编辑bin/nexus设置RUN_AS_USER=nexus并调用bin/nexus start

Nexus(码头服务器)现在应该启动、初始化并最终绑定到端口 80,但仍以“非特权”用户身份运行nexus


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

于 2015-05-14T16:59:41.660 回答
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/ 。

于 2014-06-25T07:39:42.040 回答
4

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

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

笔记

  • 设置反向代理还有很多其他优势。例如,您可以设置一个自定义的 503 错误消息,每当您关闭 Nexus 进行维护时就会显示该错误消息。
于 2012-08-27T22:56:41.450 回答