2011-04-05 49 views
5

Esto puede ser una pregunta extremadamente simple, pero ¿puedo usar node.js en un entorno de Windows Server 2008 con IIS? ¿Hay una biblioteca de "Microsoft" u otra solución que funcione mejor?¿Se puede usar node.js con IIS?

Respuesta

4

Puede instalar Node.js en Windows, pero es su propio servidor, por lo tanto, a menos que esté utilizando IIS como proxy, no hay necesidad de IIS en absoluto. Sin embargo, tenga en cuenta lo siguiente citado de Node.js's installation instructions:

Ni [Windows] compilaciones son satisfactoriamente estables, pero es posible ejecutar algo.

+0

fresco. ¿Hay algo similar incluido en iis? –

+0

No tengo idea, aunque lo dudo. –

2

He estado usando Node en Windows con Cygwin y tuve algunos problemas. Puede usar IIS para servir en el puerto 80 predeterminado y ejecutar sus aplicaciones Node en diferentes puertos.

Si desea un proxy, la mayoría usa Nginx.

1

Puede build node.js en Windows, pero no se recomienda su uso debido a posibles problemas de estabilidad. Si IIS está utilizando grupos basados ​​en subprocesos, entonces ni siquiera debería usarlo como reverse proxy (en los sistemas basados ​​en Linux, nginx generalmente se usa para hacer esto) para node.js porque el grupo puede cargarse rápidamente. Si desea algo similar a node.js en Windows, intente consultar manos.

2

Usted tiene básicamente dos vías para ejecutar una aplicación Node.js a través de IIS.

Si está dedicando toda una aplicación para Node.js y simplemente necesitan el punto final del lado público para trabajar a través de su aplicación de IIS existente, se recomienda usar ARR para enrutar todo el sitio a través de. Estoy haciendo esto para un par de proyectos, y funciona bastante bien.

Para ser sincero, no me ha gustado IISNode, ya que parece que está creando puntos finales ajenos en su código de nodo frente a IIS. Funciona, y si se dirige a Azure en particular, puede ser su mejor opción. También puede ser la mejor opción si tiene que conectarlo a una aplicación .Net existente.

0

Quería hacerlo lo más fácil posible.

Problemas con iisnode

  1. I instalado iisnode y corrió las muestras sin ningún problema, pero ...

  2. he tratado de implementarlo en IIS con iisnode, pero tenía que atar mi meteoro aplicación y luego implementarlo como una aplicación de nodo. El problema con el que me encontré me desanimó. No pude instalar fibers. el proceso de compilación mantuvo errores de trowing, así que me di por vencido.

proxy inverso IIS

Lo que hice para resolver esto para mí es usar un proxy inverso en IIS.

see my post on meteor forum

Mi entrada web.config final fue:

Hice lo mismo, sin embargo, la forma que tenía el proxy inverso en IIS para utilizar una subcarpeta en el dominio me tiró de.

No sabía que al usar ROOT_URL pudiéramos especificar la ruta a sub .

ejemplo, si corro el siguiente comando dentro de mi carpeta de aplicación de meteoritos:

set ROOT_URL=http://localhost:3100/n/todos && meteor

podré acceder a mi aplicación en http://localhost:3100/n/todos, aviso que omite el arrastre /. Y si tratamos de navegar a la dirección http://localhost:3100/n o http://localhost:3100/ nos dará un error Unknown path.

Así que, cuando configuré por primera vez el proxy inverso, recibía el error Unknown Path todo el tiempo.

Resulta que en mi configuración de IIS, tengo que especificar el http://localhost:3100/n/todos como el valor URL en la acción, por favor notificación del "n/todos" al final.

Así que mi regla de reescritura terminó así: [archivo @ c: /inetpub/wwroot/web.config]

``` 
<configuration> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="TODOs meteor app. Route the requests" stopProcessing="true" enabled="true"> 
      <match url="^n/todos/(.*)" /> 
      <conditions> 
      <add input="{CACHE_URL}" pattern="^(https?)://" /> 
      </conditions> 
      <action type="Rewrite" url="{C:1}://localhost:3100/n/todos/{R:1}" /> <!-- I was missing the /n/todos here --> 
      <serverVariables> 
      <set name="HTTP_ACCEPT_ENCODING" value="" /> 
      </serverVariables> 
     </rule> 
     </rules> 
     <outboundRules> 
     <rule name="TODOs ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="false"> 
      <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://localhost:3100/(.*)" /> 
      <action type="Rewrite" value="/n/todos/{R:2}" /> 
     </rule> 
     <rule name="TODOs RewriteRelativePaths" preCondition="ResponseIsHtml1" enabled="false"> 
      <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" negate="false" /> 
      <action type="Rewrite" value="/n/todos/{R:1}" /> 
     </rule> 
     <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1"> 
      <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:3100/(.*)" /> 
      <action type="Rewrite" value="http{R:1}://localhost/{R:2}" /> 
     </rule> 
     <preConditions> 
      <preCondition name="ResponseIsHtml1"> 
      <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> 
      </preCondition> 
     </preConditions> 
     </outboundRules> 
    </rewrite> 
    </system.webServer> 
</configuration> 
``` 

Gracias

Cuestiones relacionadas