美文网首页
前后端代码部署:nginx配置

前后端代码部署:nginx配置

作者: 放风筝的小小马 | 来源:发表于2018-01-18 16:56 被阅读644次

    先确定安装了nginx, 通过nginx -v查看版本

    一、目标

    要实现的效果是:一个服务器下有两个网站(个人博客和博客后台管理系统)和一个nodejs服务(就是后台——提供接口服务)

    二、知识点

    2.1 反向代理

    反向代理:普通的代理设备是内网用户通过代理设备出外网进行访问(如:vpn),而工作在这种模式下的负载均衡设备,则是外网用户通过代理设备访问内网(用户通过浏览器上网),因此称之为反向代理。

    三、思路

    3.1 网站的访问

    两个网站其实都是静态资源,它们是存放在服务器上,然后通过相应的地址可以访问到

    主要的问题在于: 我们通过地址怎么可以访问到服务器上的文件夹。

    两种实现思路

    1. 使用nginx作为反向代理服务器来处理从浏览器接收到的请求(nginx处理静态资源)
    2. 使用nodejs来响应从浏览器接收到的请求(nodejs处理静态资源)

    nginx简单点理解:它是一个web服务器,凡是通过域名或ip地址访问服务器,先要经过nginx进行处理,然后由它来转发请求到各个不同的端口或其他服务器上。基于这个特性,它可以作为反向代理、负载均衡器以及Http缓存(这里没有涉及缓存),nginx是完全由配置文件控制,也就是可以直接通过配置文件来操作它

    3.1.1 思路一:nginx作为反向代理服务器处理静态资源

    分为两步:

    1. 准备好对应的资源
    2. 配置nginx
    第一步:准备好资源

    在服务器的/www/blog/目录下创建index.html文件,里面就是普通的html内容

    第二步:配置nginx

    打开/etc/nginx/conf.d/文件夹,创建配置文件smallmage.conf,内容如下:

    server {
        listen 80;  // 表示http协议的端口
        server_name smallmage.com;  // 域名地址
        location / {  // 定位
                root   /www/blog;  // 根目录
                index  index.php index.html index.htm;  // index定义的是首页
            }
    }
    

    上面的配置文件意思是:当访问http://smallmage.com这个域名地址时(http协议的默认端口是80),就到服务器的/www/blog路径下去取文件,默认首页是:index.php、index.html、index.htm,假如/www/blog文件夹下有index.phpindex.html文件,则优先返回index.php文件,也就是有优先级的。如果没有开启目录浏览权限,又找不到这些默认首页,就会报403错误。

    nginx怎么找到/etc/nginx/conf.d/smallmage.conf这个文件呢?
    该文件是在/etc/nginx/nginx.conf中会被引入,如果不确定nginx的配置文件路径,可以通过sudo nginx -t来查看nginx的状态,从里面可以获取到nginx的配置文件路径,如下所示:

    nginx -t命令
    nginx.conf里面可以查找到引入的所有配置nginx的配置文件信息,如下:
    nginx.conf配置文件

    注意

    • 要想通过smallmage.com来访问服务器,需要将smallmage.com这个域名解析到我们的服务器ip地址上,才可以通过smallmage.com来访问
    • 更改了nginx相关的配置后,需要重启nginx,nginx命令如下:
      sudo nginx -t: 查看nginx状态
      sudo nginx -s reload:重启服务器

    上面便设置了nginx作为反向代理服务器处理静态资源

    3.1.2 思路二:使用nodejs来处理静态资源

    其实就是在服务器上启动一个nodejs服务,然后通过ip地址+端口来访问资源,由node来响应请求,不需要配置nginx;

    分为两步:

    • 编写使用nodejs接口的js文件
    • 使用node来启动该文件
    第一步:编写使用nodejs接口的js文件

    /www/test/目录下创建test.js文件,内容如下;

    const http = require('http')
    http.createServer(function(req,res) {
    res.writeHead(200,{'Content-Type':'text/plain'})
    res.end('hello world')
    }).listen(8082)  // 监听8082端口
    
    console.log('server test')
    
    第二步:使用node来启动该文件

    使用node test.js来执行该文件,当然也可以使用pm2

    假设该服务器的ip为: 123.45.67.9,那么就可以通过123.45.67.9:8082来访问,可以在浏览器上看到hello world

    3.2 nodejs服务(提供接口服务)

    接口服务:就是指前端调用后端的api接口

    常说的前端和后端,这里的nodejs服务(接口服务)其实就是后端,也就是说我们的后端使用的是nodejs来实现的。
    其实就是将上两个例子结合起来,也就是:在服务器启动一个nodejs服务,然后使用nginx来作为反向代理以及负载均衡处理;

    一般如果使用nodejs作为后端,会选择一个框架进行开发,常用框架有:express、Koa

    主要分为两大步来实现该nodejs服务:

    • 编写后端(nodejs)代码
    • 配置nginx
      • 使用nginx作为反向代理
      • 使用nginx处理负载均衡

    3.2.1 编写后端代码

    跟上面的使用nodejs来处理静态资源是一样的, 只不过是更复杂一些,需要对各个接口进行处理,假如是一个商品接口,就需要有:goods/get、goods/add、goods/delete、goods/update等接口,这是代码层面的;

    因为我们的网站肯定是在服务器开机的时候一直运行的,否则我们的网站将无法访问,因此需要使用一些部署工具来处理nodejs服务,例如在node服务挂掉的时候可以重启、在服务器重启后,node服务也需要自动重启,常用的部署工具有:pm2

    3.2.2 配置nginx

    前端访问接口时,肯定不会使用ip地址来访问,因此使用nginx来做反向代理。
    nginx配置如下:

    upstream server {
      server 127.0.0.1:8083;
    }
    
    server {
        listen 80;
        server_name www.smallmage.com;
    
        location /api {
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_set_header X-NginX-Proxy true;
    
          # value for proxy_pass has to match upstream name
          proxy_pass http://server;
          proxy_redirect off;
        }
    }
    

    上面配置的意思就是:当访问www.smallmage.com/api时就将请求丢给proxy_pass设置的服务,也就是127.0.0.1:8083,假如我们的node服务就监听着8083端口,那么node服务就会接收到该请求,然后再对该请求进行处理,最后返回相应的数据

    参考

    相关文章

      网友评论

          本文标题:前后端代码部署:nginx配置

          本文链接:https://www.haomeiwen.com/subject/jipwoxtx.html