Wie kann ich Apps, die auf einem CentOS 7-Webserver ausgeführt werden, direkt verfügbar machen?

Wie kann ich Apps, die auf einem CentOS 7-Webserver ausgeführt werden, direkt verfügbar machen?

Wie kann ich einen Port öffnen und direkt auf eine Webanwendung zugreifen, die auf Tomcat unter CentOS 7 ausgeführt wird? Tomcat läuft hinter einem Apache-HTTPD-Reverse-Proxy, aber ich möchte direkt auf die in Tomcat laufenden Apps zugreifen, indem ich einen Port öffne, um jede App zu Testzwecken direkt verfügbar zu machen.

firewall-cmd --add-port=8080/tcpWenn ich in Firewalld die Ports 8080 und 8081 mit und öffne firewall-cmd --add-port=8081/tcp, kann ich auf die auf diesen Ports laufenden Apps zugreifen, wenn ich server.ip.addr:8080oder server.ip.addr:8081, oder anydomainontheserver.com:8080oder eingebe anydomainontheserver.com:8081. Auf diese Apps kann auch zugegriffen werden, wenn ich über httpd zugreife.

Wenn ich jedoch versuche, direkt auf die Apps zuzugreifen, die auf den Ports 8082, 8083 und 8084 laufen, erhalte ich als Antwort 404-Fehler. Dies ist der Fall, obwohl die Apps, die auf den Ports 8082 und 8083 laufen, zu 100 % über httpd über ihre Domänennamen erreichbar sind. Und die App, die auf Port 8084 läuft, ist größtenteils über httpd über ihren Domänennamen erreichbar. In jedem Fall habe ich und eingegeben firewall-cmd --add-port=808xund versucht, auf die Apps über zuzugreifen server.ip.addr:808x, anydomainontheserver.com:808xhabe aber jedes Mal 404-Fehler erhalten. Ich habe sogar versucht, Ports für ihre AJP-Ports in Firewalld zu öffnen und server.ip.addr:80xxund anydomainontheserver.com:80xxin den Browser einzugeben, habe aber eine Browserfehlermeldung erhalten, die besagt, dass die Seiten nicht abgerufen werden können, ohne die Fehlernummer anzugeben.

Wie kann ich also zu Testzwecken direkt über Tomcat auf die Apps zugreifen, die auf den Ports 8082, 8083 und 8084 laufen?

Durch Eintippen firewall-cmd --list-allerhält man:

public (default, active)
  interfaces: enp3s0
  sources: 
  services: dhcpv6-client http imaps openvpn smtp ssh
  ports: 8009/tcp 8083/tcp 8011/tcp 8084/tcp 8010/tcp 8080/tcp 8081/tcp 8013/tcp 8012/tcp 8082/tcp
  masquerade: yes
  forward-ports: 
  icmp-blocks: 
  rich rules:

Durch Eintippen nano /etc/httpd/conf.d/virtualhosts.conferhält man:

<VirtualHost *:443>
    ServerName www.vpndomain.com
    ServerAlias vpndomain.com
    ErrorLog /var/log/httpd/vpndomain_com_error.log
    CustomLog /var/log/httpd/vpndomain_com_requests.log combined
    SSLEngine on
    SSLProxyEngine on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    ProxyPass / ajp://server.ip.addr:8009/
    ProxyPassReverse / ajp://server.ip.addr:8009/
</VirtualHost>

Listen 444

<VirtualHost *:444>
    ServerName www.vpndomain.com
    ServerAlias vpndomain.com
    ErrorLog /var/log/httpd/vpndomain_com_error.log
    CustomLog /var/log/httpd/vpndomain_com_requests.log combined
    SSLEngine on
    SSLProxyEngine on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    ProxyPass / ajp://server.ip.addr:8010/
    ProxyPassReverse / ajp://server.ip.addr:8010/
</VirtualHost>

<VirtualHost www.domain1.com:80>
    ServerName www.domain1.com
    ServerAlias domain1.com
    ErrorLog /var/log/httpd/domain1_com_error.log
    CustomLog /var/log/httpd/domain1_com_requests.log combined
    ProxyPass / ajp://server.ip.addr:8011/
    ProxyPassReverse / ajp://server.ip.addr:8011/
</VirtualHost>

<VirtualHost www.domain2.com:80>
    ServerName www.domain2.com
    ServerAlias domain2.com
    ErrorLog /var/log/httpd/domain2_com_error.log
    CustomLog /var/log/httpd/domain2_com_requests.log combined
    ProxyPass / ajp://server.ip.addr:8012/
    ProxyPassReverse / ajp://server.ip.addr:8012/
