我有一个fedora服务器。我通过yum包管理器安装了tomcat。然后我在webapps文件夹上部署了nexus war。 I tryed using jsvc在端口80上运行服务器但无效。我看到你也可以使用port fowarding。什么是最好的选择?
我从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
关于如何使代理工作的任何线索?
我发现错误,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
}
答案 0 :(得分:5)
可以使用authbind来完成工作(根本不需要任何代理)。将它用于nexus虽然有点棘手,因为nexus是由一个java服务包装器(jsw)启动的,而后者又是由一个启动脚本启动的(如果需要的话,它会将自己召唤为另一个用户)。
解决方案如下(相对路径相对于nexus主目录$NEXUS_HOME
):
conf/nexus.properties
set
醇>
application-port=80 application-host=0.0.0.0
(或任何你需要的)
为nexus创建一个(系统)用户,它有一个登录shell(!),例如:
adduser --system --shell /bin/sh --no-create-home --group nexus(使所有nexus文件属于新用户,例如
chown -R nexus:nexus .
)bin/nexus
调用了su - $RUN_AS_USER ...
,这就是用户nexus
必须能够“登录”(不是真的)的原因。
获取新用户的用户ID:id -u nexus
(让我们假装它是108
)
创建authbind配置文件/etc/authbind/byuid/108
(使用nexus用户的id作为文件名):
0.0.0.0,80 ::,80
IP和端口应与nexus.properties
中使用的相同(请参阅步骤1)。可能需要也可能不需要IPv6端口,具体取决于其他配置(来自Jetty)。在authbind中启用它是安全的。
/usr/local/bin/authbind-java
):#!/bin/sh exec authbind java "$@"
(使文件可执行,chmod +x /usr/local/bin/authbind-java
)
bin/jsw/conf/wrapper.conf
,找到设置wrapper.java.command
(应将java
读取为值)并将值替换为authbind-java
(刚刚编写的帮助脚本) 现在您已准备好开始使用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书籍的相关部分:
注意强>
答案 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/。