经过几个小时后,我终于成功配置 Apache 以使用我的 SSL 证书,但我刚刚发现我的配置有问题。如果我尝试通过输入以下地址从 Google Chrome 访问我的域,我会收到以下警告:
erichermansson.com
Forbidden
You don't have permission to access / on this server.
但是,如果我在 Google Chrome 中输入以下地址,我可以访问服务器及其使用我的证书:
https://erichermansson.com
我做错了什么?
这是我的虚拟主机:
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName erichermansson.com
ServerAlias www.erichermansson.com
SSLEngine ON
SSLCertificateFile /www/erichermansson.com/ssl/erichermansson.com.crt
SSLCertificateKeyFile /www/erichermansson.com/ssl/erichermansson.com.key
DocumentRoot /www/erichermansson.com/html/
ErrorLog /www/erichermansson.com/logs/error.log
CustomLog /www/erichermansson.com/logs/access.log combined
<Directory /www/erichermansson.com/html/ >
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
答案1
要将 HTTP 重定向到 HTTPS,您需要(您可能已经执行了前 3 个步骤):
允许路由器中的端口 80。
将端口 80 转发到您的服务器。
在防火墙上打孔:
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
为端口 80 定义 VirtualHost(以及 443):
<VirtualHost *:80> ServerName erichermansson.com ServerAlias www.erichermansson.com RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R] RewriteCond %{HTTPS} !on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301] </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ... your code here ... </VirtualHost> </IfModule>
启用
mod_rewrite
:sudo a2enmod rewrite
定义从 HTTP 到 HTTPS 的重定向,例如:
RewriteCond %{HTTPS} !on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301]
我们已经完成了第 4 步。
最后重新启动 Apache:
sudo service apache2 restart