apache - 让apache同时重定向到https和tomcat(端口8080)的正确方法是什么

标签 apache ssl tomcat

我知道类似的问题已经被问过很多次了,我觉得我把它们都读了 12 遍。每次答案都略有不同,我几乎尝试了所有组合,但仍然无法让它发挥作用......
所以,我有一个 Apache 和一个在 Freenas jail 中运行的 Tomcat(所以运行的是 FreeBSD)。我使用 Certbot 为我的域获取 SSL 证书。让我们称之为example.com。在我的路由器中,我打开了端口 80 和 443。
现在,我希望用户在浏览器中输入“www.example.com”或“example.com”,然后登陆“https://www.example.com”和端口 8080。
我发现要做到这一点,我需要配置我的 apache 虚拟主机文件。然而,正如我所说,我发现了许多不同的东西要放在那里,而且似乎没有一个是完全正确的。这是我现在拥有的:

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com

  #  ProxyPreserveHost On
  #  ProxyRequests Off
  #  ProxyPass / http://localhost:8080/
  #  ProxyPassReverse / http://localhost:8080/
  #  Redirect permanent / https://www.example.com/
</VirtualHost>

<VirtualHost _default_:443>
  SSLEngine on

  SSLCertificateFile /usr/local/etc/letsencrypt/live/example.com/cert.pem
  SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/example.com/privkey.pem
  SSLCertificateChainFile /usr/local/etc/letsencrypt/live/example.com/chain.pem

  ServerName www.example.com
  ServerAlias example.com

  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/

</VirtualHost>
我还将它添加到 Tomcat server.xml 中:
 <Connector className="org.apache.catalina.connector.http.HttpConnector"
            port="8080"
            proxyName="www.example.com"
            proxyPort="80"/>
所以,我的问题是:
  • 哪个具有 www、ServerName 或 ServerAlias 是否重要?因为我都见过。-
  • 我应该让 Apache 监听端口 80 还是 433?
  • 如何验证 Apache 和 tomcat 是否正在监听正确的端口?以前,我在 CentOS VPS 中使用过它,它带有“netstat -tulpn”。 (那时我还没有 SSL)
  • 有一次,我几乎可以正常工作:输入 example.com 被正确重定向到 https://www.example.com/在端口 8080 上,因为我到达了在 Tomcat 中运行的网站。如果我删除了 URL 中的“s”,它就不会再次重定向到 https。另外,我应该保存那个确切的配置,因为我找不到它...

  • 我将非常感谢我得到的任何答案。提前非常感谢。
    雷谷

    最佳答案

    让我们来看看你的问题:

    Does it matter which one has www, ServerName or ServerAlias?


    在服务器名称中使用规范的主机名,在指向您的 CNAME 的别名中使用。选择要向用户宣传的名称。

    Should I have Apache listen on port 80 or 443?


    您必须同时执行这两项操作,因为 Let's Encrypt 需要打开端口 80,因此 HTTPd 必须执行 Listen *:80Listen *:443 .

    How can I verify if Apache and tomcat are listening on the right ports?


    FreeBSD 魔法:sockstat -46现在到您的设置:
    假设:HTTPd 和 Tomcat 在同一主机上运行,​​而 Tomcat 在 localhost 上监听。
    Tomcat的server.xml :
    <Connector address="localhost" port="8080" redirectPort="443" ... />
    
    我从不需要 proxy*属性,只是在 <Host /> 中使用了这个:
    <Valve className="org.apache.catalina.valves.RemoteIpValve" />
    
    访问日志阀需要:requestAttributesEnabled="true"HTTPd:
    <VirtualHost *:80>
      Redirect permanent / https://{hostname}/
    </VirtualHost>
    
    <VirtualHost *:443>
      ProxyPreserveHost On
      ProxyPass / http://localhost:8080/
      ProxyPassReverse / http://localhost:8080/
      RequestHeader set X-Forwarded-Proto "https"
    </VirtualHost>
    
    在您的 web.xml您设置让 Tomcat 重定向到 HTTP 到 HTTPS:http://docs.adaptivecomputing.com/viewpoint/hpc/Content/topics/1-setup/securityConfiguration/modifyingWebxmlEnableHTTPS.htm

    关于apache - 让apache同时重定向到https和tomcat(端口8080)的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66714494/

    相关文章:

    ssl - 让我们使用 Cert-manager : Invalid certificate 在 GKE 上加密

    Java Web 服务检查 SSL 握手警报 : handshake_failure

    tomcat - 在具有安全管理器的 tomcat 中使用 log4j

    java - 在 Eclipse 中使用 Tomcat 运行时调试的 Bluemix 失败

    capistrano部署后tomcat刷新目录

    apache - 在客户区配置 WHMCS 500 服务器错误

    apache - Nginx 与 Apache 或将 Apache 与 nginx 一起使用

    android - 错误 : Name not maching for self signed SSL certificates on Android

    c++ - Apache 模块命令解析器原型(prototype)

    java.lang.ArrayIndexOutOfBoundsException : 2 error in mapreduce, Hadoop