前后端代码部署:nginx配置

先确定安装了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服务就会接收到该请求,然后再对该请求进行处理,最后返回相应的数据

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。