2017-10-27 8 views
0

웹 서버로 nginx를 사용하여 다른 PHP 응용 프로그램이 설치된 시스템에 Wordpress를 설정하려고합니다.Nginx는 wordpress root로 하위 경로를로드합니다.

내 config 파일을 maximun으로 단순화했습니다. 다음 눌러 확인 내 블로그 중 하나 개 포스트 제공하고있다 :

server { 
    listen 80; 
    server_name blog.ct.com; 
    root /home/ff/www/blog/; 
    index index.php index.html; 

    location/{ 
      try_files $uri $uri/ /index.php?$uri&$args =405; 
    } 

    location ~ \.php$ { 
      try_files $uri =404; 
      fastcgi_buffer_size 128k; 
      fastcgi_buffers 64 32k; 
      fastcgi_busy_buffers_size 128k; 
      fastcgi_split_path_info ^(.+\.php)(/.+)$; 
      include /etc/nginx/fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      fastcgi_param APPLICATION_ENV development; 
      fastcgi_param HTTP_X_FORWARDED_PROTO https; 
      fastcgi_pass 127.0.0.1:9000; 
      fastcgi_index index.php; 
    } 
} 

을하지만 내 사용자 정의 PHP 애플리케이션과 http://blog.ct.com/vendor를 제공해야한다, 때문에 내 시스템의 요구 사항 내 최종 시스템 http://blog.ct.com/에서 (하위 경로 내에서 블로그 서비스를 제공 할 필요가 워드 프레스 블로그를 제공해야합니다).

wordpress의 로컬 루트 디렉토리는 /home/ff/www/blog/이어야합니다 (내 앱 디렉토리가 /home/ff/www/myapp/ 인 동안 변경할 수 없음). 그래서 나는 내 사용자 지정 앱 location /을 예약 할 필요가 있다고 생각, 내가 /vendor를 추가 할 경우 location /vendor

을 만들 필요가 내가 / (단지 쉽게 디버깅)에서 403을 반환, 브라우저는 405합니다 (=405/vendor에 통지 말한다 도) 쉽게 디버깅하는 :

location /vendor { 
     try_files $uri $uri/ /index.php?$uri&$args =405; 
} 
location/{ 
     return 403; 
} 

그래서 내가 nginx를가 location /vendor로 가고 있지만, 그래서 그것의 대체 (405)

어떤 생각 w를 반환 /home/ff/www/blog/index.php 내 PHP 스크립트를 찾지 못하는 생각 이런 일이 일어날 수 있니?

http://blog.ct.com/vendor을 워드 프레스에서 루트로로드하지만 다른 PHP 스크립트를 사용하여 http://blog.ct.com/을 유지하는 방법은 무엇입니까?

답변

0

나는 location /path가 사용하는 것과 동일하지 않습니다 사용 (다른 사람이 나보다 같은 문제는,이 도움이 될 수 있습니다 경우) 나에게 문제를 해결할 수있는 실마리를 준 다음 힌트

  • 을 발견했습니다 location ~(/path) (예 locationfastcgi에 어떻게의 nginx는 모든 요청에 ​​서비스를 제공하는 참조하는 데 도움이 될 수있는 location 블록에 error_log /your/path/log/error.log debug; 추가
  • location \vendor을 (정규식 어쩌면 그들은 당신이 생각하는 순서대로 확인되지 않는 다른 우선 순위가) 또는 server{ 블록).
  • alias /var/www/path/vendorroot /var/www/path/vendor (확인 Nginx -- static file serving confusion with root & alias)과 다르게 작동합니다. 별명 지시자의 경우, 위치 부분을 포함하지 않는 경로 부분 만이 별명 추가되는 반면 루트 지시자 경우

    는 전체 경로, 위치 부분을 포함하는 루트 부가된다.

  • aliasrewrite 사용하는 것은 당신이 if (!-f $request_filename) { rewrite^$document_root/index-wp.php last; }
  • 이 (error_log 그것을 확인 위 참조) SCRIPT_FILENAME 사용중인의주의 경로의 독립하고자하는 PHP 파일을 구문 분석 할 수 있습니다, 어쩌면 당신은 fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; 필요 그러나 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;을로드하고 있으므로 이전 설정에 따라 문서 루트를 두 번 연결할 수 있습니다.
  • 인덱스를 변경하면 fastcgi의 두 가지 구성을 사용할 수 있습니다.PHP 파일 이름. 예 : location ~ wp\.php$ {은 wp.php와 작동하지만 location ~ \.php$ {은 index.php와 같은 다른 모든 PHP 파일과 작동합니다.