1. 程式人生 > >php7.1 多例項配置及nginx對應配置

php7.1 多例項配置及nginx對應配置

本文主要針對如何通過配置php7.1的php-fpm多例項,及nginx對多例項負載均衡之配置,不涉及安裝。

1、負載均衡伺服器(server)檢視nginx配置檔案 。

可以看到此處user使用的是nginx 

2、應用伺服器(web)檢視 php-fpm配置檔案

發現這裡php-fpm中的user是apache 

修改user=nginx  由於應用伺服器沒有nginx使用者所以啟動失敗。

3、web伺服器新增使用者nginx;

#useradd nginx;

4、web伺服器php-fpm配置檔案 www.conf修改詳情如下 :

   一、修改user=apache 為nginx

   二、修改listen埠地址為:listen = 0.0.0.0:9000 

   三、新增allowed_clients地址:listen.allowed_clients = 127.0.0.1,server的ip地址 

5、修改php-fpm最大執行緒數(由於web伺服器記憶體8G,所以這裡我最多開了三個php-fpm)

從實踐來看,單例項最多可以開到200-300左右的程序,開到500以上就容易出錯了。 每個程序佔用的記憶體在5M-15M左右,按平均10M計算,500個程序也只有5G,而現在很多高效能機都是64G甚至128G的記憶體,這樣單例項是無法全面使用上記憶體資源的。

pm.max_children = 256  6、修改啟動時開啟的執行緒數 

pm.start_servers = 20

至此php-fpm基本配置完畢。

6、將php-fpm配置檔案www.conf複製www1.conf,www2.conf 修改監聽埠為:9001,9002 。

7、啟動多例項。

php-fpm --config-php /etc/php-fpm.d/www.conf

php-fpm --config-php /etc/php-fpm.d/www1.conf

php-fpm --config-php /etc/php-fpm.d/www2.conf

8、#ps -ef|grep php-fpm 

檢視到啟動了有一個php-fpm程序 。表示Php-fpm多例項啟動成功。

下面進行nginx相關配置。

在/etc/nginx/conf.d中增加配置檔案myserver.conf 內容如下:

upstream myfastcgi {
server 192.168.1.10:9000 weight=1; #fpm例項
server 192.168.1.10:9001 weight=1; 
server 192.168.1.10:9002 weight=1; 
}
server {
    listen 80 ;
	 root 指向fpm例項機伺服器的資料夾目錄絕對地址,末尾資料夾不帶斜槓; #指向fpm例項機伺服器的資料夾目錄
  #禁止Scrapy等爬蟲工具的抓取
if ($http_user_agent ~* "Scrapy|Sogou web spider|Baiduspider") {
  return 403;
}
#禁止指定UA及UA為空的訪問
#if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|bingbot|NET|CLR|^$" )
#{
#  return 403;
#}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
  return 403;
}

#還有加一些針對特殊的user_agent的訪問

if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") { 
   return 404;
}
 
#靜態檔案配置
	 location /ev{
	# autoindex on;#配置是否顯示目錄
	 expires 1d;#客戶端快取檔案1天
	alias 靜態檔案地址,末尾不帶斜槓,本伺服器的地址;
	
	}
	 
    location / {
	 
	   proxy_buffer_size          1M;
                 proxy_buffers              12 1M;
                 proxy_busy_buffers_size    6M;
                 proxy_temp_file_write_size 6M;

	 proxy_set_header Host      $host;           #如果不想改變請求頭“Host”的值,可以這樣來設定:proxy_set_header Host $http_host;但是,如果客戶端請求頭中沒有攜帶這個頭部,那麼傳遞到後端伺服器的請求也不含這個頭部。這種情況下,更好的方式是使用$host變數——它的值在請求包含“Host”請求頭時為“Host”欄位的值,在請求未攜帶“Host”請求頭時為虛擬主機的主域名
  	 proxy_set_header X-Real-IP $remote_addr;    #把真實的客戶端ip傳送給後端的web伺服器    
  	 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #把真實的客戶端ip傳送給後端的web服
          index  index.php;
	       try_files $uri $uri/ /index.php?$query_string;
		 
    }
	  location ~ \.php$ {
	
	   proxy_buffer_size          1M;
                 proxy_buffers              12 1M;
                 proxy_busy_buffers_size    6M;
                 proxy_temp_file_write_size 6M;

	 proxy_set_header Host      $host;           #如果不想改變請求頭“Host”的值,可以這樣來設定:proxy_set_header Host $http_host;但是,如果客戶端請求頭中沒有攜帶這個頭部,那麼傳遞到後端伺服器的請求也不含這個頭部。這種情況下,更好的方式是使用$host變數——它的值在請求包含“Host”請求頭時為“Host”欄位的值,在請求未攜帶“Host”請求頭時為虛擬主機的主域名
  	 proxy_set_header X-Real-IP $remote_addr;    #把真實的客戶端ip傳送給後端的web伺服器    
  	 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #把真實的客戶端ip傳送給後端的web服
	
 	 fastcgi_pass   myfastcgi;
	  fastcgi_index  index.php;
	  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
	  include        fastcgi_params;	
     }

    # Deny access to .htaccess files

    error_log /var/log/nginx/site_error.log;
    access_log /var/log/nginx/site_access.log;
}

到此配置完成 ,啟動nginx :systemctl start nginx 。