顯示具有 apache2 標籤的文章。 顯示所有文章
顯示具有 apache2 標籤的文章。 顯示所有文章

2018年11月10日 星期六

[Mac]在Mac 下設定虛擬站台

Mac OSX下設定虛擬站台的操作跟Ubuntu有些類似,不太一樣的只是路徑及一些細微的觀念

Apache2伺服器的設定

在這裡需要一樣要設定httpd.conf這個檔案,他的路徑是放在/etc/apache2/httpd.conf,而且不太一樣的是,其實/etc/這個路徑基於安全理由是鏈結到/private/etc/,這是Ubuntu所沒有的。
此外,為何要來更改httpd.conf呢?那是因為 Mac OSX的虛擬站台設定是在另外一個檔案,但是預設的狀態他並沒有被Include 進來,所以我們這邊的修改純粹只是要將註解拿掉

sudo vi /etc/apache2/httpd.conf

搜尋vhosts,將Include 左邊的註解取消
# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf

或者搜尋mod_vhost_alias.so,將LoadModule左方的註解拿掉

LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so

編輯httpd-vhosts.conf

sudo vi /etc/apache2/extra/httpd-vhosts.conf

在最後面加上(紅字的地方請根據實際狀況修改)
<VirtualHost *:80>
    ServerName school.com
    ServerAlias www.school.com
    DocumentRoot "/Library/WebServer/Documents/school_post/public"
    ErrorLog "/private/var/log/apache2/school.com-error_log"
    CustomLog "/private/var/log/apache2/school.com-access_log" common
    ServerAdmin admin@school.com
</VirtualHost>

對應IP Address

接下來的設定是針對自己開發者,自己爽的,只是方便檢視自己的虛擬站台,並沒有真正寫到DNS,所以設定的Domain Name只有自己電腦可以對應解析,別台電腦是看不到的喔!要注意!!

sudo vi /etc/hosts

127.0.0.1 school.com www.school.com


參考網頁:

2018年11月7日 星期三

[Mac]localhost拒絕連線

我的Apache2有啟動,但是在瀏覽器輸入127.0.0.1或者localhost卻無法看到自己的網站
輸入
sudo lsof -iTCP:80 -sTCP:LISTEN
80埠沒有被佔用

再輸入
$ sudo /usr/sbin/httpd -k start

出現以下錯誤訊息
httpd: Syntax error on line 176 of /private/etc/apache2/httpd.conf: Expected </FilesMatch> but saw </FileMatch>

原來httpd的語法有錯誤,在/private/etc/apache2/httpd.conf第176行
</FilesMatch>誤寫成
</FileMatch>



參考網頁:

2018年10月26日 星期五

架設在Ubuntu14.04的XOOPS2.5.9網站,要改成HTTPS


SSL(Secure Sockets Layer),即安全通訊端層協定,傳輸層安全協定使用X.509認證,利用非對稱加密演算來對通訊方做身分認證,之後再交換對稱金鑰作為會談金鑰(Session key)。這個會談金鑰是用來將通訊兩方交換的資料做加密,保證兩個應用間通訊的保密性和可靠性,使客戶與伺服器應用之間的通訊不被攻擊者竊聽。(內容擷取自維基百科)

HTTPS(Hyper Text Transfer Protocol Secure,超文本傳輸安全協議),是一種透過電腦網路進行安全通訊的傳輸協定,在傳輸過程中,封包會受到加密保護,啟用SSL,才能使用HTTPS傳輸協定。

XOOPS是一套開放原始碼的內容管理系統,採用PHP語言跟MySQL資料庫。 模組化設計的功能與界面,便於建置網頁設計。XOOPS本身已經支援HTTPS協定,所以倘使伺服器主機已經將SSL服務設定好,XOOPS原則上就可以通過HTTPS協定瀏覽。

但並不是每件事情都是美好的,上面的訊息沒告訴我,假如我的XOOPS是以前架設的,而我如今想朝SSL協定、HTTPS協定靠攏,那我該怎麼辦呢?
也因為是以前的就架好的網站,瀏覽器網址列前總是出現「不安全」三個字,到底危不危險,我應該怎麼辦呢?

