Nginx
Nginx
一、简介
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
二、基础
1、安装
系统:CentOS 7.8
# 1、下载安装包安装
安装包:
官网下载:http://nginx.org/en/download.html
1.18.0版本:http://nginx.org/download/nginx-1.18.0.tar.gz
# 2、添加nginx源安装
sudo yum install yum-utils
touch /etc/yum.repos.d/nginx.repo
写入以下内容:
----------------------------------------------------------------------
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
----------------------------------------------------------------------
sudo yum clean all && yum makecache
sudo yum install nginx
2、起止方法
启动nginx,执行其可执行文件即可。
nginx
启动后,可由以下命令执行其他操作。
nginx -s signal
其中signal有以下几种:
stop # 快速关闭
quit # 正常关闭
reload # 重新加载配置文件,即重启
reopen # 重新打开日志文件
关闭也可以通过系统指令操作。
ps aux | grep nginx
kill -s QUIT nginx_number
注:若不管用,直接kill -9 process_number。
3、作为web服务器
修改配置文件,或者在conf.d下添加子配置文件。
http {
server {
listen 80 ;
server_name _ *;
access_log logs/default.access.log main;
location / {
index index.html;
root /var/www/default/htdocs;
}
}
}
三、扩展
1、反向代理
http {
upstream myproject { # myproject为自定义组名
server 127.0.0.1:8000;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://myproject;
}
}
}
2、负载均衡
nginx的负载均衡,类似标签,分配到请求就打上标签,下一次分配到未标的资源,一轮结束后清除标签再继续。
nginx的负载均衡有几种方式:轮询、权重、ip hash、最少连接数、fair。
轮询
# 依次分配请求。
http {
upstream myproject {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://myproject;
}
}
}
权重
# 在服务后面直接添加权重配置。
upstream myproject {
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
IP Hash
# 每个请求都会根据IP地址的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务。(可与权重同时配置)
# 在upstream配置中添加ip_hash;即可
upstream myproject {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
ip_hash;
}
最少连接数
# 将请求分配到连接数最少的服务上。
# 在upstream配置中添加least_conn;即可
upstream myproject {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
least_conn;
}
fair
# 根据后端服务器的响应时间来分配,响应时间短的优先。(需要插件)
# 在upstream配置中添加fair;即可
upstream myproject {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
fair;
}
3、限流
限制单位时间内用户访问服务器的次数(流量)。Nginx的HttpLimitReqest模块使用的是漏桶算法。
常用算法:
令牌桶算法
1. 令牌以固定速率产生,并缓存到令牌桶中;
2. 令牌桶放满时,多余的令牌被丢弃
3. 请求消耗等比例的令牌才能被处理;
4. 令牌不够时,请求被缓存。
漏桶算法
1. 水(请求)从上方导入水桶,从水桶下方流出(被处理);
2. 来不及流出的水存在水桶中(缓冲),以固定速率流出;
3. 水桶满后水溢出(丢弃)。
核心思想:缓存请求,匀速处理,多余的请求直接丢弃。
对比于漏桶算法,令牌桶算法的不同之处在于,它不但有个桶,还有个队列。桶是用来存放令牌的,队列才是用来存放请求的。
从作用上来说,两种算法明显的区别在于是否允许突发流量(burst)的处理。
漏桶算法能够强行限制数据的实时传输(处理)速率,对突发流量不做处理;
令牌桶算法能在限制数据的平均传输速率的同时允许某种程度的突发传输。
配置方法参考官方文档:https://www.nginx.cn/doc/standard/httplimitrequest.html
4、动静分离
nginx对静态的处理能力很强,但对动态的处理能力不足。故采用动静分离。
做法:采用代理的方式,在server区域加入带正则的location来指定匹配项针对服务的动静分离。
server {
listen 38090;
server_name localhost;
charset utf-8;
location / {
root /nginx;
index index.html;
}
location ~ \.(jpg){
proxy_pass http://172.17.16.11:38081;
}
}
5、镜像服务器
Nginx用做镜像服务器,原理类似于CDN。
location ~ \.(jpg){
expires 3d; # 缓存三天
proxy_set_header Accept-Encoding '';
root /nginx; # 根目录,也是镜像文件存放的目录
proxy_store on; # 开启缓存
proxy_store_access user:rw group:rw all:rw; # 权限
proxy_temp_path /nginx; # 缓存目录,是url中文件的位置
if ( !-e $request_filename){
proxy_pass http://172.17.16.11:38081;
}
}
6、优化
1、worker_processes 1; # 进程数一般设置为CPU核心数的2倍。
2、error_log /var/log/nginx/error.log warn; # 日志部分,一般记录有问题的部分即可。
3、最大连接数可以根据系统情况设置。
events {
worker_connections 1024;
}
7、热备
1、业务热备
upstream myproject {
server 127.0.0.1:8000;
server 127.0.0.1:8001 backup;
}
2、服务器热备
下载keepalived或其他热备软件,进行操作。
8、安全
使用HttpAuthBasic模块做基本的安全防护。
1、可使用htpasswd命令创建密码文件
htpasswd -c -b test_pw admin admin # -c 创建文件;-b 直接输入密码而不用等待命令行提示
注:密码文件名不可为user_password。
2、在location中启用
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/conf.d/test_pw;
}
所谓遇见,只为离别

浙公网安备 33010602011771号