[시리즈] docker와 nginx를 이용한 Drupal Env!
php를 백엔드 기술로 사용할 때 사람들이 웹 환경을 위한 램프 스택(linux - apache - mysql - php)에 대해 이야기하는 것을 항상 듣게 될 것입니다.
OS에 따라 해당 스택의 부스트 버전을 제공할 수 있는 많은 도구가 있습니다.
이러한 도구는 일반적으로 즉시 개발을 시작할 수 있도록 사전 구성되어 제공됩니다.
이러한 종류의 도구는 프로덕션 서버에 존재하도록 되어 있지 않습니다. 즉, 자신의 스택을 설정하는 방법에 대한 최소한의 기본 지식이 필요하거나 최소한 몇 가지가 필요합니다.
기본 구성 요령.
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)을 실행하기 위해 도커 컨테이너를 설정합니다.
편집하다 : .
Reference
이 문제에 관하여([시리즈] docker와 nginx를 이용한 Drupal Env!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hamzahasbi/series-drupal-env-using-docker-nginx-3oen텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)