WebServer

728x90
반응형

 

 

 

 


 

 

들어가며

IIS 에 설치한 Php 프로젝트는 대용량 파일을 올려놓는 프로젝트였는데요. 그렇다 보니 IIS 설정과 PHP 에 대용량 파일을 올리기 위한 설정을 진행해야 합니다. 

 

 

 

 

 

01. IIS 요청 필터링 설정

 

IIS 의 서버 설정 중, 요청 필터링 메뉴에 접근 합니다. 해당 메뉴에서 "기능 설정 편집" 메뉴를 선택합니다. 

해당 설정 편집 메뉴를 클릭하면, 허용되는 최대 콘텐츠 길이 (바이트)를 편집할 수 있는데요. 

 

기본적으로 30MB 로 설정이 되어 있는데요.

이 부분에 최대 바이트 길이는 4.2GB 까지입니다. 

 

 

해당 입력값의 한계값인 4294967295 값을 입력합니다. 

 

 

 

 

 

 

02. php.ini 파일 수정

 

제가 php 를 설치한 위치는 D:\\ 쪽인데요. 해당 php 설치 폴더에 접근하게 되면, 

php.ini 파일을 확인 할 수 있습니다. 

 

 

 

# 스크립트가 사용할 수 있는 최대 메모리 양
memory_limit = 4G



# PHP가 허용하는 POST 데이터의 최대 크기.
post_max_size = 4G



# 업로드된 파일의 최대 허용 크기.
upload_max_filesize = 4G



# 각 스크립트의 최대 실행 시간(초)
max_execution_time = 60000



# 단일 요청을 통해 업로드할 수 있는 최대 파일 수
max_file_uploads = 20



# 각 스크립트가 요청 데이터를 구문 분석하는 데 사용할 수 있는 최대 시간입니다.
# (-1) 제한없음
max_input_time = -1

해당 ini 파일을 열고, 각각에 해당하는 파일을 수정하면 됩니다. 

그리고 IIS를 재시작 하게 되면, 적용됩니다!

 

 

 

 

 

참조

 

 

 

 

 

 

 

 

 

END


 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90
반응형

 

 

 

 


 

 

들어가며

IIS 서버를 이용해서 PHP 프로젝트를 설정할 경우 아래와 같은 오류가 발생했을때, 해결하는 방법을 정리했습니다. 

에러메시지는 아래와 같은데요.

Internal Server Error <handler> scriptProcessor could not be found in <fastCGI> application configuration.

 

 

 

 

 

01. 500.0 - Internal Server Error

IIS에 PHP로 구성된 프로젝트를 설정하고 있던 도중, 위와 같은 에러메시지가 나타 났는데요. 

"<handler> scriptProcessor를 <fastCGI> 애플리케이션 구성에서 찾을 수 없습니다."

 

자세한 오류 정보:
모듈    FastCgiModule
알림    ExecuteRequestHandler
처리기    PHP FastCgi
오류 코드    0x80070585

 

처음 보는 에러 메시지여서, 차근차근 확인해 봤는데요. 

web.config 파일에 대한 이슈인 듯 해서 해당 부분에 대해서 확인 했습니다. 

 

 

 

02. web.config 파일 확인

FastCgiModule 를 설정 하는 파일에 위치가 잘못 되었을까 해서, 확인 했는데 정상적이였습니다. 

그래서 혹시나 싶어 web.config 파일을 열어봤는데요!

 

Fast CGI 경로를 설정하면서, Web.config 파일에 경로가 잘못 들어갔으며, 중복으로 두개가 들어가 있었습니다.

 

 

 

 

03. php-cgi 경로 수정

중복으로 들어가있던, 하나의 CGI 경로는 주석처리를 했고요.

나머지 하나의 php-cgi 경로는 실제 존재하는 위치로 수정했더니, 500.0 에러 없이 정상적으로 접속이 가능했습니다!

 

 

 

 

 

 

참조

 

 

 

 

 

 

 

 

 

END


 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90
반응형

IIS WebServer를 사용해서 서비스 하는 Web 어플리케이션의 경우 장기간 접속이 되지 않은 페이지에 대해서 Sleep 상태로 전환이 되는 경우가 발생하는데요.

