Nginx에서 ThinkPHP5의 구성 방법

http://www.php.cn/php-weizijiaocheng-394360.html

이 기사는 주로 Nginx에서 ThinkPHP5의 구성 방법을 소개하고 참조 및 연구를 위해 공유합니다. 많이 말하지 말고 자세한 소개를 살펴 보겠습니다
. URL 공개 디렉토리는
보안상의 이유로 숨겨져 있습니다 . 입구 of TP5 파일이 공개로 변경되었습니다. 이는 악의적 인 사용자가 "/ thinkphp /", "/ vendor /"및 기타 디렉토리에있는 파일에 액세스하는 것을 방지하기 때문입니다. 따라서 이전 습관에서 웹 사이트 documentroot를 프로젝트 루트 디렉토리로 구성 할 때 URL에 액세스하려면 / public /을 추가해야합니다. 물론 엔트리 파일을 루트 디렉토리에 다시 넣은 다음 이전 3.x 버전과 동일한 방식으로 액세스하는 어린 이용 신발이있을 수 있습니다.
그러나 분명히 이것은 과학적이지 않습니다.
프로젝트 디렉토리가 "/web/wwwroot/augsky.com"이라고 가정하면 웹 사이트의 nginx 구성 파일에 루트를 다음과 같이 구성합니다.
root /web/wwwroot/augsky.com/public;
그러나 open_basedir를 다음과 같이 설정해야합니다. 위의 첫 번째 수준 프로젝트의 루트 디렉터리 아래에서 그렇지 않으면 응용 프로그램이 공용 디렉터리의 다른 파일을 호출 할 수있는 권한이 없으며 웹 사이트는 500 개의 연결할 수 없다고보고합니다. (open_basedir의 구성은 기본적으로 php.ini에 있지만 다중 가상 머신 환경 인 경우 각 웹 사이트의 user.ini 파일에있을 수 있습니다. 이는 실제 상황에 따라야합니다.) 구체적인 구성은 다음과 같습니다. 다음과 같이 :
open_basedir = / web / wwwroot / augsky.com : / tmp / : / proc /
숨겨진 항목 파일 index.php :

	location /
  {
    
    
    try_files $uri $uri/ /index.php?s=$uri&$args;
    #如果请求不是文件或目录,则将uri交给index.php处理,同时保留参数
  }

try_files :
try_files
구문 : try_files file1 [file2… filen] uri
OR
try_files file1 [file2… filen] = code
기본값 : 없음
범위 : 서버 위치
try_files는 여러 매개 변수를 지원하며 각 매개 변수는 파일을 나타내며 시스템은 이러한 파일이 순서대로 존재하고 직접 실행합니다. 슬래시 "/"의 끝은 디렉토리를 나타냅니다. 존재하지 않으면 마지막 매개 변수가 가리키는 파일로 리디렉션하거나 지정된 http 상태 코드를 반환합니다.
Pathinfo 구성
구성 파일에이 섹션을 추가합니다 (lnmp 원 클릭 패키지 사용자 인 경우이 섹션을 건너 뛰고 아래로 스크롤하십시오).

	location ~ [^/]\.php(/|$) {
    
    
  set $path_info "";
  #定义变量 $real_script_name,用于存放真实地址
  set $real_script_name $fastcgi_script_name;
  #如果地址与引号内的正则表达式匹配
  if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
    
    
  #将文件地址赋值给变量 $real_script_name
  set $real_script_name $1;
  #将文件地址后的参数赋值给变量 $path_info
  set $path_info $2;
  }
  #配置fastcgi的一些参数
  fastcgi_pass unix:/tmp/php-cgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
  include  fastcgi_params;
}

위에서 설명해야 할 것은 fastcgi_pass의 설정으로 실제 PHP 버전과 설치 디렉토리에 따라 설정해야합니다.
이 작업을 수행 한 후 nginx 및 php를 저장하고 다시 시작하여 적용합니다. lnmp 원 클릭 패키지 사용자 인 경우 위의 설정을 수행 할 필요가 없습니다. 아래를보십시오.
lnmp 원 클릭 패키지 pathinfo 설정
실제로 lnmp 원 클릭 패키지 의 pathinfo military 형제는 이미 작성되어 있습니다. enable-php.conf를 포함하고 enable-php-pathinfo.conf를 포함하도록 수정 한 다음 lnmp를 다시 시작하면됩니다.
#include enable-php.conf; 또는이 줄을 주석 처리하고
아래에 enable-php-pathinfo.conf를 포함 하는 새 줄을 추가 할 수 있습니다
. url에서 모듈을 숨기는 방법은 다음과 같습니다. url에서
기본 모듈 인덱스
숨기는 것은 매우 간단합니다. 엔트리 파일에서 사용하는 모듈로 상수 BIND_MODULE을 정의하기 만하면됩니다. 기본 인덱스를 예 :
1 define ( 'BIND_MODULE', 'index'); 이렇게
하면 url의 모듈 이름 수준에 더 이상 디렉토리가 없습니다. 수준이 낮은 URL은 SEO에 좋습니다.
다음은 nginx
에서 위치에 대한 일치 규칙입니다.

~ 물결 선은 대소 문자를 구분하는 정규 일치가 수행됨을 나타냅니다.

~ *는 대소 문자를 구분하지 않고 정규 일치를 수행하는 것을 의미합니다.

^ ~ ^ ~는 정상적인 문자 일치를 의미합니다.이 옵션이 일치하면이 옵션 만 일치하고 다른 옵션은 일치하지 않습니다. 일반적으로 디렉토리를 일치시키는 데 사용됩니다.

= 일반 문자의 정확한 일치 수행

@ # "@"는 error_page, try_files와 같은 내부 타겟팅에 사용될 때 명명 된 위치를 정의합니다.

위치 일치 우선 순위

= 정확한 일치가 먼저 처리됩니다. 정확히 일치하는 항목이 발견되면 nginx는 다른 일치 항목 검색을 중지합니다.

일반 문자 일치의 경우 정규식 규칙과 긴 블록 규칙이 먼저 쿼리와 일치됩니다. 즉, 항목이 일치하는 경우 정규식 일치와 더 긴 일치가 있는지 확인해야합니다.

^ ~이 규칙 만 일치하고 nginx는 다른 일치 항목 검색을 중지합니다. 그렇지 않으면 nginx가 다른 위치 지침을 계속 처리합니다.

마지막으로 일치 논리에는 " "and " *"명령이 있습니다. 해당 일치 항목이 발견되면 nginx는 다른 일치 항목 검색을 중지합니다. 정규 표현식이 없거나 일치하는 정규 표현식이없는 경우 가장 높은 일치 항목은 그대로입니다. 일치하는 명령 으로 사용될 것.

추천

출처blog.csdn.net/weixin_42094764/article/details/114658977