httpd 后面的 Tomcat,带有 Let's Encrypt 和 Certbot - 我的 VirtualHost 正确吗?

httpd 后面的 Tomcat,带有 Let's Encrypt 和 Certbot - 我的 VirtualHost 正确吗?

我希望已经解决了我在 Amazon Linux(“不是 2”)实例上相互独立的 httpd 和 Tomcat 服务器的问题,现在我遇到了一个情况,希望 Tomcat 在 Amazon Linux 2 实例上运行在现有的 httpd 后面,该实例已经通过 certbot 获得了 Let's Encrypt 证书。但是,上次我试验这个(几个月前,就像我最终与 Lego 合作的那个一样),我遇到了很多麻烦,甚至无法让它部分发挥作用,而且我做的一些事情严重破坏了自动续订,我们直到证书过期才发现这一点。

这是我添加的 httpd conf 文件(实际名称和 IP 地址已删除),用于为新子域提供虚拟主机。发送到端口 80 的浏览器请求是否重定向到 https 对我来说没有区别;重要的是 (1) Certbot 和 Let's Encrypt 可以查看并执行它们需要的操作,(2) 用户可以访问 Tomcat 服务器上的所有 webapp 上下文,包括 ROOT,以及 (3) 只有指定的 IP 地址才能查看管理器和主机管理器。

我做错了什么吗?

 <VirtualHost *:80>
 ServerName xyweb.frobozz.com
 DocumentRoot /var/www/html/test
 ServerAdmin [email protected]
 <Directory /var/www/html/test>
 AllowOverride All
 </Directory>
 # RewriteEngine on
 # RewriteCond %{HTTP_HOST} !^www\. [NC]
 # RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 </VirtualHost>

 <IfModule mod_ssl.c>
 <VirtualHost *:443>
 ServerName xyweb.frobozz.com
 DocumentRoot /var/www/html/test
 ServerAdmin [email protected]
 <Location /manager>
  Require ip ww.xx.yy.zz aa.bb.cc.dd ee.ff.gg.hh
 </Location>
 <Location /host-manager>
  Require ip ww.xx.yy.zz aa.bb.cc.dd ee.ff.gg.hh
 </location>
 ProxyPass "/" "http://127.0.0.1:8080/"
 ProxyPassReverse "/" "http://127.0.0.1:8080/"
 ProxyRequests Off
 Include /etc/letsencrypt/options-ssl-apache.conf
 SSLCertificateFile /etc/letsencrypt/live/fizmo.com/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/fizmo.com/privkey.pem
 </VirtualHost>
 </IfModule>

答案1

显然是的,因为我今天终于有时间测试它了,而且它成功了。

我还了解到,几个月前我尝试将新子域添加到所有其他子域使用的现有 Let's Encrypt 证书和 Certbot 配置中,这是毫无意义的,只会让我的事情变得更加困难:每个在 httpd 服务器上拥有自己的虚拟主机的子域也可以拥有自己的证书。今天我了解了“certbot renew --force-renewal”,这也有所帮助。

答案2

我看到您使用图表引导重定向注释了与 letsencrypt 通信的行。

 # RewriteEngine on
 # RewriteCond %{HTTP_HOST} !^www\. [NC]
 # RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

您在更新证书时遇到问题了吗?我认为您必须在更新证书时一直进行编辑,不是吗?

我的工作不正常是因为 SELinux 定义,我没有运行这个命令来工作,Apache 没有启用将通信从 443 重定向到 8080:

sudo semanage port -m -t http_port_t -p tcp 8080

相关内容