我正在查看名为 DSpace 的 Tomcat 6 Web 应用程序的文档,特别是关于运行在标准端口上运行 DSpace(http:// 为 80,https:// 为 443)
我正在尝试使用“方法 1”,它使用 iptables 将流量从端口 80 和 443 重定向到 8080 和 8443,以摆脱:8080
url 中的 。
这些是文档给出的命令:
/sbin/iptables -t nat -I PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 8080
/sbin/iptables -t nat -A OUTPUT -p tcp -d _[server_ip_address|server_ip_address]_ --dport 80 -j REDIRECT --to-port 8080
/sbin/iptables -t nat -I PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports 8443
我认为第二行有一些需要更改的地方,特别是该部分-d _[server_ip_address|server_ip_address]_
- 但我不确定是什么。我已经阅读了该man
页面,iptables
但没有任何运气。
我尝试更改-d _[server_ip_address|server_ip_address]_
为:
-d _[127.0.0.1|127.0.0.1]_
并且:
-d _[54.224.121.116|54.224.121.116]_
并且:
-d _[ec2-54-224-112-116.compute-1.amazonaws.com|ec2-54-224-112-116.compute-1.amazonaws.com]_
我遇到的错误Bad argument 'REDIRECT'
包括
host/network '_127.0.0.1' not found
谁能帮我发现我做错了什么?
更新:我认为重定向无需第二行即可工作,但我仍然不确定其预期目的是什么......
答案1
我认为您只是对该页面上损坏的标点符号感到困惑。和_
是[
某些标记的残余,它们不是iptables
语法的一部分。另外该|
字符不能用于分隔IP,需要使用,
(逗号)。
/sbin/iptables -t nat -A OUTPUT -p tcp -d 54.224.121.116,54.224.121.116 --dport 80 -j REDIRECT --to-port 8080
答案2
fwiw 我实际上会考虑在常规 Apache 上使用 mod_proxy_ajp 。听起来您试图让人们不必在 URL 中的服务器名称末尾键入/查看 :8080 和 :8443 。 mod_proxy_ajp 通常对于您想要做的事情来说更容易,如果您决定稍后加大赌注并进行一些负载平衡,如果您已经在 mod_proxy_ajp 设置中,那么这样做很简单。这是我的一台生产服务器上的设置:
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPass / ajp://fqdn.for.server:8009/
ProxyPassReverse / ajp://fqdn.for.server:8009/
您可以将 ProxyPass 放入 VirtualHost 配置中,之后它几乎就像配置任何其他主机一样(这意味着您可以在端口 443 上配置 SSL,在端口 80 上配置明文)。为了更深入地了解整个交易。
Apache+mod_proxy 不是执行此操作的唯一方法,但它是我最有经验的方法,并且看起来它比您尝试执行的方法(使用防火墙进行端口转发)要少一些工作。
答案3
据我了解,第二条规则指定了如果您尝试从服务器向外到达您的服务器(因此-d
)重定向80
到8080
.这是必需的,因为本地生成的包不由PREROUTING
(来自http://www.docum.org/docum.org/kptd/和“更新”)
注意:我通常使用海岸墙作为防火墙,所以不要认为我的答案是无懈可击的或彩虹风味的。