Здравствуйте. Хотел бы узнать можно ли как нибудь собрать контейнер для php_fpm и обращаться к нему через nginx? У меня есть уже установленный nginx на сервере. Я хочу создать докер контейнер который запускает только php_fpm сервис и перенаправлять конкретный запросы через nginx (proxy pass). Возможно ли реализовать такое, если да, то можете немного помочь с кодом? Я просто новичок в PHP. Спасибо!
Чем не устраивает миллион и один готовый пример LEMP via Docker ? --- Добавлено --- Покажи свои попытки. Если их не было, то начни с Гугл и туториалов по докеру.
Тем что LEMP via Docker заново настраивает и запускает сервисы Nginx и MySQL в контейнерах. Как я уже сказал выше, у меня Nginx уже настроен как отдельный сервер и слушает все входящие запросы, зачем мне запускать ещё одну в Docker’e?
Значит тебе надо на один контейнер меньше. На то они и контейнеры, Карл, чтобы собирать из них как из кубиков. С точки зрения nginx нет никакой разницы где находится слушатель php-fpm. Контейнер php должен расшаривать порт 9000. Рекомендация остаётся в силе.
--- Добавлено --- Твоя задача добраться до порта 9000. Сфокусируйся на этом. Ты можешь замапить его на локальный порт как если бы он был открыт локальным процессом.
Да может я не правильно настраиваю Nginx не могу понять почему он не перенаправляет запросы на 9000 порт, закреплю несколько скриншотов. P.S. Я запускаю весь процесс в данный момент на локалке Настройка nginx Контейнеры докер: Настройка docker-compose:
С виду должно работать. Может надо просто рестартовать? Оффтопик: Пожалуйста, не используй скриншоты там, где достаточно сделать текстовый копи-паст. --- Добавлено --- Что в логах nginx?
В логах ничего кроме ошибок об favicon. Браузер открывает дефолтную страницу nginx, странно, хотя я настраюваю дефолтный конфиг nginx. Если скинул не достаточно информации, могу полный код залить в гитхаб, если хотите...
Не надо полный код. То есть можешь, конечно, но не расчитывай на слишком большую вовлечённость других Минимальный и достаточный код должен быть здесь в текстовом виде без необходимости куда-то ходить и чего-то грузить. Это просто правила хорошего тона. Что происходит когда обращаешься к пхп скрипту в браузере: что на странице и что в логах? Если обращение идёт не к тому виртуальному хосту, сначала разберись с этим , а то не понятно о чём мы вообще здесь толкуем. --- Добавлено --- П.С. Почему закомментирована строка root ?!!! --- Добавлено --- Твой документ рут веб-сервера должен как-то быть связан с папкой на докере. Я не вижу этой связи. --- Добавлено --- root в nginx volumes в docker-compose
Страница выдает 404 Логи: /var/log/nginx/api_access.log: Код (Text): 127.0.0.1 - - [09/Mar/2020:10:54:45 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/index.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:46 +0500] "GET /index.php HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:46 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/index.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:46 +0500] "GET /index.php HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:46 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/index.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:48 +0500] "GET / HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:49 +0500] "GET / HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:49 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:50 +0500] "GET / HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:50 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:50 +0500] "GET / HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:54:50 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:55:17 +0500] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:55:20 +0500] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:55:20 +0500] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:55:24 +0500] "GET /index.php HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 127.0.0.1 - - [09/Mar/2020:10:55:27 +0500] "GET /index.php HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" /var/log/nginx/api_error.log: Код (Text): 2020/03/09 10:54:45 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/index.php" 2020/03/09 10:54:46 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/index.php" 2020/03/09 10:54:46 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/index.php" 2020/03/09 10:54:48 [error] 11675#11675: *19 "/srv/www/phpTaskManager/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost" 2020/03/09 10:54:49 [error] 11675#11675: *19 "/srv/www/phpTaskManager/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost" 2020/03/09 10:54:49 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/" 2020/03/09 10:54:50 [error] 11675#11675: *19 "/srv/www/phpTaskManager/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost" 2020/03/09 10:54:50 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/" 2020/03/09 10:54:50 [error] 11675#11675: *19 "/srv/www/phpTaskManager/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost" 2020/03/09 10:54:50 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/" --- Добавлено --- Изменил конфиг Nginx на эту, как Вы говорили в рут указал путь от docker-compose volumes: Код (Text): server { listen 80 default_server; server_name _; root /srv/www/phpTaskManager; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass localhost:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } error_log /var/log/nginx/api_error.log; access_log /var/log/nginx/api_access.log; } Проблема та же, в логах ничего, открывается 404
Я перенастроил проект https://github.com/Geebrox/taskmanager nginx_default.conf - это настройки дефолтные которые сейчас на хосте. Можете взглянуть пожалуйста?
Как я понял чтобы сделать обратный прокси все таки нужно для php_fpm поднять отдельный контейнер nginx и туда передавать запросы от nginx на remote сервере. Я хотел обойтись без отдельного nginx контейнера для php_fpm, но пока не нашёл решение. Тема пусть останется открытой, вдруг кто-нибудь сталкивался с этим и возможно имеется решение.
Нет, это работает если только через докер php+nginx связать два контейенера и передавать зависимости, в ином случае nginx не увидит upstream host 'php'. BTW, таким методотом я сейчас и сделал настройку, код в гитхабе обновил, если кому интересно.
А на localhost он как должен php увидеть? Почему теперь php слушает nginx? Каким образом он вообще сможет это сделать? Он точно не сыпет в лог ошибки с такой конфигурацией? https://github.com/Geebrox/taskmanager/blob/master/docker/php/www.conf#L6 php должен висеть на своем ip и своем порте, который будет выставлен наружу конфигом. Тогда nginx не может его не увидеть, если они конечно будут находиться в пределах одной сети.
Изучите про docker-compose и все узнаёте. P.S. Нет, в логах ошибок нет. почему вы думаете, что я не пытался реализовать такое? Вы точно тему и ответы с начала до конца читали?)
Ну, наверное потому что это бы работало. Если задать нормальные пути, обращаться к нужным контейнерам и запускаться на верных ip, то именно так и будет, о чем и написано в этой теме неоднократно. ок