시스템관리자의 쉼터 커피닉스 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

가입없이 누구나 글을 쓸 수 있습니다. 공지사항에 대한 댓글까지도..




BBS >> 설치, 운영 Q&A | 네트웍, 보안 Q&A | 일반 Q&A || 정보마당 | AWS || 자유게시판 | 구인구직 || 공지사항 | 의견제시
nginx에서 php-cgi.exe가 원인모르게 죽는 문제

 
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> 시스템 설치 및 운영
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
방가워요
손님





올리기올려짐: 2011.4.22 금, 12:52 pm    주제: nginx에서 php-cgi.exe가 원인모르게 죽는 문제 인용과 함께 답변 글 편집/삭제

안녕하세요,.
워낙이 초짜라 헤매네요.. 도와주시기 바랍니다.. 부탁드려요..
그동안 windows server 2008 64bit 서버에서 apm으로 돌리다가 서버부하 문제로 nginx로 교체를 했답니다..
여기저기 주워들은 정보를 토대로 구축을 하기는 했고 근 몇달은 별탈없이 잘 써왔는데 요 몇일부터 이유도 없이 php-cgi.exe가 서버를 키면 몇시간을 못버티고 오류를 뿜어내고 죽습니다.. 멀 건드린게 있어야 원인을 알텐데 알길이 없네요.. ㅡ,ㅡ
이벤트로그에서는 php5ts.dll에서 오류가 났다고만 나옵니다..

정황상으로는 fastcgi 문제인거 같은데 당췌 알수가 없네요..

서버 실행용 스크립트는 아래와 같이 짰습니다..
SET PHP_FCGI_MAX_REQUESTS=0
SET OPENSSL_CONF=%cd%\bin\openssl\openssl.cnf
%cd%\bin\core\hidec.exe %cd%\bin\php52\php-cgi.exe -b 127.0.0.1:9000 -c %cd%\bin\php.ini

아래는 nginx.conf 설정 내용이구요..
#user nobody;

# CPU개수
worker_processes 1;

error_log logs/error.log crit;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;

#이 프로세스를 지정하여 열 수있는 최대 파일에 대한 값.
#worker_rlimit_nofile 51200;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;
access_log off;

client_body_temp_path temp/client_body_temp;
fastcgi_temp_path temp/fastcgi_temp;
proxy_temp_path temp/proxy_temp;
uwsgi_temp_path temp/wsgi_temp;
scgi_temp_path temp/scgi_temp;

# 일반 옵션
ignore_invalid_headers on;
recursive_error_pages on;
sendfile on;
server_name_in_redirect off;
server_tokens off;
# 추가
#limit_zone gulag $binary_remote_addr 1m;
reset_timedout_connection on;
server_names_hash_bucket_size 128;
#aio on;
directio 64m;
# TCP 옵션
tcp_nodelay on;
tcp_nopush on;

# 크기 제한
client_body_buffer_size 5m;
client_header_buffer_size 5m;
client_max_body_size 5m;
# 추가
#server_names_hash_bucket_size 5m;
large_client_header_buffers 8 8m;

# 시간 초과
client_body_timeout 5;
client_header_timeout 5;
keepalive_timeout 0;
send_timeout 5;
# 추가
keepalive_requests 5;

# 압축
gzip on;
gzip_vary on;
gzip_static on;
gzip_buffers 16 1m;
gzip_http_version 1.1;
gzip_min_length 0;
gzip_comp_level 9;
gzip_types text/css text/xml application/x-javascript application/atom+xml application/rss+xml text/plain image/x-icon application/java-archive application/msword application/pdf application/vnd.ms-excel application/vnd.ms-powerpoint application/vnd.wap.xhtml+xml application/x-xpinstall;

# 기타
fastcgi_param HTTPS on;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 70;
fastcgi_send_timeout 70;
fastcgi_read_timeout 70;
fastcgi_buffer_size 5m;
fastcgi_buffers 8 8m;
fastcgi_busy_buffers_size 8m;
fastcgi_temp_file_write_size 8m;

