我知道类似的问题已经被问过很多次了,我觉得我把它们都读了 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"/>
所以,我的问题是:我将非常感谢我得到的任何答案。提前非常感谢。
雷谷
最佳答案
让我们来看看你的问题:
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 *:80
和 Listen *: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/