
docker를 통해 php-fpm 및 nginx를 설치하려고 하는데 nginx에 문제가 있어 502 Bad 게이트웨이 오류가 반환됩니다. 그러나 HTML 파일을 실행하려고 하면 올바르게 표시됩니다. 이 시스템에서 PHP 파일이 올바르게 작동하려면 어떻게 해야 합니까?
Nginx 구성 사이트:
server {
listen 80;
server_name api.local.dev;
access_log /var/log/nginx/api.access.log;
error_log /var/log/nginx/api.error.log;
root /www;
charset utf-8;
index index.php index.html index.htm;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
도커파일
FROM ubuntu:13.10
# Keep upstart from complaining
RUN dpkg-divert --local --rename --add /sbin/initctl
RUN ln -sf /bin/true /sbin/initctl
# Let the conatiner know that there is no tty
ENV DEBIAN_FRONTEND noninteractive
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
RUN apt-get update && apt-get upgrade -y
RUN apt-get -y install nginx php5-fpm php5-mysql php-apc pwgen python-setuptools curl git unzip
RUN apt-get -y install php5-curl php5-gd php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-sqlite php5-tidy php5-xmlrpc
VOLUME ["/var/log/nginx"]
CMD echo "127.0.0.1 api.local.dev" >> /etc/hosts
EXPOSE 80
RUN mkdir /www
RUN chown www-data:www-data -R /www
RUN echo "<?php phpinfo() ?>" > /www/index.php
RUN cat /www/index.php
RUN mkdir /docker
ADD nginx /docker/nginx
RUN mkdir -p /var/log/nginx
RUN chown www-data:www-data /var/log/nginx
RUN sed -i -e"s/keepalive_timeout\s*65/keepalive_timeout 2/" /etc/nginx/nginx.conf
RUN sed -i -e"s/keepalive_timeout 2/keepalive_timeout 2;\n\tclient_max_body_size 100m/" /etc/nginx/nginx.conf
RUN sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php5/fpm/php.ini
RUN sed -i -e "s/upload_max_filesize\s*=\s*2M/upload_max_filesize = 100M/g" /etc/php5/fpm/php.ini
RUN sed -i -e "s/post_max_size\s*=\s*8M/post_max_size = 100M/g" /etc/php5/fpm/php.ini
RUN sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php5/fpm/php-fpm.conf
RUN sed -i -e "s/;catch_workers_output\s*=\s*yes/catch_workers_output = yes/g" /etc/php5/fpm/pool.d/www.conf
RUN cat /etc/php5/fpm/pool.d/www.conf
RUN find /etc/php5/cli/conf.d/ -name "*.ini" -exec sed -i -re 's/^(\s*)#(.*)/\1;\2/g' {} \;
RUN echo "cgi.fix_pathinfo = 0;" >> /etc/php5/fpm/php.ini
RUN cat /docker/nginx/api.local.dev > /etc/nginx/sites-available/api.local.dev
RUN ln -s /etc/nginx/sites-available/api/local.dev /etc/nginx/sites-enabled/api/local.dev
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
CMD ["nginx"]
nginx.conf
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
##
# nginx-naxsi config
##
# Uncomment it if you installed nginx-naxsi
##
#include /etc/nginx/naxsi_core.rules;
##
# nginx-passenger config
##
# Uncomment it if you installed nginx-passenger
##
#passenger_root /usr;
#passenger_ruby /usr/bin/ruby;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
답변1
좋아, 내 문제를 해결했습니다. 그렇게 했습니다.
docker run -i -t ubuntu /bin/bash
그런 다음 위와 같이 업스트림 PHP fpm 서버에 문제가 있음을 나타내는 nginx 로그를 살펴보았습니다.
tail -f /var/log/nginx/*
마지막으로 php5-fpm 서비스를 다시 시작합니다.
service php5-fpm restart
마지막으로 내 문제는 컨테이너 서비스를 설치하는 동안 PHP 구성이 잘못되어 서비스를 다시 시작하면 php5-fpm 구성이 다시 로드된다는 것입니다.
답변2
도커 컨테이너가 단지 또 다른 머신이나 VM일 뿐이라는 잘못된 가정을 하고 있습니다. Docker를 사용하면 항상 컨테이너당 하나만 실행해야 합니다. 그런 다음 링크와 볼륨을 사용하여 서로 대화하도록 해야 합니다.
CMD는 프로그램을 직접 시작해야 하며 대신 데몬은 서비스가 아닌 포그라운드에서 실행되도록 구성해야 합니다. 로그도 docker로 전달하는 것이 바람직하지만 이는 제가 할 수 있는 일이 아닙니다(github의 공식 앱 빌드 참조).
또한 Docker는 현재 적절한 보안 격리 기능을 제공하지 않으므로 특정 항목이 루트로 실행되지 않는지 확인하세요.
결국 새로 개선된 문서를 살펴보고 필수 사항을 학습하면 문제가 해결됩니다.