Недавно я взял на себя управление веб-сайтом, используя чистый сервер 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.cgi
, Веб-страница CPanel по умолчанию, которая находится по адресу /usr/local/cpanel/cgi-sys/defaultwebpage.cgi
. Я получаю ошибку 404 при доступе к любой другой странице в www.domain.com
. Кажется, что CPanel мешает использованию порта 80
. www.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
т.е. нет комбинации Tomcat + Apache
Это неправда, потому что netstat -anp | grep :80
вернулся:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3827/httpd
Вы можете выключить его, если хотите Tomcat
быть вашим основным веб-сервером.
Затем запустите правило предварительной маршрутизации iptables:
sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8088
И это должно работать.