Apache 虛擬伺服器設定

VirtualHost

  1. Apache預設設定檔在/etc/httpd/conf/httpd.conf
  2. 管理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
Last modification:December 8, 2019
If you think my article is useful to you, please feel free to appreciate