Как напрямую предоставить доступ к приложениям, работающим на веб-сервере CentOS 7?

Как напрямую предоставить доступ к приложениям, работающим на веб-сервере CentOS 7?

Как открыть порт и напрямую получить доступ к веб-приложению, работающему на Tomcat в CentOS 7? Tomcat работает за обратным прокси-сервером Apache httpd, но я хочу получить прямой доступ к приложениям, работающим в Tomcat, открыв порт для прямого предоставления доступа к каждому приложению в целях тестирования.

Когда я открываю порты 8080 и 8081 в firewalld с помощью firewall-cmd --add-port=8080/tcpи firewall-cmd --add-port=8081/tcp, я могу получить доступ к приложениям, работающим на этих портах, когда я ввожу server.ip.addr:8080или server.ip.addr:8081, или anydomainontheserver.com:8080или anydomainontheserver.com:8081. Эти приложения также доступны, когда я получаю к ним доступ через httpd.

Однако, когда я пытаюсь получить доступ к приложениям, работающим на портах 8082, 8083 и 8084, напрямую, я получаю в ответ ошибки 404. Это происходит, несмотря на то, что приложения, работающие на портах 8082 и 8083, на 100% доступны через httpd по своим доменным именам. А приложение, работающее на порту 8084, в основном доступно через httpd по своему доменному имени. В каждом случае я набирал firewall-cmd --add-port=808xи пытался получить доступ к приложениям через server.ip.addr:808xи anydomainontheserver.com:808x, но в каждом случае получал ошибки 404. Я даже пытался открыть порты для их портов ajp в firewalld и набирать server.ip.addr:80xxи anydomainontheserver.com:80xxв браузере, но получал сообщение об ошибке браузера, в котором говорилось, что страницы не могут быть получены без указания номера ошибки.

Итак, как мне получить доступ к приложениям, работающим на портах 8082, 8083 и 8084, напрямую через tomcat для целей тестирования?

При наборе текста firewall-cmd --list-allполучается:

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:

При наборе текста nano /etc/httpd/conf.d/virtualhosts.confполучается:

<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>

А ввод `nano /opt/tomcat/conf/server.xml даст:

<?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>

решение1

Ваш httpd-прокси использует порты AJP, но когда вы пытаетесь получить к ним прямой доступ, вы используете порты HTTP.

Если вы попробуете переключить прокси-сервер httpd на использование порта HTTP, он все равно будет работать или вы получите ошибку 404?

  • Если вы получаете ошибку 404 через httpd, когда прокси-сервер использует HTTP, то проблема в вашем HTTP-коннекторе в Tomcat.

  • Если приложение по-прежнему работает через httpd, когда прокси-сервер использует порт HTTP, то проблема, вероятно, кроется внутри самого приложения.

решение2

Более безопасный способ достижения вашей цели — через SSH-туннелирование. Никаких изменений конфигурации tomcat или proxy не будет. Просто создайте SSH-туннель(и) между вашим клиентом и сервером tomcat, затем получите доступ к порту(ам) локально, как будто эти приложения запущены на вашей локальной клиентской машине. У вас есть три службы, прослушивающие tomcat на портах TCP 8082, 8083 и 8084. Поэтому создайте три SSH-туннеля. Предположим, что IP-адрес tomcat — 10.10.10.254, а пользователь — bob

На клиентской машине создайте три SSH-туннеля следующим образом:

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

Предполагая, что три приложения являются веб-приложениями, откройте веб-браузер на клиентском компьютере и перейдите по адресу:

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

Связанный контент