Nginx:反向代理

84 阅读4分钟

本文是记录个人学习过程,仅针对本人的设备环境。

适用人群:拥有Centos系统机器、希望用Nginx配置网络服务

阅读时长约:5min

你将获得:从零搭建Nginx服务器能力,配置反向代理

系统环境:OpenCloudOs 8.6(腾讯云轻量云服务器)

OpenCloudOS由腾讯与合作伙伴共同倡议发起,是完全中立、全面开放、安全稳定、高性能的操作系统及生态。OpenCloudOS 沉淀了多家厂商在软件和开源生态的优势,继承了腾讯在操作系统和内核层面超过10年的技术积累,在云原生、稳定性、性能、硬件支持等方面均有坚实支撑,可以平等全面地支持所有硬件平台。OpenCloudOS 8版本兼容 CentOS 8。

安装Nginx

yum install nginx

安装完后输入nginx -v有显示Nginx的版本号,即为安装成功。

启动Nginx

nginx

就是这么朴实无华,输入完后没有报错即成功运行。随后访问云服务器的公网IP地址,可以看到这样的Nginx页面。(如果是本地机器跑的,则访问127.0.0.1) Nginx服务

启动完后可以看下Nginx进程ps -ef | grep nginx

➜  project ps -ef | grep nginx
root      146548       1  0 15:50 ?        00:00:00 nginx: master process nginx
nginx     146549  146548  0 15:50 ?        00:00:00 nginx: worker process
nginx     146550  146548  0 15:50 ?        00:00:00 nginx: worker process

可以看到有多个Nginx相关的进程,这是因为Nginx是多进程模式,其中master进程为Nginx的主进程,处理请求的分配,worker进程为Nginx的子进程,主要处理具体的请求。

Nginx启动相关的指令

nginx -s [signal]

signal的输入值:

  • quit:优雅停止
  • stop:立即停止
  • reload:重载配置文件
  • reopen:重新打开日志文件

Nginx配置

查看Nginx相关路径

nginx -V

注意这里V是大写。控制台中会打印Nginx配置详情,其中--prefix参数对应的就是Nginx安装路径,--conf-path参数对应的是Nginx配置文件路径。 先关注配置文件路径,输入cat [你的配置文件路径]查看配置文件内容。 config.png 全局启动配置控制Nginx启动相关内容,比如worker_processes控制开启多少个子进程。

event子进程配置控制子进程连接相关内容,比如worker_connections控制每个子进程的连接数量上限。

http网路配置可配置负载均衡,路由转发,反向代理等能力。如root项就定义了Nginx的网站静态资源路径。

include可引入其他配置文件内容,便于模块化管理。

反向代理配置

下面简单介绍下反向代理的配置方式

服务端准备

这里采用NodeJs的Koa框架快速搭建一个简单的服务端。

// 自行安装node
npm i koa

新建三个服务端文件:index.js、index1.js、index2.js。分别监听3000、3001、3002端口。

// index.js
const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World: 3000';
});

app.listen(3000);
// index1.js
const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World: 3001';
});

app.listen(3001);
// index2.js
const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World: 3002';
});

app.listen(3002);

分别在三个终端执行node indexnode index1node index2,就可以成功启动三个服务。

反向代理配置

回到Nginx的配置文件中,在http项中增加upstream [代理名称],里面配置对应的服务地址。

upstream backend {
    server 127.0.0.1:3000 weight=3;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

例子中backend为反向代理配置的名称,里面是每个服务的地址。

如果服务器性能不同,可以通过weight配置可以设置服务的权重。

随后在server项中的location配置代理到对应的配置中。

location /test {
    proxy_pass http://backend;
}

这里就是访问/test路径时,把请求转发到backend这个反向代理配置中。这里的backend需要和前面配置的反向代理名称保持一致。

随后执行nginx -s reload重载nginx配置,浏览器访问几次/test路径,可以看到返回的内容会不一样,证明每次访问都由不同端口下的服务器处理,配置成功。

image.png

image.png

最终配置如下: image.png

更多反向代理相关配置参考官方文档