我已经部署了应用程序,使用Tomcat和Apache 2.4创建了一个AWS Beanstalk配置。我还成功安装了Letsencrypt证书并启用了https。 HTTP / 2也已启用并且可以正常工作。我唯一遇到的就是将www重定向到非www。我尝试在战争中添加适当的配置-。ebextensions \ httpd \ conf.d \ ssl.conf,这是:
LoadModule ssl_module modules/mod_ssl.so
LoadModule http2_module modules/mod_http2.so
Listen 443
<VirtualHost *:443>
Protocols h2 http/1.1
<Proxy *>
Require all granted
</Proxy>
ServerName example.com
SSLEngine on
SSLCertificateFile "/etc/letsencrypt/live/example.com/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/example.com/privkey.pem"
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
ProxyPass / http://localhost:8080/ retry=0
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost on
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1$1 [R=301,L]
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
RewriteEngine On
Redirect 301 / https://example.com
</VirtualHost>
它实际上会重定向,但是...它会重定向一次!然后,客户端从example.com接收到证书,并且下一个对www.example.com的调用失败,因为为没有www的资源生成了“错误的”证书。结果SEO检查程序无法通过301检查。
我的问题-是否可以使用Apache配置重定向?s3 + Cloudfront是唯一的方法吗?
确定。因此,我终于找到了一种从www设置适当的301重定向的方法。没有s3存储桶和Cloudfront的非www网站版本。
因此从问题描述中Apache可以很好地重定向资源,并且在浏览器获得example.com的证书后,它实际上拒绝了[[subdomains。我错过的是可以生成并使用另一个证书。
第一步是生成证书:certbot certonly -d *.example.com --manual --preferred-challenges dns
细微之处在于您必须挑战。它将要求将CNAME记录添加到您的托管区域:
Please deploy a DNS TXT record under the name _acme-challenge.domain.com with the following value: cxAGAsIvxQggW5FRAqUJfjsnknsYBjb3 Before continuing, verify the record is deployed.
添加了记录后,按Enter键,您将安装证书。不要忘记重启Apache!干得好!现在将www.example.com重定向到example.com。