window+nginx+php-cgi,怎么配置php解析非阻塞队列式解析php?

qidizi 2014-06-04 10:44:06


如图片所示.

配置是能运行了nginx+php-cgi的.且php也能正常解析返回.
但是如果其它一个php出现长解析时,它就会导致其它php要排队,直到前面的php解析返回,才能进行下个php,

请问要怎么配置才能让php-cgi可以异步同时解析多个php?
...全文
816 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qidizi 2014-06-04
  • 打赏
  • 举报
回复
session影响?不明白什么意思 我现在想不到是怎么回事,不懂怎么解决. 其它人都没有遇到过这种问题吗?百度或是其它地方都没找到有相关资料. 我的目录结构是 d:/web/php,nginx,www这样结构 bat的写法是 set bat=%~f0 set batDir=%~dp0 CD "%batDir%" set log=%batDir%log\ ::启动nginx与php-cgi :callLabelc set called=1 start "fcgi服务" /MIN /D "%batDir%php" php-cgi.exe -b 127.0.0.1:9000 -c "%batDir%php/php.ini" start "nginx服务" /MIN /D "%batDir%nginx" nginx.exe :eof_callLabelc goto :EOF :callLabelcc set called=1 start "nginx服务" /MIN /D "%batDir%nginx" nginx.exe -s stop ping 127.0.0.1 -n 3 >nul start "停止php-cgi服务" /MIN /D "%batDir%php" taskkill /F /IM php-cgi.exe > nul start "停止php-cgi服务" /MIN /D "%batDir%php" taskkill /F /IM nginx.exe > nul :eof_callLabelcc goto :EOF 从我个人的看法感觉就是: 127.0.0.1:9000端口只允许一个送入动作,解析,返回,完成了,再接受下个循环. 但是按照我的理解,它应该是主要有送入动作就应该生成一个线程或是子进程来处理 接受,解析,返回这样的循环再退出或是待下个连接. 这样的生成应该受最大数限制即可. 但是我现在却搞不懂那里可以可以配置让php-cgi可以一接受到解析请求就生成新线程或是进程来完成,直到达到最大数才应该出现阻塞的现象. 而现在却是从始到终只有一个线程在处理. 启动ngihx+php时 C:\Users\Administrator>netstat -na |findstr /c:"9000" TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING 打开图片的二个php时 C:\Users\Administrator>netstat -na |findstr /c:"9000" TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING TCP 127.0.0.1:9000 127.0.0.1:63631 ESTABLISHED TCP 127.0.0.1:9000 127.0.0.1:63634 ESTABLISHED TCP 127.0.0.1:63631 127.0.0.1:9000 ESTABLISHED TCP 127.0.0.1:63634 127.0.0.1:9000 ESTABLISHED 解析过程中 C:\Users\Administrator>netstat -na |findstr /c:"9000" TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING TCP 127.0.0.1:9000 127.0.0.1:63631 ESTABLISHED TCP 127.0.0.1:9000 127.0.0.1:63634 ESTABLISHED TCP 127.0.0.1:63631 127.0.0.1:9000 ESTABLISHED TCP 127.0.0.1:63634 127.0.0.1:9000 ESTABLISHED 二个php都返回结果了. C:\Users\Administrator>netstat -na |findstr /c:"9000" TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING TCP 127.0.0.1:9000 127.0.0.1:63631 TIME_WAIT TCP 127.0.0.1:9000 127.0.0.1:63634 TIME_WAIT 呵呵,有点郁闷.都不懂从那里入手了. 那位知道怎么回事,请解答一下. 谢谢
qidizi 2014-06-04
  • 打赏
  • 举报
回复
php.ini配置
q.qq域名的配置

[code=text]server {
	listen       80;
	server_name  q.qq;
	access_log ./../log/q.qq.access.txt;
	root d:/web/www;
	
	location ~ \.php$ {
		fastcgi_pass   127.0.0.1:9000;
	}
}
fastcgi.conf
fastcgi_index  index.php;
fastcgi_intercept_errors on;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
fcgi_params配置

scgi_param  REQUEST_METHOD     $request_method;
scgi_param  REQUEST_URI        $request_uri;
scgi_param  QUERY_STRING       $query_string;
scgi_param  CONTENT_TYPE       $content_type;

scgi_param  DOCUMENT_URI       $document_uri;
scgi_param  DOCUMENT_ROOT      $document_root;
#cgi 线程数?
scgi_param  SCGI               10;
scgi_param  SERVER_PROTOCOL    $server_protocol;
scgi_param  HTTPS              $https if_not_empty;

scgi_param  REMOTE_ADDR        $remote_addr;
scgi_param  REMOTE_PORT        $remote_port;
scgi_param  SERVER_PORT        $server_port;
scgi_param  SERVER_NAME        $server_name;
php.ini
[PHP]
engine = On
short_open_tag = Off
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions = error_reporting
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 60
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL
display_errors = off
display_startup_errors = On
log_errors = on
log_errors_max_len = 512
ignore_repeated_errors = on
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
error_prepend_string = ""
error_append_string = "\n"
error_log = "./../log/php.error.log.txt"
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html";
extension_dir = "./../php/ext/"
enable_dl = Off
cgi.force_redirect = 1
cgi.fix_pathinfo=0
fastcgi.logging = 0
file_uploads = On
upload_max_filesize = 10M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
extension=php_curl.dll
extension=php_gd2.dll
extension=php_imap.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_pdo_mysql.dll
[CLI Server]
cli_server.color = On
[Date]
date.timezone = "Asia/Shanghai"
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre][Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]