註1:不安全其實只是說網站沒有SSL憑證,傳輸封包時會以明碼傳遞。學校網頁又沒什麼機密資訊,明碼傳遞也沒差,但是當瀏覽器評斷你的網站不安全,就會讓有些人誤以為這個網站有病毒、有危險,總之就是不喜歡)。

我的學校網站是用XOOPS架設的,印象中是兩年前使用2.5.7版開始架設,後來經過幾次的升級改版,倘使這時候打掉重練,要通過SSL憑證驗證,是非常容易,但內容重製卻是非常辛苦的,所以我決定直接想辦法將HTTP的網站改造成HTTPS的網站,以符合SSL規範。

簡單分析一下可能會遇到的問題:

  1.  需要申請SSL及設定。
  2.  修改XOOPS主要設定檔mainfile.php的Schema資訊
  3.  修改XOOPS資料庫中自身網站的URI連結
  4.  處理混合式內容警告
  5.  強迫HTTP網址自動轉為 HTTPS
  6.  持續不斷的修正


一、申請SSL及設定

要將XOOPS設定為HTTPS連線,首先要先有可信任的SSL憑證,在這邊我是參考How To Secure Apache with Let's Encrypt on Ubuntu 14.04以及ET Wang的用certbot申請SSL,五分鐘搞定,申請了Let't Encrypt免費憑證,為什麼會選用Let't Encrypt的原因,主要是因為他申請非常容易簡單,此外它還有一個certbot機器人,只要執行這個機器人指令,他就會自動幫你把憑證延期。

了解這句話的意思嗎?一般來說,免費憑證通常都只有三個月的生命週期,期限到了,就必須還要展期或重新申請,這對我們這種懶人而言是件麻煩的差事,所以啦!如果有機器人可以代勞,我們只要把指令加入排程中,他就會替我們自動展期,但是還是要附帶一提,免費的憑證雖然可以幫你通過瀏覽器的SSL檢測,但是若是不幸發生封包傳輸過程中,加密被破解時,這些免費憑證公司也是免責的,你無法對這些免費憑證公司要求賠償或申訴,所以假如你的網站資料很重要、很機密,最好的做法還是花錢去申請公信力佳的憑證喔!

前提:

  • Ubuntu 14.04,以及擁有sudo能力的使用者
  • 要有完整的網域名稱

Setp 1 - 下載Let's Encrypt用戶端

想要將Let's Encrypt憑證安裝在主機上,前提是要安裝Certbot軟體,但因為他第三方軟體,所以要先將他寫入儲存庫中,才方便使用apt安裝與更新。

1.將第三方軟體certbot加入repository
sudo add-apt-repository ppa:certbot/certbot

2.更新
sudo apt-get update

3.安裝 python-certbot-apache
sudo apt-get install python-certbot-apache

Setp 2 - 設定SSL憑證

1. 設定SSL憑證、指定完整的網域、自動轉換一次搞定,只要一個指令,這過程中會問你一些問題,就請你自己回答吧,或者請你參考ET Wang的certbot申請SSL,五分鐘搞定說明。(紅字的地方,要改成你的完整網域)
sudo certbot --apache -d example.com

程式執行成功後,可以到以下網站檢測,SSL憑證是否已經啟用。(紅字的地方,要改成你的完整網域)
https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest

Setp 3 - Certbot自動更新

1.測試更新
sudo certbot renew --dry-run

2.寫入排程,每三個月更新一次憑證
0 0 * */3 * /root/certbot-auto renew --quiet


二、修改XOOPS主要設定檔mainfile.php的Schema資訊

當你上面的憑證設定完成後,基本上你若使用https://example.com,瀏覽你的網站時,你會發現版面是錯亂的,這主要問題是控制版面的css、js檔,被指定為http路徑,在目前的HTTPS狀況下這些css、js檔無法順利被讀取。

sudo vi /var/www/html/mainfile.php