</VirtualHost>

<VirtualHost www.domain3.com:80>
    ServerName www.domain3.com
    ServerAlias domain3.com
    ErrorLog /var/log/httpd/domain3_com_error.log
    CustomLog /var/log/httpd/domain3_com_requests.log combined
    ProxyPass / ajp://server.ip.addr:8013
    ProxyPassReverse / ajp://server.ip.addr:8013
</VirtualHost>

Und wenn Sie `nano /opt/tomcat/conf/server.xml eingeben, erhalten Sie:

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

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <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="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
              <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
          </Realm>
          <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
               <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="ermapp_access_log" suffix=".txt"
                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
          </Host>
    </Engine>
  </Service>

  <Service name="Upload">
    <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps_upload" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="uploadapp_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>

  <Service name="Public">
      <Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />
      <Connector port="8011" protocol="AJP/1.3" redirectPort="8445" />
      <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
              <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
          </Realm>
          <Host name="domain1.com"  appBase="webapps_public" unpackWARs="true" autoDeploy="true">
              <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                  prefix="domain1_access_log" suffix=".txt"
                  pattern="%h %l %u %t &quot;%r&quot; %s %b" />
          </Host>
      </Engine>
  </Service>

  <Service name="domain2">
      <Connector port="8083" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8446" />
      <Connector port="8012" protocol="AJP/1.3" redirectPort="8446" />
      <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
              <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
          </Realm>
          <Host name="domain2.com"  appBase="webapps_domain2" unpackWARs="true" autoDeploy="true">
              <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                  prefix="domain2_access_log" suffix=".txt"
                  pattern="%h %l %u %t &quot;%r&quot; %s %b" />
          </Host>
      </Engine>
  </Service>

  <Service name="domain3">
      <Connector port="8084" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8447" />
      <Connector port="8013" protocol="AJP/1.3" redirectPort="8447" />
      <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
              <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
          </Realm>
          <Host name="domain3.com"  appBase="webapps_domain3" unpackWARs="true" autoDeploy="true">
              <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                  prefix="domain3_access_log" suffix=".txt"
                  pattern="%h %l %u %t &quot;%r&quot; %s %b" />
          </Host>
      </Engine>
  </Service>

</Server>

Antwort1

Ihr httpd-Proxy verwendet die AJP-Ports, aber wenn Sie versuchen, direkt darauf zuzugreifen, verwenden Sie die HTTP-Ports.

Wenn Sie versuchen, den HTTPD-Proxy so umzustellen, dass er den HTTP-Port verwendet, funktioniert es dann immer noch oder erhalten Sie die 404-Meldung?

  • Wenn Sie über httpd die Fehlermeldung 404 erhalten, während der Proxy HTTP verwendet, liegt ein Problem mit Ihrem HTTP-Connector in Tomcat vor.

  • Wenn es über httpd immer noch funktioniert, während der Proxy den HTTP-Port verwendet, liegt das Problem wahrscheinlich intern bei der App selbst.

Antwort2

Eine sicherere Möglichkeit, Ihr Ziel zu erreichen, ist SSH-Tunneling. Es werden keine Konfigurationsänderungen an Tomcat oder Proxy vorgenommen. Erstellen Sie einfach einen oder mehrere SSH-Tunnel zwischen Ihrem Client und dem Tomcat-Server und greifen Sie dann lokal auf die Ports zu, als ob diese Apps auf Ihrem lokalen Client-Rechner laufen würden. Sie haben drei Dienste, die auf Tomcat auf den TCP-Ports 8082, 8083 und 8084 lauschen. Erstellen Sie daher drei SSH-Tunnel. Nehmen wir an, die IP-Adresse von Tomcat ist 10.10.10.254 und der Benutzer ist Bob

Erstellen Sie vom Client-Rechner aus drei SSH-Tunnel wie folgt:

$ ssh -fnN -L 8082:localhost:8082 [email protected]
$ ssh -fnN -L 8083:localhost:8083 [email protected]
$ ssh -fnN -L 8084:localhost:8084 [email protected]

Angenommen, es handelt sich bei den drei Apps um Web-Apps, öffnen Sie Ihren Webbrowser auf dem Client-Computer und navigieren Sie zu:

http://localhost:8082
http://localhost:8083
http://localhost:8084

verwandte Informationen