即使转发后,端口 80 仍重定向到 CPanel 的 /cgi-sys/defaultwebpage.cgi

即使转发后,端口 80 仍重定向到 CPanel 的 /cgi-sys/defaultwebpage.cgi

我最近接管了一个网站,该网站使用纯 Tomcat 6 服务器(即没有 Tomcat+Apache 组合),安装了 CPanel,只能在端口 上访问8088(即主页 URL 为www.domain.com:8088)。我希望该网站可以在 上访问www.domain.com,即在端口 上访问80。根据本文,我跑了:

sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8088
sudo /sbin/service iptables save

然后重新启动。但是,和以前一样,www.domain.com重定向到www.domain.com/cgi-sys/defaultwebpage.cgiCPanel 的默认网页,位于/usr/local/cpanel/cgi-sys/defaultwebpage.cgi。访问 上的任何其他页面时,我都会收到 404 错误www.domain.com。似乎 CPanel 干扰了端口 的使用80www.domain.com:8088但是,它仍然有效。

以下是 的内容/usr/local/tomcat/apache-tomcat-6.0.26/conf/server.xml。请注意,我添加了proxyPort="80"以下内容port="8088",以便它“表现得好像传入的请求被定向到端口 80”,根据文章所述。

<?xml version='1.0' encoding='utf-8'?>

<Server port="8005" shutdown="SHUTDOWN">

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <GlobalNamingResources>

    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector port="8088" proxyPort="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               keystoreFile="/usr/local/tomcat/apache-tomcat-6.0.26/.keystore" keystorePass="[redacted]"
               clientAuth="false" sslProtocol="TLS" />

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

      </Host>
    </Engine>
  </Service>
</Server>

以下是我的 iptables 文件的相关部分(通过 获取)。出于隐私考虑,less /etc/sysconfig/iptables | grep "80"IP 地址已被替换为。#

-A PREROUTING -p tcp -m tcp --sport 80 -j TOS --set-tos 0x08
-A POSTROUTING -p tcp -m tcp --dport 80 -j TOS --set-tos 0x08
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8088 -j ACCEPT
-A acctboth -s ###.###.###.98 -i ! lo -p tcp -m tcp --dport 80
-A acctboth -d ###.###.###.98 -i ! lo -p tcp -m tcp --sport 80
-A acctboth -s ###.###.###.99 -i ! lo -p tcp -m tcp --dport 80
-A acctboth -d ###.###.###.99 -i ! lo -p tcp -m tcp --sport 80
-A acctboth -s ###.###.###.100 -i ! lo -p tcp -m tcp --dport 80
-A acctboth -d ###.###.###.100 -i ! lo -p tcp -m tcp --sport 80
-A acctboth -s ###.###.###.101 -i ! lo -p tcp -m tcp --dport 80
-A acctboth -d ###.###.###.101 -i ! lo -p tcp -m tcp --sport 80
-A acctboth -s ###.###.###.102 -i ! lo -p tcp -m tcp --dport 80
-A acctboth -d ###.###.###.102 -i ! lo -p tcp -m tcp --sport 80
-A acctboth -s ##.###.###.2 -i ! lo -p tcp -m tcp --dport 80
-A acctboth -d ##.###.###.2 -i ! lo -p tcp -m tcp --sport 80
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8088

由于操作系统是 CentOS 5.10,不是基于 Debian,authbind因此无法使用它,如几个答案中所述这里,不是一个选项。

我如何才能访问端口上的网站80而不被重定向到/cgi-sys/defaultwebpage.cgi


编辑:这是 的结果iptables -L -nv | grep 80。所有带有数字符号的都转到我的网站:

   37  1480 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1433
  360 29735 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
 1600 92619 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
  701 59109 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8088
   55 18046 ACCEPT     all  --  *      *       0.0.0.0/0            <IP number 2>
  122  8401            tcp  --  !lo    *       ###.###.###.98       0.0.0.0/0           tcp dpt:80
  113 56481            tcp  --  !lo    *       0.0.0.0/0            ###.###.###.98      tcp spt:80
    0     0            tcp  --  !lo    *       ###.###.###.99       0.0.0.0/0           tcp dpt:80
    2    88            tcp  --  !lo    *       0.0.0.0/0            ###.###.###.99      tcp spt:80
    0     0            tcp  --  !lo    *       ###.###.###.100      0.0.0.0/0           tcp dpt:80
    2    88            tcp  --  !lo    *       0.0.0.0/0            ###.###.###.100     tcp spt:80
    0     0            tcp  --  !lo    *       ###.###.###.101      0.0.0.0/0           tcp dpt:80
    1    44            tcp  --  !lo    *       0.0.0.0/0            ###.###.###.101     tcp spt:80
    0     0            tcp  --  !lo    *       ###.###.###.102      0.0.0.0/0           tcp dpt:80
    0     0            tcp  --  !lo    *       0.0.0.0/0            ###.###.###.102     tcp spt:80
    0     0            tcp  --  !lo    *       <IP number 3>         0.0.0.0/0           tcp dpt:80
    0     0            tcp  --  !lo    *       0.0.0.0/0            <IP number 3>       tcp spt:80

答案1

即没有组合 Tomcat+Apache

事实并非如此,因为netstat -anp | grep :80返回:

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3827/httpd

Tomcat如果您想将其作为主 Web 服务器,可以将其关闭。

然后运行你的 iptables 预路由规则:

sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8088

而且它应该可以工作。

相关内容