如何配置 Apache 来提供 https 服务?

如何配置 Apache 来提供 https 服务?

经过几个小时后,我终于成功配置 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 个步骤):

  1. 允许路由器中的端口 80。

  2. 将端口 80 转发到您的服务器。

  3. 在防火墙上打孔:

    sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    
  4. 为端口 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>
    
  5. 启用mod_rewrite

    sudo a2enmod rewrite
    
  6. 定义从 HTTP 到 HTTPS 的重定向,例如:

    RewriteCond            %{HTTPS} !on
    RewriteRule            ^/?(.*) https://%{SERVER_NAME}/$1 [R=301]
    

    我们已经完成了第 4 步。

  7. 最后重新启动 Apache:

    sudo service apache2 restart
    

相关内容