node如何动态配置nginx?

前端使用webpack打包并传到阿里云OSS,然后我想用一个域名来绑定打包后的项目

想把nginx一些配置,比如域名绑定放在前端提交给node,然后使用node来动态更改nginx配置,达到域名动态绑定的效果。

这个应该如何做呢?

大佬在哪里。。。。。。。😢😢😢😢😢

阅读 4.7k
2 个回答

node读取nginx.conf,进行修改,修改好后,使用exec执行命令,重启nginx

ejs作为模板,做过nginx图形化配置,部分代码/思路可以参考一下:

template.ejs

# name <%= name %>
worker_processes  <%= worker_processes %>;

events {
  worker_connections  <%= worker_connections %>;
}

http {
  include     mime.types;
  default_type  application/octet-stream;
  access_log  logs/access.log  main;
  sendfile    on;
  keepalive_timeout  65;
  gzip  on;

  <% servers.forEach(server => { %>
    server {
      listen <%= server.port %>;
      server_name <%= server.server_name %>;
    <% server.locations.forEach(location => { %>
      location <%= location.path %> {
        <% for ( let key in location.options ) { %>
          <%= key %> <%= location.options[key] %>;
        <% } %>
      }
    <% }) %>
    }
  <% }) %>

  <% upstreams.forEach(upstream => { %>
    upstream <%= upstream.name %> {
      <% upstream.servers.forEach(server => { %>
        server <%= server %>;
      <% }) %>
    }
  <% }) %>

}

route.js

router.get('/config', function (req, res, next) {
  res.set('Content-Type', 'text/plain');
  res.render('template', {
    name: 'FrontServer',
    worker_processes: 1,
    worker_connections: 1024,
    servers: [{
      server_name: 'login.com',
      port: 80,
      locations: [{
        path: '/',
        options: {
          root: '/www',
        }
      }, {
        path: '/rest',
        options: {
          proxy_pass: 'http://backend1',
        }
      }]
    }],
    upstreams: [{
      name: 'backend1',
      servers: [
        '10.0.0.21:8080 weight=1',
        '10.0.0.22:8080 weight=1',
      ]
    }, {
      name: 'backend2',
      servers: [
        '10.0.0.23:8080 weight=1',
        '10.0.0.24:8080 weight=0',
      ]
    }],
  })
});

output

# name FrontServer
worker_processes  1;

events {
  worker_connections  1024;
}  

http {
  include     mime.types;
  default_type  application/octet-stream;
  access_log  logs/access.log  main;
  sendfile    on;
  keepalive_timeout  65;
  gzip  on;
    server {
      listen 80;
      server_name login.com;
      location / {
          root /www; 
      }
      location /rest {
          proxy_pass http://backend1; 
      }
    }
    upstream backend1 {
        server 10.0.0.21:8080 weight=1;         
        server 10.0.0.22:8080 weight=1; 
    }
    upstream backend2 {
        server 10.0.0.23:8080 weight=1;
        server 10.0.0.24:8080 weight=0;
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题