大約20行左右,自動取得網址的副程式中
parse_url()函式中的http改成https
if(!function_exists('get_xoops_url')){
  function get_xoops_url(){
    $u=parse_url("https://".$_SERVER["HTTP_HOST"].$_SERVER['REQUEST_URI']);

註2:這地方其實有我所不解的地方,XOOPS另有一個判斷HTTPS的伺服器變數$_SERVER['HTTPS'],但是它卻為空,無法自動判斷。

三、修改XOOPS資料庫中自身網站的URI連結

修改到這裡,畫面會比較正常,但是許多的連結仍是http的,而這些URI連結是寫入在資料庫中,所以就參考以前寫的Xoops移機的步驟,把這些原本是http的網址改成https,在這裡因為會修改到資料庫,所以強烈建議:倒出來的sql檔,一定要備份再備份,避免難以回復的錯誤

先將舊機網頁停機,避免還有人透過網頁將資料寫入資料庫

1. sudo service apache2 stop

2.在舊機器上,利用mysqldump將資料備份出來

mysqldump  -uroot  -p  --default-character-set=utf8  xoops > /home/webadmin/xoops.sql

3.編輯資料庫備份檔,將舊IP取代為新IP

sudo vi /home/webadmin/xoops.sql
在vi模式下執行取代工作
格式
:1,$s/舊IP/新IP/s

執行以下的指令
:1,$s/http:\/\/www.dches.chc.edu.tw/https:\/\/www.dches.chc.edu.tw/g
:1,$s/http:\/\/163.23.112.196/https:\/\/163.23.112.196/g

註3:
紅字的地方請根據自己的狀況修改。這裡的「\/\/」這不是W(打不溜)喔!「\」是拖曳符號,後面接續著「/」,repeat兩次,,這樣才能正確解析出「\\」

4.在新機器上將資料庫備份檔匯入(前提是新機器已經裝了Xoops)

mysqladmin -uroot -p create xoops
mysql -uroot -p  xoops < /home/webadmin/xoops.sql

5.重啟Apache2

sudo service apache2 start

四、處理混合式內容警告

什麼是混合式內容呢?簡單來說,就是你的網頁中嵌入的圖片、iframe框架、css、js....等等,混雜了HTTP以及HTTPS鏈結兩種樣式,既然現在已改成SSL認證,傳統的HTTP練結是不被允許的,所以瀏覽器依舊不秀出鎖頭讓你輕鬆通過。

其實上面我們上面第二點、第三點修改mainfile.php以及修改資料庫的動作,主要就是在修改混合式內容警告的問題,但難免仍有漏網之魚,像是自己手動輸入網址的圖片或是自訂頁面的框架(例如iframe),有些不見得都有寫入資料庫中,這時就得手動尋找手動修正。

我遇到的狀況比較單純,只剩幾張圖片有混合式問題,我是利用FireFox火狐狸,在頁面上點選右鍵 /「檢視頁面資訊」/「媒體」,查看網頁中的圖片,有無http開頭的,如果有的話,就把它修正成HTTPS連結也可以檢視的狀態。

舉例來說:
我的網頁中有連結指定家庭教育中心的一張圖檔,我先試著把他的協定改成https://chc.xxx.xxx.xxx/img_helpline.png
看看他會不會正常顯示,如果該網站也有申請SSL憑證的話,這樣子的修正就正常顯示,但是假如該網站並沒有使用SSL認證,這樣的圖片鏈結指定當然是錯誤的,所以啦,要嘛就不要再連到那裡去,要嘛就乾脆把該圖片下載回到自己主機上,重設連結,但須要提醒的是,如果採用第二種做法,要注意智慧財產權的問題喔,因為你已經下載回來己用,公開散播囉!



五、強迫HTTP網址自動轉為 HTTPS

好了,花了這麼多時間修改,基本上已經OK了,但是別人如果還是輸入http://xxx.xxx.xxx要來瀏覽你的網站,基本上還是不安全的嘛,那你幹嘛還要花那麼多時間修改,所以只好放大絕了,修改主機的Apache設定,將凡是連結到80埠瀏覽網頁的,全導向443埠。
寫法很多種,有人說要寫到.htaccess,但是我比較偷懶,直接修改Apache虛擬站的000-default.conf就好了,這樣最快。而倘使你寫入的規則沒有執行,要嘛就是你的mod_rewrite模組沒有裝、要嘛沒有啟用,請參考[Rewrite note.] 重寫規則筆記這篇。


sudo vi /etc/apache2/sites-enabled/000-default.conf

在</VirtualHost>前的任一位置,寫上

▲寫法1: RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

或是
▲寫法2:RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

或是
▲寫法3:
Redirect permanent / https://www.dches.chc.edu.tw
如果上面的做法都不成,第三種做法是,只要是連到網站,強制導到https://www.dches.chc.edu.tw

註4:紅字的地方要改喔,不然就全導向我們學校了,第三種寫法其實有點小問題,還是建議先嘗試使用寫法1或寫法2

六、持續不斷地修正

沒有人可以跟你保證,經過上面的修正後一切都可以高枕無憂,上面介紹的方法,應該可以解決大部分的移轉問題,但接下來依舊要不斷地檢視網頁內容,尤其是網站分枝如果夠多,混合式內容警告還是有可能會出現,一旦出現,按上述方法持續不斷地修正喔!


參考網站:

2016年6月13日 星期一

查看目前Apache有多少程序數

ps aux | grep apache | wc -l

ps aux => 顯示目前電腦執行的程序
wc -l => 計算有幾列
程序數的設定關乎於/etc/apache2/apache2.conf內容

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>


2015年8月24日 星期一

AH00557: apache2: apr_sockaddr_info_get() failed for eweb

今天重啟Apache2時出現了
AH00557: apache2: apr_sockaddr_info_get() failed for eweb
的錯誤

經檢查後發現
我的/etc/hosts、/etc/hostname兩個檔案內的主機名稱竟然輸入不一樣的內容
改正之後,再重啟apache2就好了

2015年8月7日 星期五

[ZendFramework2]設定Apache's虛擬站台

目的是希望在同一台伺服器下,建立不同的虛擬站台,以方便日後開發不同專案。

設定的地方有兩個:一個是/etc/hosts下的設定。另一個是/etc/apache2/site-available/000-default.conf

首先
sudo vi /etc/hosts
127.0.0.1 localhost cms.localhost

再來
sudo /etc/apache2/site-available/000-default.conf
如果Apache's版本是2.4以後的版本就改成以下的設定

<VirtualHost *:80>
   ServerName localhost
   DocumentRoot "/var/www/html"
</VirtualHost>
<VirtualHost *:80>
   ServerName cms.localhost
   DocumentRoot "/home/xxx/myweb/public"
   <Directory "/home/xxx/myweb/public">
      DirectoryIndex index.php
      AllowOverride All
      Require all granted
   </Directory>
</VirtualHost>

若Apache是2.4以後的版本(不含2.4),則要改成以下的設定
<VirtualHost *:80>
   ServerName localhost
   DocumentRoot "/var/www/html"   //根據實際路徑設定
   <Directory "/var/www/html">    //根據實際路徑設定
      AllowOverride All
      Order allow,deny
      Allow from all
      Require all granted
   </Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerName cms.localhost
   DocumentRoot "/home/xxx/myweb/public"  //根據實際路徑設定
   <Directory "/home/xxx/myweb/public">    //根據實際路徑設定
      DirectoryIndex index.php
      AllowOverride All
      Order allow,deny
      Allow from all
      Require all granted
   </Directory>
</VirtualHost>

都設定好之後,不要忘記了重新啟動Apache
sudo service apache2 restart

此時打開瀏覽器輸入
localhost以及cms.localhost就會出現兩個不同的網頁站台

2013年8月14日 星期三

Ubuntu下安裝Apache2 Server

安裝Ubuntu後繼續安裝AMP
 1.指定安裝 mpm-prefork 版 Apache2:
 #sudo apt-get install apache2 apache2-mpm-prefork

 2.安裝PHP5:
    sudo apt-get install php5 libapache2-mod-php5 php5-gd php5-mysql

 3.安裝MySQL:
    sudo apt-get install mysql-server mysql-client
 安裝的過程會要求輸入資料庫的密碼

4.安裝phpMyAdmin
    sudo apt-get install phpmyadmin

預設網頁 /etc/apache2/sites-available/default 的設定檔中:
DocumentRoot /var/www

指定了預設網頁目錄,但是可透過連結指定到家目錄下
    cd /var/www
    sudo rm www
    ln -s /home/xxx/html /var/www
如此一來,在家目錄的html下新增網頁,網頁就可更新。

 參考網頁:



2013年8月3日 星期六

Apache2的模組化功能

從apache更新到apache2以後,最大的差別就是apache2改採用模組化的方式開啟各種功能,不再是httpd.conf一個檔打天下啦~
(如果你有認真看apache2.conf裡面的設定,會發現其實這邊也不過就是apache2.conf一檔打天下,偷懶的人也可直接把以前的httpd.conf複製到這邊的httpd.conf就可以收工啦:P)
簡單說明各種路徑的意義(再度重申,其實看apache2.conf就可以知道囉):
/apache2.conf apache2最基本的設定檔,所有週邊的設定檔匯入都是寫在這裡。
/httpd.conf   剛裝好apache2會看到裡面是空的!那瞬間我腦袋也是空白的!這裡的設定檔會被apache2.conf讀入,所以其實設定檔也可以寫在這邊啦...
/ports.conf   你的httpd服務預設使用的port設定寫在這邊
/conf.d/      其他預設會被載入的設定檔寫在這
底下就是最大改變,是目錄喔!
/mods-available/        可使用但尚未載入的module
/mods-enabled/          已經載入使用當中的module
/sites-available/       本機設定檔,例如根目錄和virtual host等
/sites-enabled/         開啟使用中的本機設定檔
要載入成為開啟使用的方法第一種就是用ln -s 鍵結,第二種是apache2提供的功能,a2enmod和a2dismod。 以下用php5當例子,用法如下:
第一種-
    ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf
    ln -s /etc/apache2/mods-available/php5.load /etc/apache2/mods-enabled/php5.load
要關閉就移掉就好啦。
ps.也可以寫成
    ln -s /etc/apache2/mods-enabled/php5.conf
    ln -s /etc/apache2/mods-enabled/php5.load

第二種-
    a2enmod php5      <-開啟php5的功能
    a2dismod php5     <-關閉php5的功能
記得,以上的功能或設定檔改變後都要重新啟動apache2喔~
重新啟動的方法很多,看你喜歡用/etc/init.d/還是service都可以

參考網站:
 資訊組工作日誌

讓Apache2順利讀取中文檔名

學務系統之應用已深植本校網站及行政業務,但因其編碼支援為big5,而非現今主流--utf8,而且同仁在使用時仍喜歡中文檔名或資料夾,造成瀏覽器無法讀取問題,或者必須進一步設定才能順利讀取中文檔名或路徑。
今天上網時,無意間發現原來只要設定好apache,就能解決這個困擾。
一、要安裝mod-encoding模組:
  • sudo apt-get update
    sudo apt-get install libapache2-mod-encoding
ps.安裝完libapache2-mod-encoding後,並沒有自動產生encoding.conf檔

二、增加encoding.conf設定檔
    vi /etc/apache2/mods-available/encoding.conf 
  • 輸入下列內容:
    <IfModule mod_encoding.c>
    EncodingEngine on
    NormalizeUsername on
    SetServerEncoding Big5
    DefaultClientEncoding Big5 UTF-8
    AddClientEncoding "(Microsoft .* DAV $)" Big5 UTF-8
    AddClientEncoding "Microsoft .* DAV" Big5 UTF-8
    AddClientEncoding "Microsoft-WebDAV*" Big5 UTF-8
    </IfModule> 
三、設定encoding.load及encoding.conf連結
    cd /etc/apache2/mods-enabled
    ln -s ../mods-available/encoding.load
    ln -s ../mods-available/encoding.conf
    ps.也可以下a2enmod encoding指令
四、重新啟動apache
    /etc/init.d/apache2 restart
五、這樣apache就可順利讀取中文檔名或路徑了。


參考網站:
 webadmin of ymes

延深閱讀:
Apache2的模組化功能