이때 접속을 시도하게 되면, 약간의 딜레이가 발생하게 됩니다. 이런 문제는 사전에 예방할 수 있으며, 아래의 방법으로 웹 어플리케이션이 항상 준비단계로 대기하도록 설정 할 수 있습니다. 

 


 

어플리케이션 풀 설정

IIS관리자 (inetmgr) 을 실행한 뒤, 어플리케이션 풀에서 담당풀의 기본값 설정을 선택합니다.

IIS 관리자는 시작 -> 실행 -> inetmgr로 실행하셔도 됩니다.

 

 

시작모드의 기본값이 OnDemand 로 되어 있는데요. 이를 AlwaysRunning 으로 바꿔주면, 항시 준비 상태로 요청을 기다립니다.

 

 

유후 시간 제한 조치도 Terminate 에서 Suspend 로 변경해줍니다. 

 

 

 

 

 

사이트 설정

사이트 설정에서는, 하당 사이트의 "고급설정" 메뉴를 선택 후, 미리 로드 활성화됨을 False -> True 로 변경해줍니다.

 

 

 

 

서버 역할 선택 설치

Windows Server를 사용할 경우, 서버 역활 설치에서 "응용 프로그램 초기화" 를 설치해줍니다. 

해당내용을 설치할 경우, 웹 페이지 처리시, 비용이 많이 드는 웹 응용 프로그램의 초기화 작업을 수행합니다.

 

 

 

 

728x90
728x90
반응형

카테고리를 새로 만들자니 애매해서, 연관성이 높은 카테고리에 일단 배치했습니다. 

정확이 원인이 밝혀지지 않아서 포스팅이 조심스럽긴 하지만, 

iisreset /stop, iisreset /restart 명령에도 불구하고, 

어플리케이션이 정상적으로 종료되지 않는 현상이 발견되었습니다. 

Application_End가 호출이 되었음에도... 몇번의 호출이 더 발생을 하네요.

 

내부적으로 호출되는 Timer 의 영향인지, 조금더 확인이 필요하지만

추후에 재 포스팅 하기로 하고, 

일단 iisreset 이외에 중지 방법을 알게 되어서 포스팅합니다.

 

 

 

net start / stop

cmd> net stop w3svc
cmd> net start w3svc

Windows 10 및 Windows Server 2019 아래 버전에서 사용 가능했습니다. 

 

 

net1 start / stop

cmd> net1 stop w3svc
cmd> net1 start w3svc

Windows 10 or Windows Server 2019 상위 버전에서 net 명령어 실행시

정상적으로 동작하지 않았습니다. 

 

 

Powershell - Stop-Service / Start-Service

$> Stop-Service w3svc
$> Start-Service w3svc

 

 

참고

'iisreset' 명령은 'net start / stop w3svc' 의 상위 집합 명령어 입니다. net start / stop 명령어는 모든 웹 사이트의 영향을 미치는 WWW 서비스를 종료 / 시작 합니다.

그러나 'iisreset'은 'FTP 서비스 (ftpsvc), SMTP, NNTP 등과 같은 다른 관리 서비스를 다시 시작하는 것과 같은 기능을 중지하는 것과는 별개로 훨씬 더 많은 작업을 수행합니다.

 

 

 

 

docs.microsoft.com/ko-kr/troubleshoot/iis/using-iisreset-restart-iis-result-error

 

IIS를 다시 IISReset.exe 때 오류가 발생했습니다. - Internet Information Services

이 문서에서는 IIS 서비스를 다시 시작할 때 발생하는 오류에 IISReset.exe 해결 방법을 제공합니다.

docs.microsoft.com

 

 

728x90
728x90
반응형

