[시리즈] docker와 nginx를 이용한 Drupal Env!

5088 단어 drupalphpdockernginx


php를 백엔드 기술로 사용할 때 사람들이 웹 환경을 위한 램프 스택(linux - apache - mysql - php)에 대해 이야기하는 것을 항상 듣게 될 것입니다.

OS에 따라 해당 스택의 부스트 버전을 제공할 수 있는 많은 도구가 있습니다.
  • XAMPP
  • WAMP
  • MAMP
  • Acquia

  • 이러한 도구는 일반적으로 즉시 개발을 시작할 수 있도록 사전 구성되어 제공됩니다.
    이러한 종류의 도구는 프로덕션 서버에 존재하도록 되어 있지 않습니다. 즉, 자신의 스택을 설정하는 방법에 대한 최소한의 기본 지식이 필요하거나 최소한 몇 가지가 필요합니다.
    기본 구성 요령.

    php 웹 앱을 호스팅하려는 경우 사용하게 될 서버는 일반적으로 Apache 또는 nginx를 웹 서버로 사용하는 머신(클라우드 기반 서비스용 가상)입니다.

    이 기사 시리즈에서는 nginx - php-fpm - mariadb for docker를 사용하여 drupal 8 스택의 기본 설정을 다룰 것입니다.
    우선 nginx가 프록시 서버가 아닌 웹 서버로 사용하고 있음을 알리기 위해 nginx에 제공할 몇 가지 구성이 필요합니다. 이를 위해 일반적으로 *.conf 파일을 사용합니다.

    user www-data;
    pid /run/nginx.pid;
    worker_processes auto;
    
    events {
            worker_connections 768;
            # multi_accept on;
    }
    
    http {
            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;
            types_hash_max_size 2048;
            server_tokens off;
    
    
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
    
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
    
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_connect_timeout 1200s;
        proxy_send_timeout 1200s;
        proxy_read_timeout 1200s;
        proxy_busy_buffers_size 256k;
        gzip on;
        gzip_disable "msie6";
    
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
        brotli on;
        brotli_static on;
        brotli_buffers 32 8k;
        brotli_comp_level 7;
        brotli_types *;
    
        include /etc/nginx/conf.d/*.conf;
    
    }
    

    http 지시문은 이 구성에서 가장 중요합니다. 버퍼 크기 등의 값으로 항상 재생할 수 있습니다. 이 경우 내 웹 서버는 gzip 및 brotli 압축 자산을 제공하도록 구성되어 있습니다. 여기에서 웹 서버 압축에 대해 배울 수 있습니다: Gzip and Brotli compression .

    또한 사이트의 conf를 추가해야 합니다. 일반적으로 도메인 이름과 브라우저 캐시, 파일 액세스, 리디렉션 등과 같은 다른 사이트의 특정 conf를 넣는 곳입니다.
    이 파일에는 프로젝트의 특정 구성이 있지만 일부 지시문은 절대 변경되지 않습니다.

    upstream fastcgi_backend {
    server php:9000;
    keepalive 8;
    }
    server {
    listen 80;
    server_name domain.dev *.dev;
    root /var/www/html/;
    
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    
    # Very rarely should these ever be accessed outside of your lan
    location ~* \.(txt|log)$ {
        deny all;
    }
    
    location ~ \..*/.*\.php$ {
        return 403;
    }
    
    location ~ ^/sites/.*/private/ {
        return 403;
    }
    
    location / {
        # try_files $uri @rewrite; # For Drupal <= 6
        gzip_static on;
        proxy_cache cache;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 3;
        proxy_cache_valid 200 1s;
        proxy_cache_use_stale updating error timeout;
        proxy_cache_background_update on;
        proxy_cache_lock on;
        try_files $uri /index.php?$query_string; # For Drupal >= 7
    }
    

    웹서버로서 nginx와 apache의 주요 차이점을 쉽게 찾을 수 있습니다.


    Apache는 Apache 확장인 modphp를 활성화하여 PHP 스크립트를 실행할 수 있지만 nginx의 경우에는 PHP 스크립트를 실행하기 위해 php-fpm(빠른 cgi)을 사용해야 합니다.
    실행 결과만 브라우저에 렌더링하는 서버로 전달합니다.
    어떻게 할까요?
    이 지시어에 따라:

    location ~ '\.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        # Security note: If you're running a version of PHP older than the
        # latest 5.3, you should have "cgi.fix_pathinfo = 0;" in php.ini.
        # See http://serverfault.com/q/627903/94922 for details.
        include fastcgi_params;
        # Block httpoxy attacks. See https://httpoxy.org/.
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_intercept_errors on;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 64k;
        fastcgi_send_timeout 1200s;
        fastcgi_read_timeout 1200s;
        # PHP 5 socket location.
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
        # PHP 7 socket location.
        # fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    
        fastcgi_pass fastcgi_backend;
        fastcgi_keep_conn on;
        # fastcgi_pass fpm:9000;
    }
    

    이제 php-fpm으로 nginx 구성을 다루었습니다. 다음으로 스택(nginx - php-fpm - mariadb)을 실행하기 위해 도커 컨테이너를 설정합니다.

    편집하다 : .

    좋은 웹페이지 즐겨찾기