ubuntu中apache的ssl證書配置及url重寫

現在互聯網基本都趨向https訪問,那麼如何配置證書呢,如何將http訪問自動轉向https訪問呢,如何避免部分訪問仍保留http訪問呢?

一、https原理

  借用網上的圖(圖片來源: https://www.cnblogs.com/xiohao/p/9054355.html ),用到了對稱加密和非對稱加密.

     

 

 

 二、ubuntu的apache中ssl證書配置

  我們得到的證書一般爲以下三個文件

  •   xx.cn.key
  •   xx.cn_chain.crt
  •   xx.cn_public.crt

    網上有很多配置方法,本人只講自己最習慣的方法

     1 合併xx.cn_public.crt和xx.cn_chain.crt 文件,生成 xx.cn.pem文件, 注意: public的內容在上面,然後在下一行開始chain,如下

  

 

 

 

 

    

     2 配置ssl模塊

sudo a2enmod ssl  

 

   

     3 在我們的虛擬主機配置文件 xx.conf (目錄在/etc/apache2/sites-available/)下部分添加配置,如下     

  

 

 

 

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName www.xx.cn
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/xx/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on
        SSLCertificateFile      /etc/apache2/cert/minimgr/xx.cn.pem
        SSLCertificateKeyFile /etc/apache2/cert/minimgr/xx.cn.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
</VirtualHost>
</IfModule>

     4 重啓apache

 

sudo service apache2 restart

 

 

   到此,我們的ssl證書就配置完成了,在瀏覽器輸入https://www.xx.cn即可正常訪問

 

 

  三、url重寫

 

 

  ① 如果我們想要直接輸入www.xx.cn便可以自動訪問https://www.xx.cn,免得每次輸入https特別麻煩,怎麼辦呢?

     直接修改上述 xx.conf 文件(80+443端口虛擬主機配置文件,目錄在/etc/apache2/sites-available/). 在80端口的配置部分最下方,添加如下

  

 

 

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

   這樣,我們就能實現http自動轉向https,當我們輸入www.xx.cn便可以自動訪問https://www.xx.cn.

 

 

 

  ② 如果我們希望我們的某個頁面不會自動轉https時,比如我們實行了計劃任務,在本機每2分鐘訪問一次www.xx.cn/sync.php,我們完全信任這次訪問,沒必要用https(https更消耗資源),那麼我們

對此訪問增加例外,操作如下

 

        RewriteEngine on
        RewriteCond %{REQUEST_URI} !^/sync.php
        RewriteCond %{HTTPS} !=on
        RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [L,R]

 

     這裏進行說明的是, RewriteCond條件在不申明的情況下爲and關係,當需要用到or關係時,需要在末尾加 [OR]

     這時,當我們訪問www.xx.cn便可以自動訪問https://www.xx.cn.而當我們訪問www.xx.cn/sync.php時,卻不做任何重定向

 

  

  

發佈了16 篇原創文章 · 獲贊 0 · 訪問量 1910
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章