目錄
1、Nginx負載均衡
2、ssl原理
3、生成ssl密鑰對
4、Nginx配置ssl
5、php-fpm的pool
6、php-fpm慢執行日誌
7、open_basedir
8、php-fpm進程管理
9、擴展php
nginx的負載均衡實現過程以下html
1.在vhost下添加配置文件proxy.confnginx
[root@bogon ~]# vim /usr/local/nginx/conf/vhost/proxy.conf //添加以下內容 //upstream指定後端服務器列表 upstream qq_com { ip_hash; //注意,沒法實現ssl鏈接的負載均衡,即443端口的負載均衡。 //服務器的ip是真實的www.qq.com的服務器ip,可經過dig命令得到。 //dig命令的安裝:yum -y install bind-utils server 111.161.64.40:80; server 111.161.64.48:80; } server { listen 80; server_name www.qq.com; location / { proxy_pass http://qq_com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } //未重啓配置的狀況情測試訪問www.qq.com,訪問的是默認主頁bbb.com [root@bogon ~]# curl -x127.0.0.1:80 www.qq.com I am bbb.com //從新加載配置文件 [root@bogon ~]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@bogon ~]# /usr/local/nginx/sbin/nginx -s reload //再次測試訪問www.qq.com,返回的是真實的www.qq.com的首頁代碼。說明代理設置成功。 [root@bogon ~]# curl -x127.0.0.1:80 www.qq.com <!DOCTYPE html> <html lang="zh-CN"> <head> <meta content="text/html; charset=gb2312" http-equiv="Content-Type"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="baidu-site-verification" content="cNitg6enc2"> <title>͚Ѷ˗ҳ</title> ...中間略... s.parentNode.insertBefore(mta, s); })(); </script> </body> </html><!--[if !IE]>|xGv00|f7b3dea4efd93bda0aee0db548e81e53<![endif]-->[root@bogon ~]#
ssl的原理以下圖所示web
過程以下:算法
1.客戶端向服務器發起https請求vim
2.服務器自己須要有一套數字證書(可向互聯上受信任的證書頒發機構申請,收費。也能夠本身生成證書,可是不會被瀏覽器信任,因此須要客戶端驗證經過,才能夠繼續訪問。)後端
3.服務器收到https請求後會將公鑰傳給客戶端。瀏覽器
4.客戶端瀏覽器收到公鑰後會進行合法性驗證。若是證書無效會顯示警告信息。若是是有效的證書,則會產生一串隨機字符串,並用收到的公鑰加密。安全
5.客戶端將加密碼的隨機字符串傳回服務器。服務器端用私鑰解密,得到這串隨機字符串,服務器端再用這串隨機字符串加密傳輸的數據。(這時候的加密方式稱爲對稱加密,服務器加密數據和客戶戶解密數據用的同一把鑰匙,即這串隨機字符串。)服務器
6.服務器端將加密後的數據發送給客戶端,客戶端收到數據後用同一把鑰匙(即隨機字符串解密)將數據解密。
由於向互聯上受信任的證書頒發機構申請證書是收費的,咱們是僅僅是測試環境,能夠手動生成本身的證書。
過程以下
1.證書的生成須要安裝openssl包,若是沒有,能夠用yum安裝
[root@localhost ~]# yum -y install openssl
2.生成密碼對
[root@localhost ~]# cd /usr/local/nginx/conf/ //生成私鑰tmp.key [root@localhost conf]# openssl genrsa -des3 -out tmp.key Generating RSA private key, 2048 bit long modulus ........................+++ ...+++ e is 65537 (0x10001) //必定要輸入密碼,不然過不去 Enter pass phrase for tmp.key: Verifying - Enter pass phrase for tmp.key: //轉換key,取消密碼 [root@localhost conf]# openssl rsa -in tmp.key -out user01.key Enter pass phrase for tmp.key: writing RSA key [root@localhost conf]# rm -f tmp.key //生成證書請求文件,須要用這個文件和私鑰一塊兒生成公鑰 [root@localhost conf]# openssl req -new -key user01.key -out user01.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:86 State or Province Name (full name) []:guangdong Locality Name (eg, city) [Default City]:jieyang Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:authtest.com Email Address []:kennminn@129.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: //生成名爲user01.crt的公鑰 [root@localhost conf]# openssl x509 -req -days 365 -in user01.csr -signkey user01.key -out user01.crt Signature ok subject=/C=86/ST=guangdong/L=jieyang/O=Default Company Ltd/CN=authtest.com/emailAddress=kennminn@129.com Getting Private key
這裏以authtest.com爲例使用本身頒發的證書來配置ssl安全訪問
1.首先檢查一下nginx是否已經編譯了ssl的支持
[root@localhost conf]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.14.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled //若是沒有--with-http_ssl_module,須要從新編譯nginx configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
2.增長配置文件ssl.conf
[root@localhost conf]# vim /usr/local/nginx/conf/vhost/ssl.conf //內容以下 erver { listen 443; server_name authtest.com; index index.html index.php; root /usr/local/nginx/html/authtest.com; ssl on; ssl_certificate user01.crt; ssl_certificate_key user01.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; } [root@localhost conf]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost conf]# /usr/local/nginx/sbin/nginx -s reload //防火牆放行443端口的訪問 [root@localhost conf]# firewall-cmd --zone=public --add-port=443/tcp success [root@localhost conf]# firewall-cmd --zone=public --add-port=443/tcp --permanent success //本地測試 //本地添加host解析 [root@localhost conf]# echo "127.0.0.1 authtest.com" >> /etc/hosts [root@localhost conf]# cat !$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 authtest.com //驗證,訪問成功,提示未受信任的證書,由於是本身頒發的證書,是不被瀏覽器代理信任的。 [root@localhost conf]# curl https://authtest.com curl: (60) Peer's certificate issuer has been marked as not trusted by the user. More details here: http://curl.haxx.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.
遠程瀏覽器測試
能夠經過配置php-fpm的池來隔離不一樣的虛擬主機。
這裏將bbb.com和authtest.com分別放入不一樣的php-fpm池
過程以下
1.修改php-fpm.conf
[root@localhost conf]# vim /usr/local/php-fpm/etc/php-fpm.conf pid = /usr/local/php-fpm/var/run/php-fpm.pid error_log = /usr/local/php-fpm/var/log/php-fpm.log [www] listen = /tmp/php-fcgi.sock #listen = 127.0.0.1:9000 listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 //新增authtest池 [authtest] listen = /tmp/authtest.sock listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 [root@localhost conf]# /usr/local/php-fpm/sbin/php-fpm -t [06-Jul-2018 02:45:52] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@localhost conf]# /etc/init.d/php-fpm restart [root@localhost ~]# ps aux | grep php-fpm root 1905 0.0 0.4 227308 4964 ? Ss 02:46 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf) php-fpm 1906 0.0 0.4 227248 4732 ? S 02:46 0:00 php-fpm: pool www php-fpm 1907 0.0 0.4 227248 4732 ? S 02:46 0:00 php-fpm: pool www php-fpm 1908 0.0 0.4 227248 4732 ? S 02:46 0:00 php-fpm: pool www php-fpm 1909 0.0 0.4 227248 4732 ? S 02:46 0:00 php-fpm: pool www php-fpm 1910 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool www php-fpm 1911 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool www php-fpm 1912 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool www php-fpm 1913 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool www php-fpm 1914 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1915 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1916 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1917 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1918 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1919 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1920 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1921 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1922 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1923 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1924 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1925 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1926 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1927 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1928 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1929 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1930 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1931 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1932 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1933 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1934 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1935 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1936 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1937 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1938 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1939 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1940 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1941 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1942 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1943 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1944 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1945 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest root 2012 0.0 0.0 112664 980 pts/1 S+ 02:49 0:00 grep --color=auto php-fpm
2.修改authtest.com.conf配置文件,引用authtest池
location ~ \.php$ { include fastcgi_params; //將socket修改成authtest池 fastcgi_pass unix:/tmp/authtest.sock; # fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/authtest.com$fastcgi_script_name; }
3.修改aaa.com.conf配置文件,給bbb.com引用www池
location ~ \.php$ { include fastcgi_params; //改成www池的socket fastcgi_pass unix:php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/bbb.com$fastcgi_script_name; }
4.重載配置驗證
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload [root@localhost ~]# ps aux | grep php-fpm [root@localhost ~]# ps aux | grep php-fpm | grep -v 'grep' root 1905 0.0 0.4 227308 4964 ? Ss 02:46 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf) php-fpm 1906 0.0 0.4 227248 4732 ? S 02:46 0:00 php-fpm: pool www php-fpm 1907 0.0 0.4 227248 4732 ? S 02:46 0:00 php-fpm: pool www php-fpm 1908 0.0 0.4 227248 4732 ? S 02:46 0:00 php-fpm: pool www php-fpm 1909 0.0 0.4 227248 4732 ? S 02:46 0:00 php-fpm: pool www php-fpm 1910 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool www php-fpm 1911 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool www php-fpm 1912 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool www php-fpm 1913 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool www php-fpm 1914 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1915 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1916 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1917 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1918 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1919 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1920 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1921 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1922 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1923 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1924 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1925 0.0 0.4 227248 4740 ? S 02:46 0:00 php-fpm: pool www php-fpm 1926 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1927 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1928 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1929 0.0 0.4 227248 4736 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1930 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1931 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1932 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1933 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1934 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1935 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1936 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1937 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1938 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1939 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1940 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1941 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1942 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1943 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1944 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest php-fpm 1945 0.0 0.4 227248 4744 ? S 02:46 0:00 php-fpm: pool authtest
php-fom池的寫法也能夠採用如nginx配置文件的寫法,全局配置與單獨的虛擬主機分隔。
//編輯/usr/local/php-fpm/etc/php-fpm.conf vim /usr/local/php-fpm/etc/php-fpm.conf //將池的配置信息從php-fpm.conf中刪除 [global] pid = /usr/local/php-fpm/var/run/php-fpm.pid error_log = /usr/local/php-fpm/var/log/php-fpm.log //增長一句 include=etc/php-fpm.d/*.conf //新建php-fpm.d/www.conf [root@localhost ~]# mkdir /usr/local/php-fpm/etc/php-fpm.d [root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //添加以下內容 [www] listen = /tmp/php-fcgi.sock #listen = 127.0.0.1:9000 listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 //新建php-fpm.d/authtest.conf [root@localhost ~]# vim /usr/local/php-fpm/etc/php-fpm.d/authtest.conf //添加以下內容 [authtest] listen = /tmp/authtest.sock listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 [root@localhost php-fpm]# /usr/local/php-fpm/sbin/php-fpm -t [06-Jul-2018 03:24:28] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@localhost php-fpm]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done [root@localhost php-fpm]# ps aux | grep php-fpm | grep -v 'grep' root 2736 0.2 0.4 227336 4976 ? Ss 03:25 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf) php-fpm 2737 0.0 0.4 227276 4736 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2738 0.0 0.4 227276 4736 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2739 0.0 0.4 227276 4736 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2740 0.0 0.4 227276 4736 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2741 0.0 0.4 227276 4740 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2742 0.0 0.4 227276 4740 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2743 0.0 0.4 227276 4740 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2744 0.0 0.4 227276 4740 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2745 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2746 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2747 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2748 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2749 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2750 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2751 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2752 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2753 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2754 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2755 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2756 0.0 0.4 227276 4744 ? S 03:25 0:00 php-fpm: pool authtest php-fpm 2757 0.0 0.4 227276 4740 ? S 03:25 0:00 php-fpm: pool www php-fpm 2758 0.0 0.4 227276 4740 ? S 03:25 0:00 php-fpm: pool www php-fpm 2759 0.0 0.4 227276 4740 ? S 03:25 0:00 php-fpm: pool www php-fpm 2760 0.0 0.4 227276 4740 ? S 03:25 0:00 php-fpm: pool www php-fpm 2761 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2762 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2763 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2764 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2765 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2766 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2767 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2768 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2769 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2770 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2771 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2772 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2773 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2774 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2775 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www php-fpm 2776 0.0 0.4 227276 4748 ? S 03:25 0:00 php-fpm: pool www
有時候php的執行很慢,咱們想查找慢的緣由,這能夠經過配置php-fpm的慢執行日誌功能實現。
在authtest中演示
1.編譯authtest.conf
[root@localhost php-fpm]# vim /usr/local/php-fpm/etc/php-fpm.d/authtest.conf [authtest] listen = /tmp/authtest.sock listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 //增長下面兩行內容 //request_slowlog_timeout的值通常設爲2秒,這裏只是爲了測試 request_slowlog_timeout = 1 slowlog = /usr/local/php-fpm/var/log/www-slow.log [root@localhost php-fpm]# /usr/local/php-fpm/sbin/php-fpm -t [06-Jul-2018 03:41:52] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@localhost php-fpm]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done //由於listen = /tmp/authtest.sock是被authtest.com引用的, //在authtest.com虛擬主機中新建測試腳本 [root@localhost conf]# vim /usr/local/nginx/html/authtest.com/sleep.php <?php echo "test slow log"; sleep(2); echo "done"; ?> [root@localhost conf]# curl authtest.com/sleep.php test slow logdone [root@localhost conf]# tail /usr/local/php-fpm/var/log/www-slow.log [06-Jul-2018 03:47:22] [pool authtest] pid 2860 //日誌記錄了是sleep.php的第二行執行慢,這是一個sleep函數,睡眠2s script_filename = /usr/local/nginx/html/authtest.com/sleep.php [0x00007f6e4ad77278] sleep() /usr/local/nginx/html/authtest.com/sleep.php:2
nginx中也能夠經過php-fpm的open_basedir功能,隔離不一樣的虛擬主機以加強安全性。
有兩種方式定義open_basedir,一種是定義在php.ini中,一種是在虛擬主機配置文件中定義。 在php.ini定義缺少靈活性,因此通常在虛擬主機的配置文件中定義。
這裏以authtest.com虛擬主機爲例配置open_basedir
//編輯authtest.conf [root@localhost php-fpm]# vim /usr/local/php-fpm/etc/php-fpm.d/authtest.conf [authtest] listen = /tmp/authtest.sock listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 request_slowlog_timeout = 1 slowlog = /usr/local/php-fpm/var/log/www-slow.log //增長下列語句,basedir必定要定義正確,不然會致使故障。下面會進行演示 php_admin_value[open_basedir]=/usr/local/nginx/html/authtest.com:/tmp/ [root@localhost php-fpm]# /usr/local/php-fpm/sbin/php-fpm -t [06-Jul-2018 04:25:11] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@localhost php-fpm]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done //此時訪問是正常的 [root@localhost php-fpm]# curl authtest.com/sleep.php test slow logdone [root@localhost php-fpm]# [root@localhost php-fpm]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done [root@localhost php-fpm]# curl authtest.com/sleep.php -I HTTP/1.1 200 OK Server: nginx/1.14.0 Date: Fri, 06 Jul 2018 08:35:44 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.6.30 //若basedir配置有問題,這裏故障將authtest.com改爲bbb.com php_admin_value[open_basedir]=/usr/local/nginx/html/bbb.com:/tmp/ [root@localhost php-fpm]# curl authtest.com/sleep.php No input file specified. [root@localhost php-fpm]# curl authtest.com/sleep.php -I HTTP/1.1 404 Not Found Server: nginx/1.14.0 Date: Fri, 06 Jul 2018 08:34:07 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.6.30
爲定位出錯緣由,可經過開啓php的錯誤日誌功能
[root@localhost php-fpm]# vim /usr/local/php-fpm/etc/php.ini //生產將display_errors關閉,調試的時候能夠開啓,這樣能夠直接在瀏覽器看到錯誤 display_errors = Off //增長error_log保存位置, error_log = /usr/local/php-fpm/var/log/error.log //設定日誌的記錄級別爲全部, error_reporting = E_ALL //將/usr/local/php-fpm/var/log/error.log的權限設爲666 //測試 [root@localhost php-fpm]# curl authtest.com/sleep.php -I HTTP/1.1 404 Not Found Server: nginx/1.14.0 Date: Fri, 06 Jul 2018 09:59:45 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/5.6.30 //日誌,明確顯示open_basedir限制生效,authtest.com路徑不在容許的路徑中 [06-Jul-2018 09:57:25 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/usr/local/nginx/html/authtest.com/sleep.php) is not within the allowed path(s): (/usr/local/nginx/html/bbb.com:/tmp/) in Unknown on line 0 [06-Jul-2018 09:57:25 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0 [06-Jul-2018 09:59:45 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/usr/local/nginx/html/authtest.com/sleep.php) is not within the allowed path(s): (/usr/local/nginx/html/bbb.com:/tmp/) in Unknown on line 0 [06-Jul-2018 09:59:45 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0 //注意,/usr/local/php-fpm/var/log/error.log權限須要666或以上。不然測試的時候報的錯是403,禁止訪問 //日誌 [06-Jul-2018 09:38:12 UTC] PHP Deprecated: Comments starting with '#' are deprecated in Unknown on line 1 in Unknown on line 0 [06-Jul-2018 09:38:26 UTC] PHP Deprecated: Comments starting with '#' are deprecated in Unknown on line 1 in Unknown on line 0
進程管理的配置(以authtest.com爲例)
[root@localhost ~]# cat /usr/local/php-fpm/etc/php-fpm.d/authtest.conf [authtest] listen = /tmp/authtest.sock listen.mode = 666 user = php-fpm group = php-fpm //動態進程管理,也能夠是static pm = dynamic //最大子進程數,ps aux能夠查看 pm.max_children = 50 //啓動服務時會啓動的進程數 pm.start_servers = 20 //空閒時段,最小進程數,若是達到這個數值,php-fpm自動派生新的子進程 pm.min_spare_servers = 5 //空閒時段,最大進程數,若是達到這個數值,php-fpm自動銷燬空閒的子進程 pm.max_spare_servers = 35 //定義一個子進程最多處理的請求數,即在一個php-fpm子進程最多能夠處理這麼多請求,當達到該數值,即退出。 pm.max_requests = 500 rlimit_files = 1024 request_slowlog_timeout = 1 slowlog = /usr/local/php-fpm/var/log/www-slow.log php_admin_value[open_basedir]=/usr/local/nginx/html/bbb.com:/tmp/ //服務開啓時啓動的進程數是20 [root@localhost ~]# ps aux | grep authtest | grep -vc 'grep' 20 [root@localhost ~]# sed -i 's#pm.start_servers = 20#pm.start_servers = 30#' /usr/local/php-fpm/etc/php-fpm.d/authtest.conf [root@localhost ~]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done 修改配置後初始啓動的進程數已經變爲30 [root@localhost ~]# ps aux | grep authtest | grep -vc 'grep' 30
針對請求的uri來代理
http://ask.apelearn.com/question/1049
根據訪問的目錄來區分後端的web
http://ask.apelearn.com/question/920
nginx長鏈接
http://www.apelearn.com/bbs/thread-6545-1-1.html
nginx算法分析
http://blog.sina.com.cn/s/blog_72995dcc01016msi.html
nginx中的root和alias區別
http://blog.csdn.net/21aspnet/article/details/6583335
nginx的alias和root配置
http://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/
http://www.iigrowing.cn/shi-yan-que-ren-nginx-root-alias-location-zhi-ling-shi-yong-fang-fa.html