Debian 8의 Nginx 개발 설정. PHP FPM을 통한 PHP가 제대로 작동하지 않습니다.

Debian 8의 Nginx 개발 설정. PHP FPM을 통한 PHP가 제대로 작동하지 않습니다.

업데이트: 좋아요, 이제 아래에 보이는 내용이 행복하게 작동하는 자동화된 PHP 및 Nginx 개발 설정(자동 도메인 포함)을 위한 레시피이며 제가 겪었던 모든 문제가 이제 해결되었다고 기쁘게 말할 수 있습니다.

sudo apt-get nginx php5 php5-fpm dnsmasqDebian 8, Jessie에 다음을 설치했습니다. 개발 사이트 이름을 딴 도메인을 가질 수 있도록 dnsmasq를 설치했습니다. 나는 다음을 포함하는 .conf파일을 만들었습니다./etc/dnsmasq.d

address=/dev/127.0.0.1

그리고 설정의 이 부분은 잘 작동합니다. 모든 .dev 도메인은 Nginx에서 제공하는 로컬 호스트로 확인됩니다.

이제 개발 환경의 서버 부분과 지금까지 시도한 내용을 살펴보겠습니다(서버 블록은 매니페스트 아래에 있음). 업데이트: 모든 것이 괜찮습니다! 이제 모든 것이 잘 작동합니다!

지금까지 내가 성취한 일 목록:

  • 이제 작업 설정이 완료되었습니다(이 게시물은 최근에 편집한 내용입니다). Sitepoint 기사에서 몇 가지 유용한 팁을 찾았습니다. 그래서 내 개발 사이트 폴더의 상위 폴더(예: chgrp -R www-data /var/www )에 몇 가지 권한을 부여했고, chmod -R g + rw /var/www 및 chmod g + s /var /www를 수행했습니다. 마지막 chmod는 다음과 같습니다. 가장 좋은 것! SGID(g + s)를 추가한다는 것은 /var/www에 추가된 모든 새로운 개발 디렉터리가 자동으로 www-data의 소유가 되어 이 개발 설정이 더욱 자동화된다는 의미입니다.
  • 설정을 변경할 때마다 php5-fpm과 Nginx를 다시 로드하면 둘 다 잘 실행됩니다.
  • 고쳐 쓰다. 이제 새로운 설정이 cgi를 빠르게 실행하고 있습니다. 이제 완료했습니다. sudo apt-get php5-cgi generate-fcgi
  • www-data라는 그룹에 사용자 josh(내 기본 사용자), 루트 및 사용자 www-data(Nginx)를 추가했습니다.
  • php5-fpm의 경우 /etc/php5/fpm/pool.d/www.conf를 확인한 결과 기본 설치에서 user=www-data group=www-data라는 사용자 속성이 제공되었으며 청취 속성은 listening 이라는 것을 확인했습니다. 소유자=www-데이터 Listen.group=www-데이터
  • 나는 다음과 같은 심볼릭 링크를 만들었습니다.ln -s /etc/nginx/sites-available/local_dev.conf /etc/nginx/sites-enabled/

나는 PHP를 사용하지 않은 goodrobot.com의 Nginx 개발 설정 튜토리얼을 따랐습니다. 따라서 해당 튜토리얼의 주요 부분을 scaleyourcode.com에 있는 Christophe의 PHP 비개발 환경 튜토리얼의 일부와 결합했습니다.

이것이 제가 conf 파일의 서버 블록에 대해 생각해낸 것입니다 /etc/nginx/sites-available(두 튜토리얼의 아이디어를 결합함). 다시 말하지만 문제는 내 index.php 페이지가 제공되지 않는다는 것입니다. (서버 블록 아래의 인덱스에 index.html 파일을 추가한 다음 index.html 파일을 제공하면 제대로 작동합니다.) 고쳐 쓰다. 제가 만든 Frankenconfig 파일을 휴지통에 버리고 새 파일을 만들었습니다. 자세한 내용은 아래에 나와 있습니다. 이제 모든 것이 괜찮습니다!

업데이트 중입니다. 나는 사용자 denji(Github)가 Github에 게시한 "dnsmasq"라는 제목의 약간 수정된 버전인 새 구성 파일을 게시했습니다. 이 버전에는 PHPmyadmin 블록도 있지만 필요하지 않습니다. 또한 fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;을 location~.php 블록에 추가했는데 그 이유는 그 전에는 내 설정에서 작동하지 않았기 때문입니다. 또한 ~.php(여기서는 달러 기호, 좋지 않음) 위치 앞에 있는 달러 기호를 제거하여 실제 웹 서버에서 다음 중 하나를 사용할 때 $ 기호가 해커의 자유 통행이 되지 않도록 했습니다.

  server {
  index index.php;
  set $basepath "/var/www";

  set $domain $host;

  # check one name domain for simple application
  if ($domain ~ "^(.[^.]*)\.dev$") {
    set $domain $1;
    set $rootpath "${domain}";
    set $servername "${domain}.dev";
  }

  # check multi name domain to multi application
  if ($domain ~ "^(.*)\.(.[^.]*)\.dev$") {
    set $subdomain $1;
    set $domain $2;
    set $rootpath "${domain}/${subdomain}/www/";
    set $servername "${subdomain}.${domain}.dev";
  }

  server_name $servername;

  access_log "/var/log/nginx/server.${servername}.access.log";
  error_log "/var/log/nginx/server.dev.error.log";

  root $basepath/$rootpath;

  # check file exist and send request sting to index.php 
  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  # allow php only in root index.php
  #location ~ "^/index\.php" {
  # allow execute all php files
  location ~ \.php {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;   
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
  }

    location ~ /\.ht {
    deny all;
  }

  # disallow access to git configs path
    location ~ /\.git {
    deny all;
  }

  }

관련 정보