Nginx

Nginx

Nginx

一、简介

​ Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

二、基础

1、安装

系统:CentOS 7.8

# 1、下载安装包安装安装包:官网下载:http://nginx.org/en/download.html1.18.0版本:http://nginx.org/download/nginx-1.18.0.tar.gz
# 2、添加nginx源安装sudo yum install yum-utilstouch /etc/yum.repos.d/nginx.repo写入以下内容:----------------------------------------------------------------------[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true[nginx-mainline]name=nginx mainline repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=1enabled=0gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true----------------------------------------------------------------------sudo yum clean all && yum makecachesudo yum install nginx

2、起止方法

启动nginx,执行可执行文件即可。

nginx

启动后,可由以下命令执行其他操作

nginx -s signal其中signal有以下几种:stop   # 快速关闭quit   # 正常关闭reload # 重新加载配置文件,即重启reopen # 重新打开日志文件

关闭也可以通过系统指令操作。

ps aux | grep nginxkill -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;    }
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部