文章目录
- 前言
- 一、Nginx基本介绍
- 1.1 what is Nginx ?
- 1.2 Nginx中的三个概念
- 1.3 nginx安装
- 1.4 运行nginx
- 二、nginx配置文件conf
- 2.1 conf文件组成部分
- 2.1.1 全局块
- 2.1.2 events块
- 2.1.3 http块
- 三、其他概念
- 3.1 nginx惊群
- 3.2 负载均衡
- 总结
前言
本文将介绍nginx的基本概念和nginx.conf文件的构成。conf文件是利用nginx的重要入口。
一、Nginx基本介绍
1.1 what is Nginx ?
Nginx是高性能的HTTP和反向代理的web服务器,主要用途是用在网关。腾讯课堂、淘宝、163等网站均有用到。
1.2 Nginx中的三个概念
- 正向代理:访问端口9002的服务器,但通过代理服务器来访问(代理的是客户端)
- 反向代理:访问端口9002的服务器,但是可以由端口9000的服务代理分发(代理的是服务端)
- 负载均衡:基于反向代理,加上不同的weight来实现服务的高效分配。
1.3 nginx安装
- 下载nginx以及依赖软件
- nginx的http模块使用pcre来解析正则表达式
- nginx使用zlib对http包的内容进行gzip
- 安装
openssl
库,让 nginx 支持 https(即在ssl协议上传输http)
通用的编译方法
make build && cd build && cmake ..
cmake -S . -B build
./configure && make && make install
1.4 运行nginx
安装完nginx后,会在/usr/local
下自动生成nginx
文件夹。
cd /usr/local/nginx
# 启动nginx
./sbin/nginx -c conf/nginx.conf
# 暂停nginx
./sbin/nginx -s stop
# 重启nginx
./sbin/nginx -s reload
二、nginx配置文件conf
文件位置
nginx.conf
worker_processes 4;
events {
worker_connections 1024;
}
http {
# 负载均衡
upstream backend {
server 192.168.159.130:9002 weight=2; # 只要可以描述一个进程(server)的都可以,weight=2表示每两次切换到其他进程
server 192.168.159.130:9003 weight=2;
}
server {
listen 9000;
location / {
# root /root/install/nginx/html9000/;
proxy_pass http://backend;
}
}
server {
listen 9001;
location / {
root /root/install/nginx/html9001/;
}
}
server {
listen 9002;
location / {
root /root/install/share/nginx/html9002/;
}
}
server {
listen 9003;
location / {
root /root/install/share/nginx/html9003/;
}
}
}
2.1 conf文件组成部分
nginx中定义了大量的关键字,比如worker_processes
,nginx解析出这些关键字,然后调用指定的回调函数。
2.1.1 全局块
主要设置一些影响nginx 服务器整体运行的配置指令。
worker_processes 4
2.1.2 events块
events {
worker_connections 1024;
}
主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
2.1.3 http块
Nginx 服务器配置中更改最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 10000;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
通常我们在添加功能时经常会修改该文件的内容,比如我们要添加一个关键字:
- 首先明确该关键字执行什么功能
- 比如是在返回响应文件时附带一个广告,那么我们在对应的location里添加这个关键字
- 编程时将对应的函数实现。
static ngx_command_t ngx_http_ad_filter_module_commands[] = {
{
ngx_string("ad"),
NGX_HTTP_MAIN_CONF | NGX_HTTP_SRV_CONF | NGX_HTTP_LOC_CONF | NGX_CONF_FLAG, // 可以放到conf的哪个位置
ngx_conf_set_flag_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_ad_filter_conf_t, enable), // 明确对应关键字的值在自定义结构体中的偏移量
NULL
},
ngx_null_command // 结束标志
};
三、其他概念
3.1 nginx惊群
- listen在master进程,worker进程为master的子进程。
- 那么一个连接过来,4个worker都会被唤醒,只有一个进程会拿到连接(惊群效应)
- 分配一把钥匙,谁拿到钥匙谁处理连接
3.2 负载均衡
5种方法:
- 轮询算法:每个请求按时间顺序逐一分配
- 最少连接算法
- IP哈希算法:每个请求按访问的hash结果分配,访客固定访问一个后端服务器
- 指定轮询几率:weight指定访问次数
- fair
总结
本文介绍了nginx的基本概念,以及nginx.conf
的构成。conf文件甚至可以实现简单的编程,在下一篇文章中将介绍。
参考链接:
https://github.com/0voice
https://blog.csdn.net/qq_40036754/article/details/102463099