2017-05-07 8 views
1

Ich habe eine Mean Stack-Anwendung, die jetzt auf Node Js und Port 3000 funktioniert. Ich habe einen Windows Server 2016 und ich muss .Net-Anwendungen bereitstellen, also brauche ich IIS. Ich kann nicht beide Webserver auf Port 80 laufen lassen, aber ich möchte nicht, dass die Benutzer gezwungen sind, den Port einzugeben, auf dem meine Mean-App läuft. Ich habe versucht, mit Iisnode zu arbeiten, aber ohne Erfolg und ich habe auch über Reverse-Proxy gelesen, um die Anfragen auf dem Port 80 zu einem anderen Port umzuleiten. Beide Lösung könnte gültig sein, aber bevor Sie andere Zeit in die falsche Richtung verbringen, frage ich, was die beste Praxis in diesem Fall ist.Mean Stack installieren auf Port 80 oder oder unter iis

UPDATE: ein kleiner Schritt nach vorn. Ich kann jetzt auf die Lade-Seite der App zugreifen, aber die Anwendung kann mein Bundle.js (das von Webpack erstellte Paket) nicht finden.

module.exports = webpackMerge.smart(commonConfig, { 
    entry: { 
     'app': './assets/app/main.aot.ts' 
    }, 

    output: { 
     path: path.resolve(__dirname + '/public/js/app'), 
     filename: 'bundle.js', 
     publicPath: '/js/app/', 
     chunkFilename: '[id].[hash].chunk.js' 
    }, 

Meine web.config ist:

<configuration> 
    <system.webServer> 
    <handlers> 
     <add name="iisnode" path="start.js" verb="*" modules="iisnode" /> 
    </handlers> 
    <rewrite> 
     <rules> 
     <rule name="tep"> 
      <match url="/*" /> 
      <action type="Rewrite" url="start.js" /> 
     </rule> 
     </rules> 
    </rewrite> 
    <security> 
     <requestFiltering> 
     <hiddenSegments> 
      <add segment="node_modules" /> 
     </hiddenSegments> 
     </requestFiltering> 
    </security> 
    </system.webServer> 
</configuration> 

Ein Auszug aus start.js Datei:

var app = require('./app'); 
var debug = require('debug')('node-rest:server'); 
var http = require('http'); 

var port = normalizePort(process.env.PORT || '3000'); 
app.set('port', port); 

var server = http.createServer(app); 

server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

und die Aussicht (hbs):

<!DOCTYPE html> 
<html> 
<head> 
    <base href="/tep"> 
    <title>Tennis Events Pro</title> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

</head> 
<body> 
<tep-app>Loading...</tep-app> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
<script src="/tep/bundle.js"></script> 
</body> 
</html> 

I arbeitete um die Anpassung der Konfiguration und Pfade, ohne Ergebnis ...

Dank

Max

+1

Ich empfehle die Verwendung von Nginx als Forward-Proxy. mehr Infos hier: - https://ef.gy/using-nginx-as-a-proxy-server, -https: //gist.github.com/soheilhy/8b94347ff8336d971ad0 –

+0

einen Blick auf diese über iisnode nehmen: https : //www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx – wannadream

Antwort

1

Reverse-Proxy mit ARR-Modul für IIS beste Weg, um zu erreichen, was Sie wollen.

  1. Sie benötigen URL Rewrite und ARR module für IIS
  2. aktivieren ARR zu installieren. Auf der Application Request Routing Seite wählen Enable proxy
  3. erstellen Webseite in IIS-Manager
  4. web.config auf dieser Website Ordner

    <?xml version="1.0" encoding="UTF-8"?><configuration>

    <system.webServer> 
        <rewrite> 
         <rules> 
          <rule name="rewrite to 3000" stopProcessing="true"> 
           <match url="(.*)" /> 
           <action type="Rewrite" url="http://127.0.0.1:3000/{R:1}" /> 
          </rule> 
         </rules> 
        </rewrite> 
    </system.webServer> 
    
    erstellen

    </configuration>

Danach Schritte IIS wird Ihre Anfragen an p weiterleiten ort 3000