IIS 프로세스가 실행 요청을 받기 전에 다음 단계에 설명 된 일부 예비 처리가 발생합니다.

 

  1. 요청이 HTTP.sys 에 도착합니다.

  2. HTTP.sys 는 요청이 유효한지 확인합니다. 요청이 유효하지 않으면 유효하지 않은 요청에 대한 코드를 클라이언트로 다시 보냅니다. 

  3. 요청이 유효한 경우, 정적 컨텐츠를 즉시 제공할 수 있으므로 HTTP.sys는 요청이 정적 컨텐츠 (HTML)에 대한 것인지 확인 합니다.

  4. 요청이 동적 내용에 대한 것이면, HTTP.sys 는 응답이 커널모드 캐시에 있는지 확인 합니다. 

  5. 응답이 캐시에 있으면 HTTP.sys 는 응답을 즉시 반환합니다. 

  6. 응답이 캐시되지 않으면, HTTP.sys는 올바른 요청 큐를 결정하고, 해당 큐에 요청을 배치 합니다. 이론적으로 HTTP.sys 가 처리할 수 있는 요청의 수는 무제한 입니다.

  7. 큐에 할당된 작업자 프로세스 (W3WP.exe)가 없는 경우 HTTP.sys는 WWW 서비스가 시작하도록 신호를 보냅니다. 

  8. 작업자 프로세스가 큐에서 요청을 가져옵니다.
    (여기에서 요청 수가 궁금합니다. IIS 7.0 통합 모드의 경우 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 내의 MaxConcurrentRequestsPerCPU 라는 DWORD가 CPU당 동시 요청수를 결정합니다. 자세한 내용은 이 URL 을 참조하세요. http://blogs.msdn.com/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx)
    및 요청 유형을 결정하기 위해 URL을 평가하여 요청을 처리 합니다.  (ASP, ISAPI 또는 CGI)

  9. 작업자 프로세스는 응답을 HTTP.sys로 다시 보냅니다. 

  10. HTTP.sys 는 응답을 클라이언트로 다시 보내고 요청이 구성된 경우 요청을 기록합니다. 


Architecture:

 


 

IIS 6.0은 새로운 요청 처리 아키텍처로 완전히 재 설계되었으며, 프로세스 외부 비용을 발생시키지 않고 높은 격리 수준과 훨씬 높은 수준의 안정성 및 확장 성을 제공합니다. IIS 6.0의 주요 구성 요소를 다음 두 가지 범주로 나눌 수 있습니다.

 

  • HTTP.sys—HTTP.sys는 들어오는 요청을 수신하고 해당 요청을 적절한 큐에 대기시키는 커널 모드 HTTP 리스너입니다. 각 요청은 하나의 응용 프로그램 풀에서 서비스합니다. IIS 6.0의 응용 프로그램 풀에는 하나 이상의 응용 프로그램이 포함될 수 있습니다. 주목해야 할 또 다른 중요한 사항은 HTTP.sys에서 타사 코드를 실행할 수 없으므로 웹 서버의 안정성이 향상된다는 것입니다.
  • WAS (Web Administration Service) - WAS는 사용자 모드 구성 및 프로세스 관리자입니다. 웹 관리 서비스 구성 요소는 구성 및 프로세스 관리의 두 가지 조작을 수행합니다. 여기서도 제 3자는 허용되지 않습니다. 웹 서버가 처음 초기화되면 WAS는 HTTP.sys 및 응용 프로그램 풀을 구성합니다. 또한 작업자 프로세스의 수명을 모니터링하고 제어합니다. 이를 위해 WAS는 프로세스 상태 모니터링, 관리자 설정 기준에 따라 자동으로 작업자 프로세스 재활용, 작업자 프로세스 시작 및 중지 등과 같은 활동을 수행 할 수 있습니다.
  • 응용 프로그램 풀 — 응용 프로그램 풀은 일련의 웹 사이트 및 응용 프로그램을 관리하는 데 사용됩니다. 각 응용 프로그램 풀은 HTTP.sys 내의 하나의 요청 큐와 이러한 요청을 처리하는 하나 이상의 Windows 프로세스에 해당합니다. IIS 6.0은 서버 당 최대 2,000 개의 응용 프로그램 풀을 지원할 수 있으며 동시에 여러 개의 응용 프로그램 풀이 작동 할 수 있습니다. 예를 들어, 부서 서버는 한 응용 프로그램 풀에 HR이 있고 다른 응용 프로그램 풀에 재무가있을 수 있습니다. 인터넷 서비스 공급자 (ISP)는 한 응용 프로그램 풀에 한 고객의 웹 사이트와 응용 프로그램이 있고 다른 응용 프로그램 풀에 다른 고객의 웹 사이트가있을 수 있습니다. 응용 프로그램 풀은 Windows Server 2003 프로세스 경계에 의해 다른 응용 프로그램 풀과 분리됩니다. 따라서 하나의 응용 프로그램 풀에있는 응용 프로그램은 다른 응용 프로그램 풀에있는 응용 프로그램의 영향을받지 않으며 현재 응용 프로그램 풀에서 서비스하는 동안 응용 프로그램 요청을 다른 응용 프로그램 풀로 라우팅 할 수 없습니다. 서버가 실행되는 동안 응용 프로그램을 다른 응용 프로그램 풀에 쉽게 할당 할 수 있습니다.
  • 작업자 프로세스-작업자 프로세스는 응용 프로그램 풀의 웹 사이트 및 응용 프로그램에 대한 요청을 처리합니다. ISAPI 필터 및 확장의로드와 인증 및 권한 부여를 포함한 모든 웹 응용 프로그램 처리는 하나 이상의 호스트 작업자 프로세스에로드되는 새로운 WWW 서비스 DLL에 의해 수행됩니다. 작업자 프로세스 실행 파일의 이름은 W3WP.EXE입니다.

 

http://blog.sina.com.cn/s/blog_55ba8b460100nw5e.html
728x90
728x90
반응형

Windows 또는 Windows Server에서 사용하는 IIS에 cgi 프로그램을 구동할 수 있습니다.

이로 인해서 php로 제작한 웹사이트를 IIS 웹서버를 이용해서  서비스 할 수 있습니다.

IIS 웹서버에 PHP 웹사이트를 설정하는 방법을 정리해 보았습니다.

 


PHP 설치

https://windows.php.net/download#php-7.4

 

PHP For Windows: Binaries and sources Releases

PHP 7.2 (7.2.26) Download source code [27.22MB] Download tests package (phpt) [14.33MB] VC15 x64 Non Thread Safe (2019-Dec-17 18:03:28) Zip [24.9MB] sha256: 7aac02c9e5afac7632ecdac03a6b5fcd413e52301dc8a1c8cbebb52ea3aa1e81 Debug Pack [23.16MB] sha256: ef990

windows.php.net

해당 사이트에서 최신 버전의 PHP를 다운로드 받습니다.

기본적으로 Thread Safe 버전을 다운받으며, 현재 웹사이트에는 7.4 버전이 최신 버전으로 명시되어 있습니다.

만약 이전 버전을 받아야 하는 상황이라면, 아래 Link를 이용해서 원하시는 버전을 받으시면 됩니다.

 

https://windows.php.net/downloads/releases/archives/

 

windows.php.net - /downloads/releases/archives/

 

windows.php.net

받으신 압축 파일을, 원하시는 폴더에 압축해제를 하시면 됩니다.


IIS 웹사이트 추가

Windows 검색 화면에 IIS 를 입력하거나, 시작 -> 실행 혹은 Windows 키 + R 을 입력하면 나오는 실행 창에

inetmgr 을 입력해서 IIS 웹서버를 실행 시킵니다.

 

여기에 테스트할 웹 사이트를 하나 추가해줍니다.

 


처리기 매핑 추가

 

 

현 IIS 는 php 파일에 대해서 어느 모듈일 이용해서 처리를 할지 매핑해주는 작업이 필요합니다.

처리기 매핑이 해당 역활을 해주는데요.

받으신 php 파일의 php-cgi.exe 파일을 php 파일과 매핑해주는 작업이 필요합니다.

모듈을 FastCgiModule 을 이용해서 실행파일과 연동해줍니다.

 

 

 

php.ini

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
extension_dir = "./"
; On windows:
extension_dir = "ext"

 

기본적인 설정은 완료되었으며, 

압축해제한 폴더내에 있는 php.ini 파일에 기본적인 셋팅을 해주면, 정상적인 php 웹사이트를 실행하실 수 있습니다.

 

 

728x90

+ Recent posts