亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

nginx+fastcgi+php安全虛擬主機隔離配制方法

添加時間:2015-7-12 0:25:39  添加: 思海網絡 作者:佚名 

nginx+fastcgi+php安全虛擬主機隔離配制方法:

1,php.ini 安全配置


2,通過啟動多個php-cgi怎么樣實現靈活配制

3,nginx fastcgi_pass 怎么樣控制發到不同的fastcgi

 

如果你對這些都比較清楚,可以忽略跳過下面的了。

 

1.php.ini 安全配置

配制項目
    

說明

allow_url_fopen=Off
allow_url_include=Off
    

禁止遠程包含

register_globals=Off
    

禁止自動注冊全局變量

open_basedir="\tmp:"
    

限制操作文件路徑(具體站點具體路徑)

safe_mode=Off
safe_mode_gid=Off
    

禁止使用安全模式

max_execution_time=30
max_input_time=60
    

限制腳本執行時間(避免耗時限制語句)

memory_limit=32M
upload_max_filesize=5M
post_max_size=8M
max_input_nesting_levels=64
    

限制內存,及文件尺寸

display_errors=Off
log_errors=On
error_log="/var/log/nginx/phperror.log"
    

安全的錯誤配制

fastcgi.logging=0

cgi.fix_pathinfo=0
    

禁止fastcgi 的pathinfo

最近nginx漏洞在此

expose_php=Off
    

隱藏php的版本信息

enable_dl=Off
    

關閉dl參數

disable_functions =phpinfo,exec,passthru,shell_exec,system,proc_open,

popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
    

禁止惡意函數執行

 

以上我都不打算多說了。參數意思可以看看php手冊。

 

2.fastcgi  啟動腳本

a.為每個站點建立一個獨立用戶,都屬于同一個組

[root@localhost ~]# groupadd webuser

[root@localhost ~]# useradd   -M   -G webuser  -s /sbin/nologin web-a.com

 

b.建立fastcgi通用啟動腳本

 

 [root@www]# egrep -v '#.*|^$' php-cgi.sh

. /etc/rc.d/init.d/functions  

SPAWNFCGI="/usr/local/bin/spawn-fcgi" 

FCGIPROGRAM="/usr/bin/php-cgi" 

FCGIPROGRAM2="$FCGIPROGRAM $CGI_OPTIONS" 

PHP_FCGI_MAX_REQUESTS=500 

FCGI_WEB_SERVER_ADDRS="127.0.0.1" 

ALLOWED_ENV="SHELL PATH USER" 

if test x$PHP_FCGI_CHILDREN = x; then  

PHP_FCGI_CHILDREN=5 

fi  

prog="${tmpfile%.*}-fcgi"

FCGI_SOCKET="/tmp/$prog.sock"

FCGI_PIDFILE="/var/run/$prog.pid"

FCGI_LOCKFILE="/var/lock/subsys/$prog"

export PHP_FCGI_MAX_REQUESTS  

export FCGI_WEB_SERVER_ADDRS  

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS" 

if test x$UID = x0; then  

EX="$SPAWNFCGI -s $FCGI_SOCKET -f \"$FCGIPROGRAM2\" -u $USERID -g $GROUPID -C $PHP_FCGI_CHILDREN -P $FCGI_PIDFILE" 

else  

EX="$SPAWNFCGI -s $FCGI_SOCKET -f \"$FCGIPROGRAM2\" -C $PHP_FCGI_CHILDREN -P $FCGI_PIDFILE" 

fi  

E=  

for i in $ALLOWED_ENV; do  

E="$E $i=${!i}" 

done  

RETVAL=0 

status() {

local pid

        echo $"Usage: status {program}"

        return 1

fi

pid=`pgrep $base -u $USERID | sed 's/\n/\t/g'`

if [ -n "$pid" ]; then

        echo $"${prog} (pid $pid) is running..."

        return 0

fi

if [ -f $FCGI_PIDFILE ] ; then

        read pid < $FCGI_PIDFILE

        if [ -n "$pid" ]; then

                echo $"${prog} dead but pid file exists"

                return 1

        fi

fi

if [ -f $FCGI_LOCKFILE ]; then

        echo $"${prog} dead but subsys locked"

       return 2

fi

echo $"${prog} is stopped"

return 3

}

start() {  

        echo -n $"Starting $prog: "   

        daemon env - $E $EX  

chmod 777 $ FCGI_SOCKET

        RETVAL=$?  

        echo  

        [ $RETVAL -eq 0 ] && touch $FCGI_LOCKFILE  

        return $RETVAL  

}  

stop() {  

        echo -n $"Stopping $prog: "   

                rm -f $FCGI_PIDFILE $FCGI_SOCKET  

                RETVAL=$?  

                [ "$RETVAL" -eq 0 ] && success "startup" || failure "startup"

                echo  

                [ $RETVAL -eq 0 ] && rm -f $FCGI_LOCKFILE  

                return $RETVAL  

}  

