본문 바로가기
운영체제/리눅스

PHP NGINX PHP-FPM Eaccelerator

by o테리o 2013. 5. 7.

# yum install nginx php php-fpm php-common php-mysql php-eaccelerator php-pecl-sphinx php-pecl-memcache php-gd php-mbstring php-mcrypt php-xml  php-process

 

yum 으로 한방 설치

sphinx api가 있다는 것이 마음에 드네요.

eaccelerator 역시..

세상 참 좋아졌어요.

 

 

 /etc/php.ini 수정

short_open_tag = On

zlib.output_compression = Off  이부분은 nginx 에서 zip으로 압축하도록 설정 할 것임.

memory_limit = 128M  .. 워낙에 내부적으로 돌리는 부분이 있는데 이미지 관련 작업하다보면 램이 필요함

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED  뭐 프로그램을 대충하다보니 메세지가 많이 출력

display_errors = On  개발 할 동안은 출력하고 하는것이 편안해서...

register_globals = On  이 부분이 보안에 문제? 정확히 어떤 문제일까요?

 $_GET $_POST $_SERVER. 요렇게 코딩을eaccelerator.shm_size = "32" 해야하나?

 

----------------------------

/etc/php.d/eaccelerator.ini

 

eaccelerator.shm_size = "32"  //메모리에 컴파일한 PHP를 저장하도록 설정, 일단 서버돌아가면 나면 용량 재조정하면 된다.

 

eaccelerator.cache_dir = "/var/cache/php-eaccelerator"  //컴파일 된 파일이 저장...램 사이즈가 있어서 저장 안될 듯

 

eaccelerator.shm_only = "1" // 메모리에다만 저장..위 설정의 무의미하네.. 메모리 용량이 차면 오래된 것 부터 삭제.

 

eaccelerator.allowed_admin_path = "/home/bit/www/Admin/eaccelerator"   // eaccelerator 관리자 디렉토리 경로인데.. 아래의 디렉토리에 있는 파일을 옮겨놔야 한다.

control.php을 열어 관리자 아이디와 패스워드를 입력하고 접속하면 된다.

아직은 웹서버가 가동 전이라 화면이 없음.

[root@search php.d]# ls /usr/share/doc/php-eaccelerator-0.9.6.1/

AUTHORS  COPYING  ChangeLog  NEWS  PHP_Highlight.php  README  README.win32  bugreport.php  control.php  dasm.php  run-tests.php 

------------------------------------------------------------ 

/etc/nginx/nginx.conf

user  nginx;

worker_processes  4;  // 1개에서 4개로..

error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;


events {

    worker_connections  512;  //1024-> 512 워커당 접속 갯수인데 많으면 성능에 안좋다는 소문에 

}

 

------------------------------------------

 

아래 설정의 bit.com은 제것이 아님... 하다보니..

그누보드를 기반으로 하는 홈페이지에서 rewrite하여 공개된 것 사용하는 모습을 감출 수 있음.

 

/etc/nginx/conf.d/default.conf

server {

    listen       80;

     gzip on;

    server_name  bit.com www.bit.com;

    #charset koi8-r;

    access_log  /var/log/nginx/log/host.access.log  main;

    root /home/bit/bitwww;

    index index.php index.html;


    location /favicon.ico {

        access_log off;

        log_not_found off;

        }

    rewrite "^/search/(.*)$" "/plugin/united-search/index.php?stx=$1";

    rewrite "^/attendance(.*)$" "/plugin/mw.attendance$1";

    rewrite "^/doc/([a-zA-Z0-9]+)/(.*)_([0-9]+)\.html$" "/bbs/board.php?bo_table=$1&wr_id=$3";   // /doc/보드아이디/글 제목이나 뭐 잡다한_글아이디.html 

    rewrite "^/doc/(.*)$" "/$1";

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root   /usr/share/nginx/html;

    }

    rewrite "^/m(.*)$" "/plugin/mobile$1";

    location ~ \.(gif|jpg|png|js|css|ico)$ {

                expires 15d;

    }

    include /etc/nginx/php.conf;

}

 

----------------------------------------

/etc/nginx/php.conf

 

fastcgi_intercept_errors on;

# this will allow Nginx to intercept 4xx/5xx error codes

# Nginx will only intercept if there are error page rules defined

# -- This is better placed in the http {} block as a default

# -- so that in the case of wordpress, you can turn it off specifically

# -- in that virtual host's server block

location ~ \.php {

        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        # A handy function that became available in 0.7.31 that breaks down

        # The path information based on the provided regex expression

        # This is handy for requests such as file.php/some/paths/here/

        fastcgi_param  PATH_INFO          $fastcgi_path_info;

        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;

        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  SCRIPT_FILENAME    $document_root$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  PHP_SELF           http://$http_host$fastcgi_script_name;

        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

        fastcgi_param  SERVER_SOFTWARE    nginx;

        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;

        #fastcgi_pass   127.0.0.1:9000;

        fastcgi_pass    unix:/tmp/php-fpm.sock;

        fastcgi_index  index.php;

}

 

 

-----------------------------------------

/etc/php-fpm.d/www.ini

listen = /tmp/php-fpm.sock   // tcp포트보다 유닉스 소켓이 더 좋은 성능을 내준다네요.

 

실제 서비스하면서 세부적인 조정이 필요.


[출처] php nginx php-fpm eaccelerator|작성자 무한돌파