我希望已经解决了我在 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