nodejs 山羊上山系列(6)- nginx反向代理

到目前为止,就完成了登陆,需要用http-server在一个端口(例如8000端口)拉起html的静态页面,然后再html中访问我们使用nodejs写的后台程序(例如8081端口)进行前后端联调,因为端口不一致,http请求时跨域的,所以我们就需要使用nginx做反向代理,来解决跨域的问题…

本篇幅主要的技术点

[❌] 使用node原生http模块搭建http-server
[❌] 使用nodemon处理热加载
[❌] 使用cross-env处理不同操作系统环境变量(通过nodejs的process全局变量的process.env.NODE_ENV就可以获取)
[❌] 使用querystring处理get请求的参数
[❌] 使用promise的方式获取post请求body参数的获取
[❌] 使用es6 Class的方式定义响应数据的基础格式,然后对成功响应和失败响应extends基础格式
[❌] mySql常用操作汇总
[❌] nodejs链接本地mysql数据库响应客户端请求
[❌] 登陆校验/登陆信息存储
[❌] nodejs链接redis数据库
[✔] nginx的配置反向代理
[❌] 日志管理
[❌] 信息安全(sql注入/xss攻击/md5信息加密)

nginx简介

  • 1.nginx是一个高性能的Web服务器和反向代理服务器,也可作为电子邮件代理服务器。

  • 2.在连接高并发的情况下,nginx是Apache服务不错的替代品,能够支持高达 50,000 个并发连接数的响应。

  • 3.一般做静态服务和负载均衡.

正向代理与反向代理

  • 1.反向代理:对客户端不可见的代理
    是指以代理服务器(例如nginx服务器)来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回到Internet上请求连接的客户端,此时代理服务器对外表现为一个反向代理服务器。
    反向代理

  • 2.正向代理:客户端可以控制的代理
    正向代理,是在用户端的。是指用户无法访问某网站,但是可以访问某代理服务器,而代理服务器可以访问该网站。于是用户通过访问代理服务器去访问该网站,代理服务器把响应信息返回给用户。
    正向代理

  • 3.反向代理中用户访问的IP和端口是nginx服务器的,不知道提供服务的底层服务器,底层服务器在内网中,对外公开的是nginx服务器,nginx充当中间层。

  • 4.而正向代理中用户是知道目标服务器的域名信息的,只是迫于网络的限制无法访问,如最常见的访问外网。

配置nginx

正向代理

1
2
3
4
nginx -t  //测试配置文件是否正确
nginx -s reload
nginx start
nginx stop

可以再window下配置bat结尾的脚本文件

  • start.bat

    1
    2
    3
    4
    5
    @ECHO

    start nginx.exe

    pause
  • stop.bat

    1
    2
    3
    4
    5
    @ECHO

    nginx -s stop

    pause

配置nginx.conf文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# cpu多核的话可以启动多个实例
worker_processes 4;

# blog系统测试nginx配置
server {
# 监听nginx的8000端口
listen 8000;
server_name localhost;

# http连接超时时间,默认是65s。上传文件比较大,在规定时间未上传完成,会自动断开连接
keepalive_timeout 100;
client_header_timeout 120s; #调大点
client_body_timeout 120s; #调大点
client_max_body_size 500m; #主要是这个参数,限制了上传文件大大小

# ui
location / {
root H:\\nodejs\\blog-client;
index index.html index.htm;
# 静态html文件代理到8001端口
proxy_pass http://localhost:8001;
}

# api
location /api/ {
# nodejs的后台服务起在8000端口
proxy_pass http://localhost:8000;
# 代理之后把host传过来
proxy_set_header Host $host;
}
}

总结

到此为止,我们就可以在客户端浏览器通过访问nginx服务器的http://localhost:8888访问到这个博客项目了,然后nginx监听8888端口,将前端html页面代理到http:localhost:8081上起的http-server拉起的静态页面,然后静态页面访问localhost:8888/api/xxx/xxx的接口的时候,又被nginx代理到localhost:8000/api/xxx/xxx上的nodejs进程拉起的server上。
因为跨域只是针对客户端访问服务器的,现在通过nginx服务器反向代理,nginx服务器访问别的服务器就不存在跨域限制了…

初到贵宝地,有钱的给个钱场,没钱的挤一挤给个钱场