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는 다른 일치 항목 검색을 중지합니다. 정규 표현식이 없거나 일치하는 정규 표현식이없는 경우 가장 높은 일치 항목은 그대로입니다. 일치하는 명령 으로 사용될 것.