[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = 
phpsession.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off[Assertion]
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[/code]
xuzuning 2014-06-04
  • 打赏
  • 举报
回复
我不用 nginx,所以没法告诉你正确的该如何写 如果你认为你写的是正确的话,那么就该考虑你的 php 程序里是否是 session 的影响了
qidizi 2014-06-04
  • 打赏
  • 举报
回复
我的nginx.conf 配置是 但是 我这个时候浏览器打开 index.html这样的静态页面并不会受影响的? 只是php解析时,会很久没有返回,除非上个正在解析的php解析完成了,才可以, 这应该跟nginx无关, 我找了很多资料,不清楚怎么让php-cgi可以同时解析二个以上的php? 谢谢.
#widnow 不支持 user指令
#user  nobody;
#nginx 线程,自动控制
worker_processes  auto;
error_log  logs/error.log;
pid        logs/nginx.pid;
#打开文件最多个数
worker_rlimit_nofile 8192;


events {
    worker_connections  1024;
}


http {
	include    mime.types;
	include    fastcgi.conf;
	include		scgi_params;
	index    index.html index.php;
    default_type  application/octet-stream;
	log_format   main '$remote_addr - $remote_user [$time_local]  $status '
		'"$request" $body_bytes_sent "$http_referer" '
		'"$http_user_agent" "$http_x_forwarded_for"';
	access_log   logs/access.log  main;

	
	
	server_names_hash_bucket_size 128;
	client_header_buffer_size 32k;
	large_client_header_buffers 4 32k;
	client_max_body_size 50m;

	sendfile on;
	tcp_nopush     on;

	keepalive_timeout 60;

	tcp_nodelay on;


	fastcgi_connect_timeout 300;
	fastcgi_send_timeout 300;
	fastcgi_read_timeout 300;
	fastcgi_buffer_size 64k;
	fastcgi_buffers 4 64k;
	fastcgi_busy_buffers_size 128k;
	fastcgi_temp_file_write_size 256k;
	
	
	gzip on;
	gzip_min_length  1k;
	gzip_buffers     4 16k;
	gzip_http_version 1.0;
	gzip_comp_level 2;
	gzip_types       text/plain application/x-javascript text/css application/xml;
	gzip_vary on;
	gzip_proxied        expired no-cache no-store private auth;
	gzip_disable        "MSIE [1-6]\.";

	#limit_zone  crawler  $binary_remote_addr  10m;

	server_tokens off;
	#log format
	log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
		'$status $body_bytes_sent "$http_referer" '
		'"$http_user_agent" $http_x_forwarded_for';
	
	
	
	include vhost/*.conf;
}
qidizi 2014-06-04
  • 打赏
  • 举报
回复
请问怎么配置呢
xuzuning 2014-06-04
  • 打赏
  • 举报
回复
显然你的并发数太小了
qidizi 2014-06-04
  • 打赏
  • 举报
回复
session影响?不明白什么意思 我现在想不到是怎么回事,不懂怎么解决. 其它人都没有遇到过这种问题吗?百度或是其它地方都没找到有相关资料. 我的目录结构是 d:/web/php,nginx,www这样结构 bat的写法是 set bat=%~f0 set batDir=%~dp0 CD "%batDir%" set log=%batDir%log\ ::启动nginx与php-cgi :callLabelc set called=1 start "fcgi服务" /MIN /D "%batDir%php" php-cgi.exe -b 127.0.0.1:9000 -c "%batDir%php/php.ini" start "nginx服务" /MIN /D "%batDir%nginx" nginx.exe :eof_callLabelc goto :EOF :callLabelcc set called=1 start "nginx服务" /MIN /D "%batDir%nginx" nginx.exe -s stop ping 127.0.0.1 -n 3 >nul start "停止php-cgi服务" /MIN /D "%batDir%php" taskkill /F /IM php-cgi.exe > nul start "停止php-cgi服务" /MIN /D "%batDir%php" taskkill /F /IM nginx.exe > nul :eof_callLabelcc goto :EOF 从我个人的看法感觉就是: 127.0.0.1:9000端口只允许一个送入动作,解析,返回,完成了,再接受下个循环. 但是按照我的理解,它应该是主要有送入动作就应该生成一个线程或是子进程来处理 接受,解析,返回这样的循环再退出或是待下个连接. 这样的生成应该受最大数限制即可. 但是我现在却搞不懂那里可以可以配置让php-cgi可以一接受到解析请求就生成新线程或是进程来完成,直到达到最大数才应该出现阻塞的现象. 而现在却是从始到终只有一个线程在处理. 启动ngihx+php时 C:\Users\Administrator>netstat -na |findstr /c:"9000" TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING 打开图片的二个php时 C:\Users\Administrator>netstat -na |findstr /c:"9000" TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING TCP 127.0.0.1:9000 127.0.0.1:63631 ESTABLISHED TCP 127.0.0.1:9000 127.0.0.1:63634 ESTABLISHED TCP 127.0.0.1:63631 127.0.0.1:9000 ESTABLISHED TCP 127.0.0.1:63634 127.0.0.1:9000 ESTABLISHED 解析过程中 C:\Users\Administrator>netstat -na |findstr /c:"9000" TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING TCP 127.0.0.1:9000 127.0.0.1:63631 ESTABLISHED TCP 127.0.0.1:9000 127.0.0.1:63634 ESTABLISHED TCP 127.0.0.1:63631 127.0.0.1:9000 ESTABLISHED TCP 127.0.0.1:63634 127.0.0.1:9000 ESTABLISHED 二个php都返回结果了. C:\Users\Administrator>netstat -na |findstr /c:"9000" TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING TCP 127.0.0.1:9000 127.0.0.1:63631 TIME_WAIT TCP 127.0.0.1:9000 127.0.0.1:63634 TIME_WAIT 呵呵,有点郁闷.都不懂从那里入手了. 那位知道怎么回事,请解答一下. 谢谢

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