php-fpm과 nginx에 대한 두 개의 도커 컨테이너가 있습니다. docker-compose.yml 파일로 실행하지만 php-fpm의 상태 페이지를 설정하려고 하는데 찾을 수 없습니다.
나는 접속한다http://localhost/상태url이 표시되고 파일을 찾을 수 없다는 메시지가 표시됩니다.
너무 많은 구성을 시도했지만 작동하지 않습니다.
내 디렉터리 트리는 다음과 같습니다.
C:.
│ docker-compose.yml
│
├───app
│ index.php
│
├───fpmConf
│ www.conf
│
├───nginxConf
│ default.conf
│
└───phpConf
php.ini
내 docker-compose.yml 파일은 다음과 같습니다.
version: '3'
services:
php:
image: php:7.2-fpm
container_name: php_app
restart: always
environment:
TZ: America/Mexico_City
ports:
- 9000:9000
volumes:
- ./app:/var/www/html
- ./phpConf/php.ini:/usr/local/etc/php/conf.d/custom.ini
tty: true
nginx:
image: nginx:latest
container_name: nginx_proxy
restart: always
environment:
TZ: America/Mexico_City
ports:
- 80:80
links:
- php
volumes:
- ./app:/var/www/html
- ./nginxConf:/etc/nginx/conf.d
- ./fpmConf/www.conf:/etc/php-fpm.d/www.conf
depends_on:
- php
tty: true
내 www.conf 파일은 다음과 같습니다
user = www
listen = php:9000
pm = ondemand
pm.max_children = 50
pm.max_requests = 500
pm.process_idle_timeout = 10s
pm.status_path = /status
ping.path = /ping
slowlog = /data/logs/php-fpm-slow.log
request_slowlog_timeout = 60
catch_workers_output = yes
env[TMPDIR] = /data/tmp/php
include = /data/conf/php-fpm-www-*.conf
내 default.conf 파일은 다음과 같습니다
upstream php-upstream {
server php:9000;
}
server {
server_tokens off;
charset utf-8;
client_max_body_size 128M;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
listen 80;
server_name localhost;
# set caching header for static files
location ~* \.(jpg|jpeg|gif|png|css|js|ico|svg|ttf|webp)$ {
access_log off;
log_not_found off;
expires 30d;
}
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
location ~ \.php$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_pass_header Set-Cookie;
fastcgi_pass_header Cookie;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
}
}
location /status {
access_log off;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php-upstream;
fastcgi_index status.html;
}
}
내 php.ini 파일은 다음과 같습니다
date.timezone = "America/Mexico_City"
default_charset = "utf-8";
mbstring.internal_encoding=utf-8;
mbstring.http_output=UTF-8;
mbstring.encoding_translation=On;
session.use_cookies = 1
session.name = PHPSESSID
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain = alocalhost
session.serialize_handler = php
session.gc_maxlifetime = 86400
max_input_vars = 1000000
답변1
www.conf 파일을 컨테이너에서 호스트로 복사하는 문제를 해결했습니다.
docker cp -a php_app:/usr/local/etc/php-fpm.d/www.conf ./www.conf
그런 다음 이 줄의 주석 처리를 제거하고 새 www.conf 파일을 docker와 공유합니다.
pm.status_path = /status
이것은 www.conf가 포함된 새 볼륨이 포함된 새 docker-compose.yml입니다../status/www.conf:/usr/local/etc/php-fpm.d/www.conf:
version: '3'
services:
php:
image: php:7.2-fpm
container_name: php_app
restart: always
environment:
TZ: America/Mexico_City
ports:
- 9000:9000
volumes:
- ./app:/var/www/html
- ./phpConf/php.ini:/usr/local/etc/php/conf.d/custom.ini
- ./status/www.conf:/usr/local/etc/php-fpm.d/www.conf
tty: true
nginx:
image: nginx:latest
container_name: nginx_proxy
restart: always
environment:
TZ: America/Mexico_City
ports:
- 80:80
links:
- php
volumes:
- ./app:/var/www/html
- ./nginxConf:/etc/nginx/conf.d
- ./fpmConf/www.conf:/etc/php-fpm.d/www.conf
depends_on:
- php
tty: true