Nginx и разные версии PHP FPM + PHP

Nginx и разные версии PHP FPM + PHP

Благодаря лучшему пониманию того, чего я хочу достичь благодаряОтметкаи его предыдущийотвечать, я публикую (надеюсь) более ясную и немного другую версию моего предыдущего вопроса, поскольку эта тема достигла насыщения;

Я пытаюсь запустить несколько сайтов WordPress на сервере nginx, где каждому сайту требуется своя версия PHP. Я хочу добиться этого, используя несколько версий PHP-FPM, каждая из которых запускает свою версию PHP, отдельно от nginx.

Затем я хочу использовать .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файлов для определения того, какой сервер PHP-FPM будет использовать каждый сайт WordPress.

(по сути, мне нужна поддержка на протяжении всего процесса...)

решение1

По моему опыту, для вашего случая вполне достаточно следующей простой структуры сервера.

Предположение

На их настройку у вас будет около двух часов.

Предположение о среде сервера

1 сервер Nginx (Front-end, для обработки статических файлов)

2 сервера PHP-FPM (бэк-энд, для обработки PHP-скрипта)

1 сервер базы данных (можно разместить на другом отдельном сервере или на сервере Nginx)

Доступ к серверу Nginx можно получить с помощьюОбщественная сетьиЧастная сеть

Доступ к серверам PHP-FPM и серверам БД возможен только с сервера Nginx (Частная сеть)

Общественная сеть, что означает, что к нему могут получить доступ люди, имеющие доступ в Интернет.

Частная сеть, который можно увидеть в определенной сетевой группе. (Класс A, Класс B, Класс C. Например, 192.xx.xx.xx или 10.xx.xx.xx или 172.xxx.xxx.xxx)

Если вы используете VPS на Linode и DigitalOcean (оба они предоставляют частный сетевой IP-адрес), вы можете следовать предоставленным ими инструкциям по настройке.

Если нет, вы можете создать свой собственныйVPN (виртуальная частная сеть)или используйте свой маршрутизатор, чтобы создать его, это просто, вы можете загуглить все, что вам нужно.

Если вы используете Ubuntu, создание VPN с настройкой займет у вас менее 5 минут.

Перед следующим шагом предлагаем вам настроить правила брандмауэра для предотвращения потенциальных атак. (Используя IPTABLES или его оболочку FirewallD)

Хотя мы и делаем PHP-FPM отдельным от Nginx, однако PHP-файлы веб-сайтов не могут передаваться одновременно через TCP-порт и Unix-сокет.

Таким образом, вам придется управлять корневой папкой веб-сервера.

Параметры управления папкой веб-сайта

  1. Загрузка ваших веб-сайтов на сервер Nginx И серверы PHP-FPM с ОДНИМ И ТЕМ ЖЕ ПУТЕМ К ПАПКАМ

  2. Напишите скрипт для синхронизации файлов на всех ваших серверах.

  3. Использование GIT на всех ваших серверах.

  4. Создание NFS (сетевой файловой системы) на Nginx или другом выделенном сервере

Если вы используете *nix систему, я предлагаю четвертый вариант, потому что,

Во-первых, управляйте всеми файлами вашего веб-сайта на одном сервере.

Во-вторых, очень прост в обслуживании.

В-третьих, резервное копирование за считанные минуты (это должен быть другой вопрос)

※ NFS-сервер действует как чистый сервер хранения для ваших веб-сайтов.

Некоторые люди считают, что использование NFS приводит к задержкам в сети, однако для множества веб-сайтов, ожидающих управления, NFS является эффективным и простым способом.

Вы можете загуглить «NFS на Linux», чтобы завершить установку и настройку этого шага, это обойдется вам примерно в 1 час для новых версий.

Однако следует помнить, что сервер NFS должен находиться вЧастная сетьтакже.

Когда NFS, PHP-FPM и Nginx находятся в одномЧастная сеть, задержка сети должна быть меньше.

Тогда давайте настроимnginx.conf

Предположение

Ваш публичный IP-адрес Nginx — 202.123.abc.abc, прослушивайте 80 (или 443, если включен SSL)

Ваш 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-certificatehttps://github.com/centos-z/EZHTTP/archive/master.zip?time=$(дата +%s) -O сервер.zip

$ распаковать сервер.zip

$ cd EZHTTP-мастер

$ chmod +x start.sh

$ ./start.sh

Выберите 1 на первом экране

Выберите 1 на втором экране (LNMP)

Выберите 1 при запросе на установку версии nginx (не устанавливать)

Выберите 1 при запросе, какую версию MySQL вы хотите установить (не устанавливать)

Выберите нужную версию, когда вас спросят, какую версию PHP вы хотите установить.

Оставьте все настройки по умолчанию (это облегчит управление PHP-FPM в будущем)

Выберите, какие дополнительные расширения вам нужны. Конечно, вы можете их проигнорировать, так как все общие расширения будут установлены позже.

Пусть эта оболочка начнет компилироваться!

Связанный контент