在端口80或或在iis下安装平均堆栈

时间:2017-05-07 23:06:40

标签: node.js angular iis mean-stack reverse-proxy

我有一个Mean堆栈应用程序,现在可以在Node Js和端口3000上运行。 我有一个Windows Server 2016,我需要部署.Net Apps,所以我需要IIS。 我无法在端口80上运行两个Web服务器,但我不希望用户被迫键入运行我的Mean应用程序的端口。 我尝试使用iisnode,但没有成功,我也读到了反向代理,以便将端口80上的请求重定向到另一个端口。 这两种解决方案都可能有效,但是,在花费其他时间在错误的方向之前,我会问这种情况下的最佳做法是什么。

更新: 向前迈出一小步。 我现在可以访问应用程序的加载页面,但是应用程序无法找到我的bundle.js(由Webpack创建的包)。

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'
    },

我的web.config是:

<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>

start.js文件的摘录:

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);

视图(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>

我一直在调整配置和路径,没有结果......

由于

最高

1 个答案:

答案 0 :(得分:1)

使用ARR模块进行IIS的反向代理将是实现您想要的最佳方式。

  1. 您需要为IIS安装URL RewriteARR module
  2. 启用ARR。在Application Request Routing页面上,选择Enable proxy
  3. 在IIS管理器中创建网站
  4. 在此网站文件夹中创建web.config

    <?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>
    

    </configuration>

  5. 在此步骤之后,IIS将代理您的请求到端口3000