Apache-Httpd

如何配置 Apache 以提供 https?

  • November 24, 2016

幾個小時後,我終於設法將 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 admin@erichermansson.com
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>

要將 HTTP 重定向到 HTTPS,您需要(您可能已經完成的前 3 個步驟):

  1. 在路由器中允許埠 80。
  2. 將埠 80 轉發到您的伺服器。
  3. 在防火牆上打孔:
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
  1. 為埠 80(以及 443)定義 VirtualHost:
<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>
  1. 啟動mod_rewrite
sudo a2enmod rewrite
  1. 定義從 HTTP 到 HTTPS 的重定向,例如:
RewriteCond            %{HTTPS} !on
RewriteRule            ^/?(.*) https://%{SERVER_NAME}/$1 [R=301]

我們已經完成了第 4 步。 7. 最後重新啟動 Apache:

sudo service apache2 restart

引用自:https://unix.stackexchange.com/questions/288488