Nginx修改演示: vim /usr/local/nginx/conf/vhost/example.com server{ listen 80; server_name 192.168.1.180; location / { root /Code/project/public; index ind ...
Nginx修改演示:
vim /usr/local/nginx/conf/vhost/example.com
server{
listen 80;
server_name 192.168.1.180;
location / {
root /Code/project/public;
index index.php index.html;
include /usr/local/nginx/conf/rewrite/laravel.conf;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /usr/local/nginx/conf/fastcgi_params;
}
}
#由此處開始,是配置一段自定義的配置,如果訪問站點192.168.1.180/test下的路徑,會執行下方的配置-------------------------------
location /test {
root /Code/project/public;
index index.php index.html;
location ~ \.php$ {
#註意此處配置的埠,不同的項目要使用不同的sock文件,或者IP:Port
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /usr/local/nginx/conf/fastcgi_params;
#一些自定義的配置
fastcgi_connect_timeout 999999;
fastcgi_read_timeout 999999;
fastcgi_send_timeout 999999;
}
}
}
#保存後檢測是否有配置錯誤
../../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
#確認無誤後重啟
service nginx restart
PHP-FPM修改演示(推薦配置成功後再配置Nginx):
vim /usr/local/php/etc/php-fpm.conf
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 32
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 256
pm.process_idle_timeout = 5s
#配置自定義進程參數-------------------------------------------------------------------------
#起一個名字
[test]
#此處必須使用不同的埠區分上方的www配置
listen = 127.0.0.1:9001
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 32
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 256
pm.process_idle_timeout = 5s
request_terminate_timeout = 999999
#保存後重啟
service php-fpm restart
#查看進程,有test和www
ps aux | grep php
root 15597 0.0 0.4 179912 8328 ? Ss 10月12 0:03 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 15598 0.0 0.9 188668 17688 ? S 10月12 0:04 php-fpm: pool www
www 15599 0.0 0.4 181956 9232 ? S 10月12 0:03 php-fpm: pool www
www 15600 0.0 0.4 181956 9232 ? S 10月12 0:03 php-fpm: pool www
www 15601 0.0 0.4 181956 9232 ? S 10月12 0:03 php-fpm: pool www
www 15605 0.0 0.4 181956 8052 ? S 10月12 0:00 php-fpm: pool test
www 15803 0.0 0.4 181956 9232 ? S 10月12 0:03 php-fpm: pool www
www 15811 0.0 0.4 181956 9232 ? S 10月12 0:03 php-fpm: pool www
www 15854 0.0 0.4 181956 9232 ? S 10月12 0:03 php-fpm: pool www
www 15855 0.0 0.4 181956 9232 ? S 10月12 0:03 php-fpm: pool www
www 15941 0.0 0.4 181956 9232 ? S 10月12 0:00 php-fpm: pool www
www 15942 0.0 0.4 181956 8052 ? S 10月12 0:00 php-fpm: pool www
www 16241 0.0 0.4 181956 8044 ? S 10月12 0:00 php-fpm: pool www
www 16242 0.0 0.4 181956 8056 ? S 10月12 0:00 php-fpm: pool test
www 16300 0.0 0.4 181956 8056 ? S 10月12 0:00 php-fpm: pool www
www 16301 0.0 0.4 181956 8056 ? S 10月12 0:00 php-fpm: pool test
www 16418 0.0 0.4 181956 8052 ? S 10月12 0:00 php-fpm: pool test
www 16635 0.0 0.4 181956 8052 ? S 10月12 0:00 php-fpm: pool test
www 28059 0.0 0.4 181956 8056 ? S 08:29 0:00 php-fpm: pool www
www 28302 0.0 0.4 181956 8052 ? S 08:51 0:00 php-fpm: pool test
root 28694 0.0 0.0 112728 984 pts/0 S+ 09:13 0:00 grep --color=auto php
#查看網路相關,一個9000,一個9001就說明配置正常
netstat -nlp | grep php
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 15597/php-fpm: mast
tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 15597/php-fpm: mast
Nginx與PHP-FPM兩種通信方式:
1. Tcp預設的9000埠通信:
- php-fpm配置:listen = 127.0.0.1
- 與nginx進程通信:fastcgi_pass 127.0.0.1:9000;
- 優點:
- 使用網路傳輸,可以跨伺服器。
- TCP通信有一些校驗機制,具有更高的穩定性。
- 缺點:
- 性能略微比socket差。
2. Unix Socket(套接字)通信:
- php-fpm配置 :listen = /tmp/php-cgi.sock
- 與nginx進程通信:fastcgi_pass unix:/tmp/php-cgi.sock;
- 優點:
- 不使用網路協議,所以不需要走網路協議的各種處理,相對於TCP略微減少通信開銷。
- 適合單機部署。
- 缺點:
- 使用文件傳輸,不支持跨伺服器。
- 大量請求時不穩定。
- sock是一個文件,容易忽略掉許可權不足的問題,增加運維成本。
為什麼 TCP比Unix Socket更穩定?
容錯和重傳機制:TCP 提供了許多容錯和重傳機制,以確保數據的可靠傳輸。它使用序號、確認和重傳機制來檢測和糾正傳輸中的錯誤,可以重新發送丟失的數據包,保證數據的完整性。而 Unix 域套接字沒有內置的容錯和重傳機制。