Nginx 및 다양한 버전의 PHP FPM + PHP

Nginx 및 다양한 버전의 PHP FPM + PHP

덕분에 내가 달성하고자 하는 것이 무엇인지 더 잘 이해하게 되었기 때문에표시그리고 그의 이전답변, 해당 스레드가 포화 상태에 도달함에 따라 이전 질문에 대해 (희망적으로) 더 명확하고 약간 다른 변형을 게시하고 있습니다.

nginx 서버에서 여러 WordPress 사이트를 실행하려고 하는데, 각 사이트에는 서로 다른 버전의 PHP가 필요합니다. nginx와 별도로 서로 다른 버전의 PHP를 실행하는 여러 버전의 PHP-FPM을 사용하여 이를 달성하고 싶습니다.

.conf그런 다음 파일을 사용하여 각 사이트가 사용하는 PHP-FPM 서버를 제어하여 해당 사이트가 원하는 PHP 버전에서 실행되도록 하고 싶습니다 .(에 따르면코멘트부분)

현재 testsite1의 서버 블록은 다음과 같으며 기본 PHP 버전을 실행하고 있습니다.

server {
    listen 80;
    listen [::]:80;

    root /usr/share/nginx/html/testsite1;
    index index.php index.html index.htm;

    server_name local.testsite1.com;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

이것은 에 위치하고 /var/nginx/sites-available/testsite1있으며 에 심볼릭 링크되어 있습니다 /var/nginx/sites-enabled/testsite1. 각 서버 블록은 다음의 별도 파일에 위치합니다.sites-available

testsite1
testsite2
testsite3

다른 버전의 PHP(5.3.3)를 컴파일했지만 여러 PHP-FPM 서버를 설정하는 방법과 각 서버를 다른 버전의 PHP로 '지정'하는 방법을 잘 모르겠습니다. 또한 .conf각 WordPress 사이트에서 사용할 PHP-FPM 서버를 정의하기 위해 여러 파일을 설정하는 방법에 대한 지침이 필요합니다 .

(본질적으로 전 과정 내내 손을 잡고 있어야 하는데...)

답변1

내 경험상, 귀하의 경우에는 다음과 같은 간단한 서버 구조로 충분합니다.

추정

설정하는 데 약 2시간이 소요됩니다.

서버 환경 가정

1 x Nginx 서버(프런트엔드, 정적 파일 처리용)

2 x PHP-FPM 서버(백엔드, PHP 스크립트 처리용)

1 x 데이터베이스 서버(다른 별도의 서버나 Nginx 서버 모두 괜찮습니다)

Nginx 서버는 다음을 통해 액세스할 수 있습니다.공용 네트워크그리고사설망

PHP-FPM 서버와 DB 서버는 Nginx 서버(사설망)

공용 네트워크, 이는 인터넷이 있는 사람들이 액세스할 수 있음을 의미합니다.

사설망, 특정 네트워크 그룹에서 볼 수 있습니다. (클래스 A, 클래스 B, 클래스 C. Ex, 192.xx.xx.xx 또는 10.xx.xx.xx 또는 172.xxx.xxx.xxx)

Linode 및 DigitalOcean에서 VPS를 사용하는 경우 둘 다 개인 네트워크 IP를 제공하므로 해당 지침에 따라 설정할 수 있습니다.

그렇지 않은 경우 직접 설정할 수 있습니다.VPN(가상사설망)또는 라우터를 사용하여 라우터를 구축하는 것은 쉽습니다. 필요한 모든 것을 GOOGLE로 검색할 수 있습니다.

Ubuntu를 사용하는 경우 구성이 포함된 VPN을 만드는 데 드는 비용은 5분 미만입니다.

다음 단계 전에 잠재적인 공격을 방지하기 위해 방화벽 규칙을 설정하는 것이 좋습니다. (IPTABLES 또는 해당 래퍼인 FirewallD를 사용하여)

그러나 Nginx에서 PHP-FPM을 전용으로 만들었지만 웹사이트의 PHP 파일은 TCP 포트와 Unix 소켓을 모두 통과할 수 없습니다.

따라서 웹 서버의 루트 폴더를 관리해야 합니다.

웹사이트 폴더 관리 옵션

  1. 동일한 폴더 경로를 사용하여 Nginx 서버 및 PHP-FPM 서버에 웹사이트 업로드

  2. 모든 서버에 대한 동기 파일에 대한 스크립트 작성

  3. 모든 서버에 GIT를 사용합니다.

  4. Nginx 또는 다른 전용 서버에서 NFS(네트워크 파일 시스템) 생성

*nix 시스템을 사용하는 경우 다음과 같은 이유로 네 번째 옵션을 제안합니다.

먼저, 하나의 서버에서 모든 웹사이트 파일을 관리하세요

둘째, 유지 관리가 매우 쉽습니다.

세 번째, 몇 분 만에 백업(이건 또 다른 질문이 되어야 합니다)

※ NFS 서버는 웹사이트의 순수 스토리지 서버 역할을 합니다.

어떤 사람들은 NFS를 사용하면 네트워크 대기 시간이 발생한다고 생각할 수도 있지만, 관리를 기다리는 여러 웹 사이트의 경우 NFS가 효율적이고 간단한 방법입니다.

"Linux의 NFS"를 검색하여 이 단계의 설치 및 구성을 완료할 수 있으며 최신 버전의 경우 약 1시간이 소요됩니다.

그러나 NFS 서버는 다음 위치에 있어야 합니다.사설망또한.

NFS, PHP-FPM, Nginx가 모두 동일한 경우사설망, 네트워크 대기 시간이 짧아야 합니다.

그럼 구성해보자nginx.conf

추정

Nginx 공용 IP는 202.123.abc.abc입니다. 수신 대기 시간은 80(또는 SSL이 활성화된 경우 443)입니다.

귀하의 PHP-FPM 5.5는 192.168.5.5에 있습니다. 9008을 들어보세요

귀하의 PHP-FPM 5.6은 192.168.5.6에 있습니다. 9008을 들어보세요

(추가 예) HHVM 3.4가 192.168.5.7 에 있고 9008을 듣습니다.

그리고 PHP 5.5가 가장 많이 사용되는 PHP 버전이라고 생각하시나요?

    server {

         listen 80 default server;
         server_name frontend.yourhost.ltd;
         #root PATH is where you mount your NFS
         root /home/www;   
         index index.php;

    location ~ \.php$ {
        try_files  $uri $uri/ = 404;
        fastcgi_pass   192.168.5.5:9008;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PHP_VALUE  open_basedir=$document_root:/tmp/:/proc/;
        include fastcgi_params;
        fastcgi_buffer_size 512k;
        fastcgi_buffers 256 4k;
        fastcgi_busy_buffers_size 512k;
        fastcgi_temp_file_write_size 512k;
        fastcgi_intercept_errors on;

    }

    }
#Here to set up you vhosts
include vhosts/*.conf; 

위 줄은 마지막 줄 앞에 와야 합니다.}

vhosts그런 다음 폴더 내부에 라는 폴더를 만듭니다 .nginx.conf

추정

PHP 5.6을 사용하는 또 다른 응용 프로그램이 있습니다.

다른 애플리케이션이 HHVM을 사용하고 있습니다.

PHP 5.6의 경우(vhosts/app1.conf)

       server {
         server_name app1.yourhost.ltd;
         listen 202.123.abc.abc:80;
         index index.php;
         #root PATH is where you mount your NFS
         root /home/app1;
         #Include your rewrite rules here if needed
         include rewrite/app1.conf;

         location ~ \.php($|/){
             try_files  $uri $uri/ = 404;

             fastcgi_pass   192.168.5.6:9008;
             fastcgi_index  index.php;
             include        fastcgi_params;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
               if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                   set $real_script_name $1;
                   set $path_info $2;
                }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
            fastcgi_param  PHP_VALUE         open_basedir=$document$
         }
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                    expires      30d;
      }

       location ~ .*\.(js|css)?$ {
                    expires      12h;
       }

        access_log  /var/wwwlog/app1/access.log access;
        error_log  /var/wwwlog/app1/error.log error;
     }

HHVM의 경우(vhosts/app2.conf)

       server {
         server_name app2.yourhost.ltd;
         listen 202.123.abc.abc:80;
         index index.php;
         #root PATH is where you mount your NFS
         root /home/app2;
         #Include your rewrite rules here if needed
         include rewrite/app2.conf;

         location ~ \.hh($|/){
             try_files  $uri $uri/ = 404;

             fastcgi_pass   192.168.5.7:9008;
             fastcgi_index  index.hh;
             include        fastcgi_params;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
               if ($fastcgi_script_name ~ "^(.+?\.hh)(/.+)$") {
                   set $real_script_name $1;
                   set $path_info $2;
                }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
             fastcgi_param  PHP_VALUE         open_basedir=$document$
         }
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                    expires      30d;
      }

       location ~ .*\.(js|css)?$ {
                    expires      12h;
       }

        access_log  /var/wwwlog/app2/access.log access;
        error_log  /var/wwwlog/app2/error.log error;
     }

이러한 방식으로 가상 호스트에 대해 다른 SSL 인증서를 추가할 수도 있습니다.

서버를 다시 시작하고 즐기십시오!

편집됨

다양한 버전의 PHP-FPM을 설치하려면 직접 컴파일하거나 기존 스택을 사용하면 됩니다.

https://github.com/centos-bz/EZHTTP/archive/master.zip 시간을 절약하는 것이 좋습니다

방법 사용(컴퓨터에 WGET 및 UNZIP이 설치되어 있다고 가정)

$ wget --no-check-인증서https://github.com/centos-z/EZHTTP/archive/master.zip?time=$(날짜 +%s) -O 서버.zip

$ 서버.zip 압축 해제

$ cd EZHTTP-마스터

$ chmod +x start.sh

$ ./start.sh

첫 화면에서 1번을 선택하세요.

두 번째 화면에서 1번 선택(LNMP)

설치하려는 nginx 버전을 물을 때 1을 선택하십시오(do_not_install).

설치하려는 mysql 버전을 물을 때 1을 선택하십시오(do_not_install).

어떤 버전의 PHP를 설치하고 싶은지 물을 때 원하는 버전을 선택하세요.

모든 설정을 기본값으로 유지합니다. (향후 PHP-FPM을 쉽게 관리할 수 있도록 합니다.)

원하는 추가 확장을 선택하세요. 물론 모든 일반 확장이 나중에 설치되므로 무시할 수 있습니다.

이 쉘의 컴파일을 시작해보세요!

관련 정보