웹 프론트엔드 JS 튜토리얼 Node.js_node.js 실행을 위한 IIS 확장 iisnode 설치 및 구성 참고 사항

Node.js_node.js 실행을 위한 IIS 확장 iisnode 설치 및 구성 참고 사항

May 16, 2016 pm 04:11 PM
node.js

올해 초에는 Node.js를 사용하여 Express 프레임워크를 기반으로 블로그 프로그램을 다시 작성하고 ASP.NET과 작별할 계획이었습니다. 그러나 현재 사용하고 있는 VPS는 Windows Server 시스템과 IIS 서버입니다. Express와 IIS가 모두 포트 80을 수신하도록 허용되면 분명히 충돌이 발생합니다. 다행히 IIS에서 Node.js 프로그램을 호스팅할 수 있는 iisnode라는 확장이 있습니다. 또한 이러한 호스팅은 IIS의 다양한 기능(프로세스 관리, GZip 압축, 로그, 캐시, 권한 제어, 도메인 이름 바인딩 등)을 사용할 수 있음을 의미합니다.

iisnode를 사용하려면 다음을 설치해야 합니다.

1.Node.js
2.IIS의 URL 재작성 모듈
3.iisnode

설치 후 일반적인 작업을 수행하고 IIS 관리자에서 Express 프로그램의 디렉터리를 가리키는 사이트를 만듭니다. 핵심은 web.config 파일을 추가하는 것입니다.

코드 복사 코드는 다음과 같습니다.

<구성>

>                  
추가 >
  <다시 작성> ~ ~                                                         ~

안에 ~                                                  
>




이 콘텐츠는 IIS 관리자의 시각적 인터페이스를 통해서도 구성할 수 있습니다. 이는 아마도 bin/www에 대한 모든 요청을 다시 작성하고 iisnode 확장을 사용하여 bin/www를 실행하는 것을 의미할 것입니다. 그런데 사이트를 연 후 다음과 같은 오류 메시지가 나타났습니다:



코드 복사


코드는 다음과 같습니다.

요청 필터링 모듈은 HiddenSegment 섹션이 포함된 URL의 경로를 거부하도록 구성됩니다 처음에는 불분명하다고 생각했는데 갑자기 ASP.NET의 bin 디렉터리가 액세스가 허용되지 않는 특수 디렉터리라는 것을 깨달았습니다. 이 규칙에 부합하는 bin/www에 대한 요청을 다시 작성합니다. 따라서 디렉토리 이름만 변경하면 됩니다. 예를 들어 bin을 실행으로 변경하면(이것은 좋은 습관이 아닌 것으로 밝혀졌으므로 나중에 이에 대해 설명하겠습니다) web.config도 이에 따라 조정되어야 합니다.


코드 복사


코드는 다음과 같습니다.

<구성>

>                
추가 >
  <다시 작성> ~ ~                                                         ~

                                  
~                                                  
>




IIS 관리자에서 사이트를 다시 시작하고 다시 접속해 보세요. 드디어 실행이 쉽지 않습니다. 하지만 아직 기뻐하기엔 이르다.

프로그램 기능을 테스트하는 과정에서 획득한 IP가 비어있는 것을 발견했습니다. Express 프레임워크에서 IP는 req.ip를 통해 획득되며, 이는 요청 헤더의 REMOTE_ADDR에서 값을 획득합니다. 간단한 테스트 코드를 통해 REMOTE_ADDR 값도 비어있는 것을 확인했습니다. 분명히 이 헤더 정보는 IIS에서 Node.js로 이동하는 과정에서 손실되었습니다. Google을 검색한 결과 iisnode에
이 문제

가 있음을 발견했습니다. 공식적인 해결책은 X-Forword-For를 사용하는 것이지만 다른 방법을 찾았습니다.

REMOTE_ADDR을 유지할 수 있는 Web.config 구성( 앞에 추가됨)이 있습니다.

코드 복사


코드는 다음과 같습니다.
지침에 따라 예약된 REMOTE_ADDR의 이름이 x-iisnode-REMOTE_ADDR로 변경되므로 req.ip 값을 한 번 덮어쓰고 Express app.js에 미들웨어 기능을 추가해야 합니다.


코드 복사



그러나 이렇게 조정한 후에도 획득한 IP는 여전히 비어 있어 req.ip 할당이 실패한 것이 아닌가 하는 의문이 듭니다. Express의 소스 코드를 보면, req.ip가 Define getter에 의해 정의된 것을 알 수 있으므로 덮어쓰려면 다시 정의해야 합니다.



코드 복사

코드는 다음과 같습니다. app.use(function(req, res, next) { Object.defineProperty(req, 'ip', {           get: function() { return this.headers['x-iisnode-REMOTE_ADDR'] } });
다음();
});



이 문제는 마침내 해결되었지만 Express가 나중에 req.ip를 읽기 전용으로 설정하면 이는 좋은 방법이 아닙니다.

