Apache 虛擬伺服器設定
VirtualHost
- Apache預設設定檔在/etc/httpd/conf/httpd.conf
- 管理Apache預設設定檔Include conf/extra/httpd-vhosts.conf
vim /etc/httpd/conf/httpd.conf
新增 Include conf/extra/httpd-vhosts.conf
因為是自己創的路徑,所以原本是不存在的
要自己手動新增
這樣可以方便管理httpd.conf
Http VirtualHost:
一個在連接埠 80 上的網站的典型 VirtualHost 有如下樣子
<VirtualHost *:80>
<Directory /var/www/vhosts/yoursite.com/httpdocs>
AllowOverride All
</Directory>
DocumentRoot /var/www/vhosts/yoursite.com/httpdocs
ServerName yoursite.com
</VirtualHost>
如果有使用到CNAME的話,必須把A紀錄的網域也新增個VirtualHost,像底下的kingcloud.nctu.me
實際例子:
<Directory "/var/www/html/kingcloud.nctu.me">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/html/www.kingcloud.nctu.me">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerName kingcloud.nctu.me
DocumentRoot /var/www/html/kingcloud.nctu.me
</VirtualHost>
<VirtualHost *:80>
ServerName www.kingcloud.nctu.me
DocumentRoot /var/www/html/www.kingcloud.nctu.me
CustomLog /var/log/httpd/www.access_log combined
</VirtualHost>
使用Let’s Encrypt 免費SSL證書
使用一鍵腳本
https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E
安裝
curl https://get.acme.sh | sh
安裝至home目錄
~/.acme.sh/
針對網域產生證書
acme.sh --issue -d mydomain.com --apache
例如
acme.sh --issue -d kingcloud.nctu.me --apache
完成實際情況
[Wed Feb 21 07:00:50 +03 2018]
Your cert is in /root/.acme.sh/kingcloud.nctu.me/kingcloud.nctu.me.cer
[Wed Feb 21 07:00:50 +03 2018]
Your cert key is in /root/.acme.sh/kingcloud.nctu.me/kingcloud.nctu.me.key
[Wed Feb 21 07:00:51 +03 2018]
The intermediate CA cert is in /root/.acme.sh/kingcloud.nctu.me/ca.cer
[Wed Feb 21 07:00:51 +03 2018]
And the full chain certs is there: /root/.acme.sh/kingcloud.nctu.me/fullchain.cer
產生證書完成後,要把證書移到相對的目錄,盡量不要用腳本產生檔案的位置
創建放置證書目錄
/etc/pki/ssl/網域名稱(方便管理)
複製證書至對應目錄
cp /root/.acme.sh/kingcloud.nctu.me/kingcloud.nctu.me.key /etc/pki/ssl/kingcloud.nctu.me
cp /root/.acme.sh/kingcloud.nctu.me/kingcloud.nctu.me.cer /etc/pki/ssl/kingcloud.nctu.me
另一個方法,產生自我簽署的憑證
產生私鑰
openssl genrsa -out ca.key 2048
產生 CSR
openssl req -new -key ca.key -out ca.csr
產生自我簽署的金鑰
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
複製檔案至正確位置
cp ca.crt /etc/pki/tls/certs
cp ca.key /etc/pki/tls/private/ca.key
cp ca.csr /etc/pki/tls/private/ca.csr
Https VirtualHost:
要在連接埠 443 上增加一個姊妹網站,你需要在你的檔案頂部加入下列內容
NameVirtualHost *:443
然後再加入一個類似如下的 VirtualHost 記錄:
<VirtualHost *:443>
SSLEngine on
## 選擇上面證書放置的目錄,並對應相關檔案
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
<Directory /var/www/vhosts/yoursite.com/httpsdocs>
AllowOverride All
</Directory>
DocumentRoot /var/www/vhosts/yoursite.com/httpsdocs
ServerName yoursite.com
</VirtualHost>
實際範例
NameVirtualHost *:443
<virtualhost *:443>
DocumentRoot "/var/www/html/kingcloud.nctu.me"
ServerName kingcloud.nctu.me
<directory "/var/www/html/kingcloud.nctu.me">
AllowOverride All
Options FollowSymLinks
AddDefaultCharset UTF-8
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateKeyFile /etc/pki/ssl/kingcloud.nctu.me/kingcloud.nctu.me.key
SSLCertificateFile /etc/pki/ssl/kingcloud.nctu.me/kingcloud.nctu.me.cer
</VirtualHost>
重新啟動 Apache,以讀取修改過的設定檔
systemctl restart httpd
防火牆設定:開放80、443 port
永久將 http、https 服務新增至 public 區域中
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
如果https連接不上的話,可以試試自訂開啟連接埠
sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
查看是否有開啟成功
sudo firewall-cmd --zone=public --list-all --permanent
設定 http 自動導向 https
httpd.conf
在 httpd.conf 找到 http 的相關 virtualhost, 在段落最後加上以下一行
Redirect permanent / https://www.phpini.com