case "$1" in  

start)  

start  

;;  

stop)  

stop  

;;  

restart)   

stop  

start  

;;  

condrestart)  

if [ -f $FCGI_LOCKFILE ]; then  

stop  

start  

fi  

;;  

status)  

status $FCGIPROGRAM  

RETVAL=$?  

;;  

*)  

echo $"Usage: $0 {start|stop|restart|condrestart|status}"   

RETVAL=1 

esac  

exit $RETVAL

 

上面這個腳本是我用網上腳本改造而成,主要修改,當重啟,或者stop 莫個站點php-cgi 實際是將所有站點都停止了。 這樣不符合獨立虛擬主機的獨立管理原則。

 

 c.獨立站點的 啟動腳本

web-chaohao.com通用包含腳本:

[root@www]# egrep -v '#.*|^$' www.a.com.sh

export PATH=/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin;

export LANG=zh_CN.GB2312;

#啟動php-cgi 線程數量

PHP_FCGI_CHILDREN=30;

#啟動賬戶

USERID= web-a.com;

#啟動群組

GROUPID=webuser;

CGI_OPTIONS=" -d open_basedir=/home/www/a/:/tmp/ -C  ";

TMPPATH=`dirname $0`;

. $TMPPATH/php-cgi.sh;

 

從上面腳本應該可以看出,這個是每個站點一個腳本,然后腳本,包含 通用腳本 php-cgi.sh

www.a.com.sh  這個里面有個CGI_OPTIONS 配制選項,可以控制open_basedir 允許的站點。 當然,也可以配置其它php.ini  key=value 參數。

值得注意的是:

i. 多個配制的話,可以用多個-d 參數。  -d open_basedir=/tmp -d display_errors=on  這樣就會覆蓋掉php.ini 里面配置。 呵呵,比較簡單吧。

ii.很奇怪是當 php -v 版本是:5.1.6好像不起作用,后來升級到5.2.6 配制就生效了。 php-cgi -d 后面設置不生效的情況下,請看下你的php版本。

iii.php-cgi.sh 與站點腳本www.a.com.sh 放到同一目錄.

 

d.啟動站點

chmod +x www.a.com.sh

./www.a.com.sh

Usage: ./www.chaohao.com.sh {start|stop|restart|condrestart|status}

可以帶參數。

./www.a.com.sh start

Starting www.a.com-fcgi:                             [  OK  ]

 

ps aux | grep php-cgi

可以看到腳本已經啟動

 0.2  0.1 82040 7692 ?        Ss   16:35   0:00 /usr/bin/php-cgi -d open_basedir=/home/www/html/www.a.com/:/tmp/ -C

................

 

e.腳本解析

上面腳本,會自動創建

 /var/run/腳本文件名-fcgi.pid

/tmp/腳本文件名-fcgi.sock

文件。 如果執行腳本是,www.a.com.sh

創建文件對應是:/var/run/www.a.com-fcgi.pid 以及 /tmp/www.a.com-fcgi.sock

 

建議站點名稱,最好能夠跟用戶名,以及腳本名稱統一。如果你的站點是 www.b.com

useradd 設置為 web-b.com

shell腳本設置為b.com.sh

 

3.nginx sever配制

[root@web49 nginx]# egrep -v '#.*|^$'  /etc/nginx/host/webhost.conf

server {

listen       8888;

#綁定域名

    server_name  www.a.com www.b.com;  

    access_log   /var/log/nginx/chaohao.access.log main;

    error_log    /var/log/nginx/chaohao.error.log;

    index index.php index.shtml;

    set $test_host www.chaohao.com;

    set     $Root_Path /home/www/html/$test_host;

    root    $Root_Path/html;

    set $sock_file www.chaohao.com-fcgi.sock;

    if ($host ~* www.a.com|www.b.com)

    {

         set $sock_file www.a.com-fcgi.sock;

    }

    set $sock_file unix:/tmp/$sock_file;

    location ~ \.php$ {

           include        /etc/nginx/fastcgi_params;

           fastcgi_param  _FILENAME  $document_root$fastcgi__name;

           fastcgi_param  Root_Path    $Root_Path;

           fastcgi_param  Root_HTML    $document_root;

           fastcgi_index  index.php;

           fastcgi_pass   $sock_file;

     }

 }

 

如果域名與站點設計比較好,可以直接通過讀取$host 里面變量,作為fastcgi_pass 參數

注意:

fastcgi_pass 如果不支持變量,需要注意了。這個可能與你的nginx 版本有關系。

測試發現 fastcgi_pass  nginx 0.639不支持使用變量。后來使用0.7.65版本 支持使用變量了

關鍵字:nginx、fastcgi、php、安全、虛擬主機

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站