欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx 中 fastcgi_pass配置为unix:/tmp/php-fpm.sock与127.0.0.1:9000区别

程序员文章站 2024-02-21 15:10:16
...

nginx中的 fastcgi_pass为什么有时候是unix:/tmp/php-fpm.sock,有时候是127.0.0.1:9000

这牵扯到了nginx和php的通信模式,上面所列的就是这两种,一种是利用系统本身socket的,一种是利用tcp协议的

两种协议有区别

UNIX Domain Socket不经过网络,只是在系统内部进行通信,适用于php和nginx都装在同一台linux服务器上

tcp通信协议的也就是fastcgi_pass模式的既适用于php和nginx都装在同一台linux服务器上,同时又适用于不在同一台服务器上的,一般在同一个局域网中,也就是127.0.0.1的意义了

当然我们在真正的php搭建服务器环境的时候,具体用那种,就要看php-fpm.conf中使用的是哪种了

tcp方式:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
UNIX Domain Socket方式:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;

在我们真正实例中多数都是装在同一台服务器上,所以选择UNIX Domain Socket是比较合适的选择,因为这样可以避免数据传输经过tcp层造成导致TIME_WAIT连接过多的问题。

具体两个传输方式的流程如下

1.1 TCP Socket(本地回环127.0.0.1)方式的数据传输:
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
1.2 TCP Socket(Nginx和PHP-FPM位于不同服务器)的数据传输:
Nginx <=> socket <=> TCP/IP <=> 物理层 <=> 路由器 <=> 物理层 <=> TCP/IP <=> socket <=> PHP-FPM

2 UNIX Domain Socket方式的数据传输:
Nginx <=> socket <=> PHP-FPM

nginx配置:

server {
        listen       80;
        server_name  localhost;

  
		root /home/work/project/public;
        index  index.html index.htm index.php;

       

        location / {
			 if (!-e $request_filename) {
            
                  rewrite  ^/(.*)$  /index.php/$1  last;
                  break;
            }

        }
		
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

		set $root /home/work/cfgset/;
			location ~ \.php(.*)$  {
            fastcgi_pass   unix:/tmp/php-cgi.sock;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
		location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }
		
		location ~ .*\.(js|css)?$
        {
            expires      12h;
        }
    
        access_log  /var/logs/project/access.log;
		error_log  /var/logs/project/error.log;

    }

 

php-fpm配置:

[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi.sock
;listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
user = user
group =user
pm = dynamic
pm.max_children = 20
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 20
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
env[PATH]=$PATH
env[LD_LIBRARY_PATH]=$LD_LIBRARY_PATH
php_flag[display_errors] = Of

其中 nginx中的fastcgi_pass   与php-fpm.conf中listen = /tmp/php-cgi.sock保持一致。
若php-fpm.conf中配置为 listen = 127.0.0.1:9000 那么nginx中fastcgi_pass  为

fastcgi_pass  127.0.0.0.1:9000

 

相关标签: php nginx linux