Apache-Httpd
如何配置 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 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 個步驟):
- 在路由器中允許埠 80。
- 將埠 80 轉發到您的伺服器。
- 在防火牆上打孔:
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
- 為埠 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>
- 啟動
mod_rewrite
:sudo a2enmod rewrite
- 定義從 HTTP 到 HTTPS 的重定向,例如:
RewriteCond %{HTTPS} !on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301]
我們已經完成了第 4 步。 7. 最後重新啟動 Apache:
sudo service apache2 restart