Как настроить nginx upstream с помощью php на ubuntu?

На Ubuntu 18.04 у меня работает nginx

upstream vault {
server 127.0.0.1:8001;
}

server {
listen 80;
server_name vault.shopshop.space;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log debug;

location ~ \.php$ {
fastcgi_pass vault;
}
}

Идея состоит в том, что когда я нажимаю vault.shopshop.space, он должен попасть в простое прослушивание php backgroud serivce 8001

Этот php фоновый сервис отсюда: https://www.slimframework.com/docs/v3/tutorial/first-app.html

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '../vendor/autoload.php';

$app = new \Slim\App;
$app->get('/hello/{name}', function (Request $request, Response $response, array $args) {
$name = $args['name'];
$response->getBody()->write("Hello, $name");

return $response;
});
$app->run();

Я бегу это php -S localhost:8001Я могу свернуться на моем сервере Ubuntu.

curl http://localhost:8001/hi/bla

будет выводить hello, bla

бежать netstat -npl

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      13004/nginx: master
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      539/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      643/sshd
tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN      12961/php-fpm: mast
tcp6       0      0 :::22                   :::*                    LISTEN      643/sshd
tcp6       0      0 ::1:8001                :::*                    LISTEN      12325/php
udp    49920      0 127.0.0.53:53           0.0.0.0:*                           539/systemd-resolve
udp        0      0 45.76.119.188:68        0.0.0.0:*                           512/systemd-network
raw6       0      0 :::58                   :::*                    7           512/systemd-network

простой сервис php прослушивает 8001 в ip4 и ip6

UFW Firewall

To                         Action      From
--                         ------      ----
Nginx Full                 ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
8001                       ALLOW       Anywhere
Nginx Full (v6)            ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)
8001 (v6)                  ALLOW       Anywhere (v6)

брандмауэр может слушать 8001

www.conf, только слушай 8001

/etc/php/5.6/fpm/pool.d/www.conf

;listen = /run/php/php5.6-fpm.sock
listen = 8001

Эта проблема:

http://vault.shopshop.space/hi/bla, 404

http://vault.shopshop.space, default nginx page

Я ожидаю привет бла

0

Решение

Вот пример конфигурации для nginx + php-fpm в документация.

У вас нет в вашей конфигурации:

  • корень
  • fastcgi params
  • так далее

Вот пример с апстримом:

upstream vault {
server 127.0.0.1:8001;
}

server {
listen 80;
server_name vault.shopshop.space;

error_log /var/log/nginx/vault.shopshop.space_error.log;
access_log /var/log/nginx/vault.shopshop.space_access.log;

root /path/to/public;
index index.php;

location / {
try_files $uri /index.php$is_args$args;
}

location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass vault;
}
}

Вы должны исправить путь к общедоступному каталогу в корневой строке.

1

Другие решения

Все, что сказал @mindfl, плюс вы не можете поймать весь блок локаций. Ваш единственный блок местоположения это, который определяет регулярное выражение для запросов, заканчивающихся на .php

location ~ \.php$ {
fastcgi_pass vault;
}

http://vault.shopshop.space/hi/bla не заканчивается .phpи как у вас нет index или же try_files Директивы, то этот запрос никогда не будет обрабатываться этим блоком местоположения.

Конфигурация, опубликованная @mindfl, должна стать для вас хорошей отправной точкой.

0

По вопросам рекламы ammmcru@yandex.ru