问题描述
使用 $_GET[‘_url’] as source of URIs:
server { listen 80; server_name localhost.dev; index index.php index.html index.htm; set $root_path ’/var/www/phalcon/public’; root $root_path; try_files $uri $uri/ @rewrite; location @rewrite {rewrite ^/(.*)$ /index.php?_url=/$1; } location ~ .php {fastcgi_pass unix:/run/php-fpm/php-fpm.sock;fastcgi_index /index.php;include /etc/nginx/fastcgi_params;fastcgi_split_path_info ^(.+.php)(/.+)$;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {root $root_path; } location ~ /.ht {deny all; }}
使用 $_SERVER[‘REQUEST_URI’] as source of URIs:
server { listen 80; server_name localhost.dev; index index.php index.html index.htm; set $root_path ’/var/www/phalcon/public’; root $root_path; location / {try_files $uri $uri/ /index.php; } location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {root $root_path; } location ~ /.ht {deny all; }}
问题解答
回答1:两者的主要区别应该是fastcgi_pass:
第二种配置是:
fastcgi_pass 127.0.0.1:9000;
第一个配置是:
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
参考维基: http://zh.wikipedia.org/wiki/Unix_domain_socket
Unix domain socket 或者 IPC socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。与管道相比,Unix domain sockets 既可以使用字节流,又可以使用数据队列,而管道通信则只能使用字节流。Unix domain sockets的接口和Internet socket很像,但它不使用网络底层协议来通信。Unix domain socket 的功能是POSIX操作系统里的一种组件。
Unix domain sockets 使用系统文件的地址来作为自己的身份。它可以被系统进程引用。所以两个进程可以同时打开一个Unix domain sockets来进行通信。不过这种通信方式是发生在系统内核里而不会在网络里传播。
有一个结论是: 服务器压力不大的情况下,tcp和socket差别不大,但在压力比较满的时候,用套接字方式,效果确实比较好。
详细可以参照这个对比使用socket方式连接Nginx优化php-fpm性能