>백엔드 개발 >PHP 튜토리얼 >nginx의 SSI 문제에 대한 연구

nginx의 SSI 문제에 대한 연구

WBOY
WBOY원래의
2016-08-08 09:26:111209검색

최근에는 꽤 기분이 좋습니다. 이 프로젝트 팀에는 PHP를 전문으로 하는 사람이 아무도 없습니다. 하하. 우리 사업이군요 ㅎㅎ.. 며칠 전 20명이 넘는 선배님들 앞에서 PHP 프레임워크에 대해 이야기도 나누고, 어떤 분야에 적합한 PHP 프레임워크에 대해서도 전문가들과 논의를 했는데요. 표현력이 너무 부족해서 제가 아는 것을 명확하게 표현하지 못하는 것 같아요. , 표현을 도와줄 멘토도 필요해요. 레이 형제는 정말 제 우상입니다. 그는 기술적인 천재입니다. 확실히 레이 형제는 많은 책을 읽었고 폭넓은 분야를 다루었습니다. 특히 역사와 문학에 관한 주제가 다양합니다. 그의 대화는 체계적이고 유머러스하며 가끔 몇 줄을 인용합니다. 나는 그가 Luo Yonghao와 같은 사람과 같은 사람이라고 생각하지 않습니다. 하하 지난 2년 동안 Lei 형제는 더 많은 책을 읽고, 더 많이 말하고, 내 자신을 표현하는 능력을 향상시키는 것이 목표였습니다. . 그렇지 않으면 가장 직접적인 표현으로 공유할 수 없다는 것은 매우 우울한 일입니다.

잡담 이제 본론으로 들어가겠습니다. 오늘은 SSI에 대한 질문을 먼저 소개하겠습니다.

SSI는 Server Side Inclusion의 약어로, 서버 측 포함을 의미합니다. 오늘 제가 이야기할 내용은 nginx에서 SSI 모듈의 include 명령을 사용하는 것입니다. nginx 서버.

어떤 문제가 발생했나요? 이제 페이지를 저장하고 일부 HTML(SSI include 명령 포함)을 입력한 다음 이를 데이터베이스에 저장해야 하는 서식 있는 텍스트 편집기가 있습니다. 리치 텍스트 편집기는 다음과 같아야 합니다.

<html>
<head>
</head>
<body>
	<!--#include virtual="/sinclude/test.shtml"-->
	<div>Hello World!!!</div>
</body>
</html>

문제는 ssi 명령이 포함된 여기에 있습니다.

직접 접속하면 Hello World만 표시됩니다! ! ! , nginx를 다음과 같이 구성합니다:

ssi on;
ssi_types text/html;

이때 nginx를 통해 전달되는 MIME 유형 text/shtml의 데이터가 있으면 nginx는 이러한 명령을 구문 분석하기 위해 다시 돌아가서 문제가 발생합니다. 데이터베이스에서 데이터를 찾아 클라이언트 리치 텍스트로 반환합니다. 내 에코 내용은 다음과 같습니다.

<!--# include virtual="/sinclude/test.shtml" -->
<!--# include virtual="/sinclude/test1.shtml" -->
<!--# include virtual="/sinclude/test2.shtml" -->

페이지에 다음 양식이 표시됩니다.

서버의 다른 기능에서는 SSI를 사용해야 하는데 여기서는 필요하지 않기 때문에 조금 우울해집니다.

이때 ssi_types가 생각났습니다. 여기서 설정은 text/html이고, 일반적으로 사용되는 text/plain도 있습니다. 이런 유형의 MIME은 브라우저에서 모든 내용을 그대로 유지합니다. html과 css를 파싱하지 않고 동적으로 표시됩니다. 이 유형을 사용하면 nginx가 확장되지 않습니다. 출력 전에 MIME을 수정해 보세요.

header('Content-type: text/plain');

물론 MIME을 수정한 후에도 출력은 데이터베이스의 출력과 일치하며 변경되지 않은 상태로 유지됩니다.

문제가 해결된 것 같은데, 역사적인 이유로 배경 편집 상자의 내용이 다른 내용과 함께 반환되는 것은 예상하지 못했습니다. , 모든 내용이 텍스트 형식으로 표시됩니다. 브라우저, 문제가 아직 해결되지 않았습니다~~

이때 nginx 구성을 생각하면 nginx에서 파싱하고 확장해야 하는 파일은 일반적으로 shtml, html과 같은 접미사가 있고 쿼리 데이터베이스는 일반적으로 php이므로 ssi 사용을 줄일 수 있습니다. shtml 및 html이라는 접미사가 있는 파일에 구성을 살펴보겠습니다. 여기서는 ssi 구성 정보를 일치 항목으로 이동한 다음 효과를 살펴보겠습니다.

        location ~* \.(html|shtml|htm)$ {
            ssi on;
            ssi_types text/shtml;
            proxy_pass http://www.testssi.com;
        }

유사한 내용으로 새로운 html 및 php 파일을 생성합니다.

<?php
echo '<!--# include virtual="/sinclude/test.shtml" -->';
echo '<!--# include virtual="/sinclude/test1.shtml" -->';
echo '<!--# include virtual="/sinclude/test2.shtml" -->';
echo 'TEst!!';

HTML:

<!--# include virtual="/sinclude/test.shtml" -->
<!--# include virtual="/sinclude/test1.shtml" -->
<!--# include virtual="/sinclude/test2.shtml" -->
TEst!!

php 접근은 Test!!만 출력하고, 그 외 내용은 소스코드를 봐야만 볼 수 있다는 것을 알 수 있는데, html에서는 파싱되어 포함된 파일에 해당하는 내용이 출력되거나 오류가 발견되지 않으면 보고됩니다! ! 이 시점에서는 기본적으로 문제가 해결되었습니다. 다음 주 퇴근 후 이 방법을 사용하면 테스트 중에는 문제가 없을 것입니다.

이 글의 저작권은 저자(luluyrt@163.com)에게 있습니다. 글을 재인쇄한 후, 저자와 원문 링크를 반드시 밝혀야 합니다. 기사 페이지의 눈에 띄는 위치에 제공됩니다.

위 내용은 nginx의 SSI 문제에 대한 연구를 그 측면을 포함하여 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.