作者:手机用户2502903053 | 来源:互联网 | 2023-10-11 09:01
原文链接: https:www.cnblogs.comyalongp13936608.html当服务运行到线上后,我们通常通过域名而不是IP+端口来访问,并且一台服务器上可能有多个
原文链接: https://www.cnblogs.com/yalong/p/13936608.html
当服务运行到线上后,我们通常通过域名而不是 IP + 端口来访问,并且一台服务器上可能有多个 Node 服务在运行,
而且运行在不同的端口。如果它们都共用 80 端口显然是不行的,这时候就需要有一种机制,来把不同域名的请求,
通过 80 端口进来后,分配给不同的端口服务。
基于这个背景,我们要做的事很简单,先让 Web 服务通过 80 端口可被访问到,之后再考虑分配或者说代理如何实现。
80 端口在访问的时候是可以省略的,我们以 xxx.com 这个假的域名为例, 也就是说,可以通过 http://xxx.com 进行访问了。
怎么实现呢?这就需要大名鼎鼎的 Nginx 出场了。
1.安装 Nginx 和关闭版本号露出
安装nginx
sudo apt-get update
sudo apt-get install nginx
安装完毕后,检查下 Nginx 的版本: nginx -v
这个版本号通常可以在 Web 端的 header 里看到。安全起见,可以通过配置隐藏掉,如下打开 nginx.conf 文件:
sudo vi /etc/nginx/nginx.conf
把 nginx.conf 文件中的server_tokens on
改成 server_tokens off
就可以了
有的配置里 没有server_tokens on 的 直接添加 server_tokens off 即可
2.Nginx 实现反向代理原理
首先当端口是80的时候, 域名访问的时候 是可以省略端口的,直接域名访问,
nginx 会监听80端口,同时根据不同的域名,把流量分配给Node相应的端口服务。
补充知识点:正向代理 反向代理的区别 看这里 https://www.cnblogs.com/taostaryu/p/10547132.html
3.进行配置
在 /etc/nginx/conf.d 文件夹下面新增一个配置文件:
sudo vi /etc/nginx/conf.d/xxx-node-5000.conf
文件命名可以用上面的命名方式,看一下配置文件,便知道是哪个域名对应到哪个端口。
因为将来可能会有多个项目对应服务器后端的多个服务,所以要考虑这种负载均衡的这种场景。这时候通过以下配置来实现:
# 通过 upstream 我们可以设定一个简单的负载均衡策略,以应对将来可能的升级
# 首先定义一个 server 集群 gougou,里面可以加多个 server,每个 server 对应的值可以用域名,也可以直接用 IP,
# 但我们通常不会用 IP 来访问,而是通过域名:
upstream nodeStatic {
server 127.0.0.1:5000;
}
server {
listen 80;
server_name xxx.com; // xxx.com 是你的域名
# Gzip Compression
gzip on;
gzip_comp_level 6;
gzip_vary on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-Javascript text/xml application/xml application/xml+rss text/Javascript;
gzip_buffers 16 8k;
location / {
# remote_addr 代表客户端的 IP
proxy_set_header X-Real-IP $remote_addr;
# proxy_add_x_forwarded_for 获取真实的 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# http_host 表示请求的 host 头
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# proxy_pass 指令实现代理。把域名代理到集群名上面
proxy_pass http://nodeStatic;
proxy_redirect off;
}
}
保存后,通过 sudo nginx -t 来验证配置是否正确,有没有语法错误,然后我们把 Nginx 的服务重启一下。
sudo service nginx restart
再把 URL 中的端口号去掉,我们访问下:
就可以正常访问了。
小结
Nginx 与 Node.js 的配套使用是部署 Node 服务时非常关键的环节,其中 Nginx 往往扮演的是景区大导游的角色,任何人过来要工人干活,都要先经过他,
他看看你是来自哪儿的,把你的信息记录下,然后看你是要去哪里,再把你分配给相应的对象接待,
简单来说就是,Nginx 搞分配,Node 去干活。
当然像日志、安全证书和静态资源代理这些事情,也都可以由 Nginx 前置完成,这样 Node 就可以专心负责业务的部分了。