Archive

文章標籤 ‘apache’

如何同時在Apache運行多版本的php(在windows上)

2021年1月23日 尚無評論

本次升級最大的動作之一就是把先前一直想要升級PHP的念想給實現了,因為目前這台是PHP5,而且上面還有其它服務在運行不方便直接升級

所以就只好在同一個apahce實作同時間運行多版本的PHP了

一開始看了一些文件,原本是想用最單純的方式 VirtualHost 再搭配使用不同版本的PHP engine ,看似可以,網路上好像也有蠻多人有類似這樣的說法

但實測結果,這是不可行的,至少在windows 環境下是不可行的,因為會遇到 這個警訊「Only first PHPINIDir directive honored per configuration tree – subsequent ones ignored」

因為php.ini 的路徑只能設定一個,就算在VirtualHost 裡設定也不行,只要出現兩次也會報錯,但因為php5 和php7差異太大,如果是同php5.5 or php5.6,那採用同一個 php.ini或許還是可行,但看來這方向就要調整才行。

後來改採 Apache FastCGI ASF module的整合方式,利用執行CGI的方式執行PHP來達到運行多版本,廢話不多說,直接說我的作法:

  1. 到此連結 https://www.apachelounge.com/download/VC15/  下載mod_fcgid ,要注意你的VC版本,不合就自己換。
  2. 解開後mod_fcgid 後放到apahce modules目錄
  3. 修改apahce conf/httpd.conf加上

    • LoadModule fcgid_module modules/mod_fcgid.so
    • 解開 Include conf/extra/httpd-default.conf  
    • 如果 Include conf/extra/httpd-vhosts.conf 沒解開也一定要解開才行
  4. 修改conf/extra/httpd-default.conf 加上以下片斷在最下方

    FcgidInitialEnv PATH "c:/php-5/;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;"
    FcgidInitialEnv SystemRoot "C:/Windows"
    FcgidInitialEnv SystemDrive "C:"
    FcgidInitialEnv TEMP "C:/WINDOWS/Temp"
    FcgidInitialEnv TMP "C:/WINDOWS/Temp"
    FcgidInitialEnv windir "C:/WINDOWS"
    FcgidIOTimeout 64
    FcgidConnectTimeout 16
    FcgidMaxRequestsPerProcess 1000
    FcgidMaxProcesses 50
    FcgidMaxRequestLen 8131072
    # Location of php.ini
    FcgidInitialEnv PHPRC "c:/php-5/"
    FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
    <Files ~ "\.php$">
      AddHandler fcgid-script .php
      FcgidWrapper "c:/php-5/php-cgi.exe" .php
      Options +ExecCGI
    </Files>
    
  5. 修改你的conf/extra/httpd-vhosts.conf 在你準備要用PHP7的domain Virtual Host之中加上以下設定 

    FcgidInitialEnv PHPRC "c:/php-7"
    <Files ~ "\.php$">
    	php_flag engine off
    	AddHandler fcgid-script .php
    	FcgidWrapper "c:/php-7/php-cgi.exe" .php
    </Files>
    
    
  6. 再重啟Apache,就完成啦,實測一下兩個不同的domain 就分別顯示不同的版本

目前大多人的寫法都是把多版本PHP運行都利用mod_fcgid搭配VirtualHost 來實現,但我這裡的作法就是和別人不一樣,原本的PHP作法我都不動,我是直接在想要的VirtualHost  domain  加上mod_fcgid 來實現運行指定的PHP版本 ,我發現這樣用之後Include conf/extra/httpd-default.conf   這個不使用 也不用加也不會有任何影響

另外,原本在測試使用基本方式達到運行多版本的PHP,卡在php.ini 設定上,我有發現有文章提及不設定php.ini DIR Path,改指向使用php 程式路徑中的ini,利用windows PATH參數指定搜尋的路徑,可能是一條可行的路,不過我都試成功了就不再多花時間去TRY了,提供以下連結,讓有興趣的人可以去試試看(不過文章有點舊請要有心理準備)

Windows環境讓PHP4與PHP5共存,使用Apache

Categories: PHP Tags: ,

Apache Porxy 代理強化安全性

2011年2月18日 尚無評論

又一案例客戶主機變慢了,經查apache log出現了很多怪log

82.146.62.95 – – [23/Feb/2011:13:58:09 +0800] “GET http://zevsmail1.joinvps.com/test_url/dump.php HTTP/1.0” 404 282
82.146.62.95 – – [23/Feb/2011:13:58:09 +0800] “CONNECT 74.125.232.49:443 HTTP/1.1” 400 378
187.158.158.47 – – [23/Feb/2011:13:58:09 +0800] “GET http://www.larednoticias.com/ HTTP/1.1” 200 335
68.169.86.222 – – [23/Feb/2011:13:58:09 +0800] “POST http://www.navanakorn.co.th/reply.php HTTP/1.1” 404 286

