nginx虛擬主機防webshell完美版_Web服務器教程

      編輯Tag賺U幣
      nginx虛擬主機防webshell完美版,使用nginx的朋友可以參考下。

      我們先來看下nginx.conf

      server
      {
      listen 80;
      server_name www.a.com;
      index index.html index.htm index.php;
      root /data/htdocs/www.a.com/;

      #limit_conn crawler 20;

      location ~ .*\.(php|php5)?$
      {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
      }

      }

      server
      {
      listen 80;
      server_name www.b.com;
      index index.html index.htm index.php;
      root /data/htdocs/www.b.com/;

      #limit_conn crawler 20;

      location ~ .*\.(php|php5)?$
      {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
      }

      }

      nginx在80端口接受到訪問請求后,會把請求轉發給9000端口的php-cgi進行處理

      而如果修改php.ini中open_basedir= ../../../../../ ,針對兩個不同的網站,www.a.com , www.b.com都會把請求發送給9000處理,而如果先訪問www.a.com那么../../../../../就會變成A網站的根目錄地址,然后這時候如果你訪問www.b.com,那么open_basedir仍然是A網站的根目錄,但是對于B來說,又是不允許訪問的,所以就造成了,第二個站點打開以后會出現no input files,那么有什么解決辦法呢?

      我們可以把不同的虛擬主機發送到不同的php-cgi端口進行處理,當然響應的php-fpm配置文件中的open_basedir也不同。。我們來看看怎么配置。。

      首先,nginx.conf配置如下

      server
      {
      listen 80;
      server_name www.a.com;
      index index.html index.htm index.php;
      root /data/htdocs/www.a.com/;

      #limit_conn crawler 20;

      location ~ .*\.(php|php5)?$
      {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
      }

      }

      server
      {
      listen 80;
      server_name www.b.com;
      index index.html index.htm index.php;
      root /data/htdocs/www.b.com/;

      #limit_conn crawler 20;

      location ~ .*\.(php|php5)?$
      {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9001;
      fastcgi_index index.php;
      include fcgi.conf;
      }

      }

      注意:www.a.com 的請求發送到9000端口 , www.b.com的請求發送到9001端口,依次類推

      nginx配置修改了,相對的,php-fpm.conf也要修改

      每個站點建一個conf

       

      A站點

      #cp /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/php/etc/www.a.com.conf

      #vi /usr/local/webserver/php/etc/www.a.com.conf

      找到php_defines,添加

      <value name="open_basedir">/data/htdocs/www.a.com:/tmp:/var/tmp</value>

       

       

      B站點

      #cp /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/php/etc/www.b.com.conf

      #vi /usr/local/webserver/php/etc/www.b.com.conf

      找到php_defines,添加

      <value name="open_basedir">/data/htdocs/www.b.com:/tmp:/var/tmp</value>

       

      找到listen_address,修改為

      <value name="listen_address">127.0.0.1:9001</value> 注意這里的端口號

       

      最后要修改php-fpm啟動腳本

      #vi /usr/local/webserver/php/sbin/php-fpm

      注釋掉原來的 #$php_fpm_BIN --fpm $php_opts,添加

      $php_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/www.a.com.conf

      $php_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/www.b.com.conf

      啟動服務

      #/usr/local/webserver/php/sbin/php-fpm restart

      查看端口

      #netstat -tln

      開了9000 9001分別處理兩個站點請求

      兩個php-cgi主進程加載不同的conf文件,這樣就完美解決了虛擬主機webshell能跨目錄的問題

      當然,啟動之前記得conf里面的max_children,開啟php-cgi子進程數,相應要減少一些,以免造成內存不足

      來源:網絡搜集//所屬分類:Web服務器教程/更新時間:2013-04-13
      相關Web服務器教程