계속 테스트를 진행한 결과 또 다른 문제가 발견되었습니다. 일반적으로 블로그 백그라운드의 파일 업로드 기능은 파일을 public/upload 디렉터리로 전송하지만 실제로는 public/upload 폴더가 launch 디렉터리(원본 bin 디렉터리)에 생성됩니다. 실제로 그 이유는 프로그램 항목인 www 파일이 실행 디렉터리에 있으므로 실행 디렉터리가 애플리케이션의 실행 디렉터리가 되기 때문입니다. 내 해결책은 시작 디렉터리의 이름을 다시 bin으로 변경하고 루트 디렉터리에 launch.js를 만들어 bin/www를 호출하는 것입니다.

코드 복사


코드는 다음과 같습니다. #!/usr/bin/env 노드 require('./bin/www');

然后把程序入口改为launch.js:

复主代码 代码如下:

<구성>
   
        <핸들러>
           
추가        

        <다시 작성>
           
                <규칙 이름="모두">
                   
일치                    
               
           
       

       
   

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Node V8 엔진의 메모리와 GC에 대한 자세한 그래픽 설명 Node V8 엔진의 메모리와 GC에 대한 자세한 그래픽 설명 Mar 29, 2023 pm 06:02 PM

이 기사는 NodeJS V8 엔진의 메모리 및 가비지 수집기(GC)에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다.

Node의 메모리 제어에 관한 기사 Node의 메모리 제어에 관한 기사 Apr 26, 2023 pm 05:37 PM

Non-Blocking, Event-Driven 기반으로 구축된 Node 서비스는 메모리 소모가 적다는 장점이 있으며, 대규모 네트워크 요청을 처리하는데 매우 적합합니다. 대규모 요청을 전제로 '메모리 제어'와 관련된 문제를 고려해야 합니다. 1. V8의 가비지 수집 메커니즘과 메모리 제한 Js는 가비지 수집 기계에 의해 제어됩니다.

최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요? 최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요? Dec 13, 2022 pm 08:00 PM

Node용 Docker 이미지를 선택하는 것은 사소한 문제처럼 보일 수 있지만 이미지의 크기와 잠재적인 취약점은 CI/CD 프로세스와 보안에 상당한 영향을 미칠 수 있습니다. 그렇다면 최고의 Node.js Docker 이미지를 어떻게 선택합니까?

Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Apr 24, 2023 pm 05:49 PM

파일 모듈은 파일 읽기/쓰기/열기/닫기/삭제 추가 등과 같은 기본 파일 작업을 캡슐화한 것입니다. 파일 모듈의 가장 큰 특징은 모든 메소드가 **동기** 및 ** 두 가지 버전을 제공한다는 것입니다. 비동기**, sync 접미사가 있는 메서드는 모두 동기화 메서드이고, 없는 메서드는 모두 이기종 메서드입니다.

Node.js 19가 공식적으로 출시되었습니다. Node.js의 6가지 주요 기능에 대해 이야기해 보겠습니다! Node.js 19가 공식적으로 출시되었습니다. Node.js의 6가지 주요 기능에 대해 이야기해 보겠습니다! Nov 16, 2022 pm 08:34 PM

Node 19가 정식 출시되었습니다. 이 글에서는 Node.js 19의 6가지 주요 기능에 대해 자세히 설명하겠습니다. 도움이 되셨으면 좋겠습니다!

Node.js의 GC(가비지 수집) 메커니즘에 대해 이야기해 보겠습니다. Node.js의 GC(가비지 수집) 메커니즘에 대해 이야기해 보겠습니다. Nov 29, 2022 pm 08:44 PM

Node.js는 GC(가비지 수집)를 어떻게 수행하나요? 다음 기사에서는 이에 대해 설명합니다.

Node의 이벤트 루프에 대해 이야기해 봅시다. Node의 이벤트 루프에 대해 이야기해 봅시다. Apr 11, 2023 pm 07:08 PM

이벤트 루프는 Node.js의 기본 부분이며 메인 스레드가 차단되지 않도록 하여 비동기 프로그래밍을 가능하게 합니다. 이벤트 루프를 이해하는 것은 효율적인 애플리케이션을 구축하는 데 중요합니다. 다음 기사는 Node.js의 이벤트 루프에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다!

노드가 npm 명령을 사용할 수 없으면 어떻게 해야 합니까? 노드가 npm 명령을 사용할 수 없으면 어떻게 해야 합니까? Feb 08, 2023 am 10:09 AM

노드가 npm 명령을 사용할 수 없는 이유는 환경 변수가 올바르게 구성되지 않았기 때문입니다. 해결 방법은 다음과 같습니다. 1. "시스템 속성"을 엽니다. 2. "환경 변수" -> "시스템 변수"를 찾은 다음 환경을 편집합니다. 3. nodejs 폴더의 위치를 ​​찾습니다. 4. "확인"을 클릭합니다.

See all articles