server {
# 포트
listen 80;
# 도메인
server_name localhost;
# 홈 디렉토리
root www;

#charset koi8-r;
#access_log logs/host.access.log main;

# Index 파일
location / {
index index.html index.htm index.php;
}

# add expire headers
#location ~* ^.+.(gif|ico|jpg|jpeg|png|flv|swf|pdf|mp3|mp4|xml|txt|js|css)$ {
# expires 30d;
#}
# etc 대체
include etc.conf;

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
# php 설정
location ~ .*\.php$ {

# do not pass non-existent files for security reasons
if (!-f $document_root$fastcgi_script_name){ return 404; }

fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# only allow these request methods
#if ($request_method !~ ^(GET|HEAD|POST)$ ){ return 405; }

# deny access to .htaccess files
location ~ /\.ht { deny all; }

# 상태 확인
location = /stat {
stub_status on;
access_log off;
allow 아이피;
deny all;
}
}



사용하는 서버 환경버전은 아래와 같습니다.
* Nginx 1.0.0
* PHP 5.2.17
+ Custom MySQL extension (for MySQL v5.1)
+ Ioncube Loader 4.0.7
+ NuSphere PhpExpress 3.0.1
+ Suhosin 0.9.32.1
+ ZendOptimizer 3.3.3
* PHP 5.3.7-dev
+ Ioncube Loader 4.0.7
+ NuSphere PhpExpress 3.0.1
+ Suhosin 0.9.32.1
* MySQL 5.1.56
* Memcached 1.4.5
* OpenSSL 0.9.8r
* PhpMyAdmin 3.3.11-dev
* Sendmail version 31

참고로 서버 메모리는 4G입니다.
위로
guestuser
손님





올리기올려짐: 2011.4.28 목, 12:11 pm    주제: Windows 환경에서의 nginx와 php 인용과 함께 답변 글 편집/삭제

리눅스나 유닉스 계열의 OS와 달리 Windows 환경에서의 nginx의 사용은 약간의 문제가 있습니다.

첫번째는 worker를 여러개 설정하였더라도 실제로 작업을 하는 프로세스는 1개 밖에 안된다는 점.

두번째는 php와의 FastCGI를 통한 연동에서 아파치와 lighttpd와 달리 자체 FastCGI 프로세스 관리자가 없기 때문에 부가적인 PHP Process Manager 를 사용해야 하는데 유명한 php-fpm 은 Windows 환경에서는 지원되지 않기 때문에 다른 방법을 찾아야 합니다.


첫번째 문제는 nginx의 차기 수정된 버전을 기다려야 하지만, 두번째 문제의 경우는 다행히 해결 방법이 있으며, 이 문제를 해결하면 지금 겪으시는 문제를 의외로 쉽게 해결하실 수 있을 겁니다.


현재 당연하겠지만 방가워요님의 경우 단 하나의 php-cgi.exe 프로세스를 사용하시고 계실텐데 이런 경우 동시에 2개의 php 페이지의 요청이 있을 경우 차례대로 '1요청 처리 후 다음 요청 처리' 식으로 요청을 처리할 것입니다.

이 경우 발생되는 문제는 예를 들어 sleep(10); 구문이 들어있는 php 페이지를 요청한 경우 10초동안 어떠한 요청도 받아들일 수 없는 문제가 발생합니다. 또한 비정상적인 요청으로 php-cgi.exe 프로세스가 종료된 경우도 답이 없어지게 됩니다.

이 문제를 해결하기 위하여 php-fpm과 비슷한 프로세스 관리자를 필요로 하게 되는데, 이는 spawn-fcgi 라는 lighttpd에 예전에 포함되었던 fastcgi 프로세스 관리자를 사용하실 수 있습니다.

현재는 lighttpd에서 분리되어 따로 프로젝트가 진행되고 있는데 홈페이지는 다음과 같습니다.

http://redmine.lighttpd.net/projects/spawn-fcgi/wiki

이 곳에서 Known issues 부분의 토픽을 보시면 windows 환경에서의 빌드가 불가능하다는 이슈가 있는데 좀 더 아래쪽으로 내려보면 windows 환경에서 빌드할 수 있도록 수정된 소스코드와 컴파일된 바이너리를 찾으실 수 있으실 겁니다.

바로 컴파일된 바이너리를 사용하여 임시로 일단 사용을 해보시고 현재 올라와있는 소스코드와 컴파일된 바이너리를 실제로 프로세스 관리를 하지 않고 단지 php-cgi.exe와 같은 FastCGI 프로세스를 여러개 띄울 수 있게만 해줍니다.

그렇지만 소스코드를 조금만 수정하시면 php-cgi.exe 프로세스가 종료되게 되면 바로 자동으로 다시 새로운 프로세스를 실행하게끔 수정도 가능합니다.

그에 대한 부분은 다음에 설명해 보도록 하겠습니다.
위로
이전 글 표시:   
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> 시스템 설치 및 운영 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 있습니다
답글을 올릴 수 있습니다
주제를 수정할 수 있습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB © 2001, 2005 phpBB Group