82.146.62.95 – – [23/Feb/2011:13:58:09 +0800] “GET http://zevsmail1.joinvps.com/test_url/dump.php HTTP/1.0” 404 28282.146.62.95 – – [23/Feb/2011:13:58:09 +0800] “CONNECT 74.125.232.49:443 HTTP/1.1” 400 378187.158.158.47 – – [23/Feb/2011:13:58:09 +0800] “GET http://www.larednoticias.com/ HTTP/1.1” 200 33568.169.86.222 – – [23/Feb/2011:13:58:09 +0800] “POST http://www.navanakorn.co.th/reply.php HTTP/1.1” 404 286

看來好像變成了代理伺服器,經瞭解,原來他的apache開了mod_proxy, 上網查了一下~~這個東東可不能亂用~@@,但客戶又有系統上的需求,非開不可,所以只好看看有什麼可以防治,以下是防範的作法,與大家分享:

1.似乎網路上有人建議如果是只需要domain 的網站,那該IP封起來不要給連即可!!  這是不錯的方法~可惜客戶連IP都要用@@

2.在IP那個預設的Directory 裡,將 ProxyRequests Off (不過怪了~似乎其它Virtual Host 有使用好像就關不起來,不過還是加上去保平安)

3.為了增加apache的安全性,所以只限GET POST OPTIONS 才能使用

<Directory “/var/www/html/root”>
AllowOverride none
Options FllowSymLinks
# 先允許能夠進行 GET, POST 與 OPTIONS 啦!
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>

# 再規定除了這三個動作之外,其他的動作通通不允許啦!
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

經這樣使用後,系統運行後就正常多了,只是原本要找代理的請求都轉變成找不到檔案的error 佔滿了error log,原本是想看能不能將連至本網站但 GET 其它網站連結 都擋掉,想連log都看不到,不過查了一下~看來沒法子!!    只好等這個IP從Free代理主機名單中自行消失。

參考資料:

Apache mod_rewrite啟用注意事項

2011年1月26日 尚無評論

雖然已經對Apahce 的 mod_rewrite有一定的瞭解,但還是常卡關
最近有發生在某一個Virtual Host設定了rewrite的機制,但.htaccess怎麼試都沒有效果,後來才知~要將目錄設定如下才能啟用

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

印象中卡關好幾次的原因都是它,所以在此寫下提醒自己~^^||

Categories: 系統設定 Tags: ,

Apahce強化php安全性防駭客木馬設定

2011年1月21日 尚無評論

最近碰到一個案例,他的網站已運行好年之久但一直都沒有進行安全更新,導致上頭經年累月的被植入不少木馬程式,例如超級PHP木馬帶批量掛馬,及WEBSHELL, 真是有夠給他慘的啦,搞的整個網站像駭客練功的活靶,雖然砍掉重練好,但還是有些因素要救活他,所以首先要先除掉這些東東~可藉由一些工具例如PHPCMS木馬掃瞄器或是php 木馬, 惡意程式查殺工具,然後再將他的apache及php升級並加上mod_limitipconn及mod_bandwidth然後進行PHP的設定,防止php木馬執行webshell,打開safe_mode,並在php.ini中中disable_functions設定

safe_mod=On
disable_functions= passthru,exec,shell_exec,system

也可再增加防止php木馬讀寫文件目錄
在php.ini中disable_functions後面加上php處理文件的函數,如包含剛剛設定的就要變成以下設定

disable_functions= passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir
,fopen,fread,fclose,fwrite,file_exists
,closedir,is_dir,readdir.opendir
,fileperms.copy,unlink,delfile

大功告成,php木馬就無法拿我們執行一些系統程序了

不過還有一點要設定的,網頁程式有時會寫一些上傳程式給會員及非會員使用,如果上傳上去程式碼能再被執行就糟糕了,所以除了上傳上去後更改檔名~如遇到副檔名是PHP就更名外,以下這招也是不錯的選擇

我們可以設定不讓上傳的目錄執行PHP,可在Apache的httpd.conf設定以下參數值:

<Directory “/home/a/upload”>
AllowOverride None
php_flag engine off
Allow from all
</Directory>

如果你只允許你的php在web目錄裡操作,也可以在httpd.conf中加上

php_admin_value open_basedir /home/a

這樣如果有要使用這個之外的檔案時就會有錯誤訊息 Warning: open_basedir restriction in effect. File is in wrong directory in xxxxxxx

這樣基本木馬及WEBSHELL就防止了,但在測試發現,或許已經中太久了,可能已經成為駭客界的教學教材,三不五十的就是有人會丟一些怪網址TRY漏洞,多半都是對岸來的,真是煩呀~!!

發現這種怪連結一多,還蠻佔資源的,所以做了一個小小的rewrite設定,來防止這種怪連結,因為這個網站本身沒有用rewrite,所以在.php後有加上斜線的怪連結就轉到國家資通安全會報技術服務中心,呵~直接轉過去通報

<IfModule mod_rewrite.c>
RewriteEngine On
RedirectMatch /(.*)\.php/(.*) http://www.icst.org.tw/
</IfModule>

OK~經過這樣的設定後,觀察幾天後看來有用~~希望各位駭先生能就此放過它吧!!

參考資料:

Categories: 系統設定 Tags: , ,