Nginx
Nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
**
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强**,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx作用
Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
正向代理
正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
正向代理一般是在客户端设置代理服务器,通过代理服务器转发请求,最终访问到目标服务器。
反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的。
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash
轮询
加权轮询
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
通过使用Nginx大大提高了我们网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!
Windows下安装Nginx
1、下载nginx http://nginx.org/en/download.html 建议下载稳定版本,直接解压就可以使用
2、在cmd命令行模式下启动nginx
3、进入本机的 loalhost:80 进行测试
Linux下安装Nginx
1、手动下载.tar.gz安装包,地址:https://nginx.org/en/download.html
2、上传到linux root/下
3、解压Nginx
tar -zxvf nginx-1.18.0.tar.gz
4、解压完成进入Nginx目录下
5、执行configure文件
6、输入
make
配置Nginx再执行make install
安装
7、输入
whereis nginx
检查是否安装
8、启动nginx
Nginx常用命令
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
配置环境变量(全局启动)
1、输入vim /etc/profile
编辑环境变量文件
2、在最后面添加
export NGINX_HOME=/usr/local/nginx
export PATH=$PATH:$NGINX_HOME/sbin
3、重新加载配置文件
source /etc/profile
修改完配置文件之后,需要执行 source /etc/profile 使文件生效。 接下来,我们就可以在任意目录下执行nginx的指令了,如:
配置文件结构
nginx的配置文件(conf/nginx.conf)整体上分为三部分: 全局块、events块、http块。这三块的分别配置信息如下表:
区域 | 职责 |
---|---|
全局块 | 配置和nginx运行相关的全局配置 |
events块 | 配置和网络连接相关的配置 |
http块 | 配置代理、缓存、日志记录、虚拟主机等配置 |
具体结构图如下:
在全局块、events块以及http块中,我们经常配置的是http块。
在http块中可以包含多个server块,每个server块可以配置多个location块。
负载均衡
处理上述默认的轮询策略以外,在Nginx中还提供了其他的负载均衡策略,如下:
名称 | 说明 | 特点 |
---|---|---|
轮询 | 默认方式 | |
weight | 权重方式 | 根据权重分发请求,权重大的分配到请求的概率大 |
ip_hash | 依据ip分配方式 | 根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器上 |
least_conn | 依据最少连接方式 | 哪个服务器当前处理的连接少, 请求优先转发到这台服务器 |
url_hash | 依据url分配方式 | 根据客户端请求url的hash值,来分发请求, 同一个url请求, 会发转发到同一个服务器上 |
fair | 依据响应时间方式 | 优先把请求分发给处理请求时间短的服务器 |
负载均衡的策略
1 轮询
轮询方式是Nginx负载默认的方式,请求按顺序分配到各个服务器
upstream LoadBalance-server {
server localhost:8080;
server localhost:8081;
}
2 权重
指定每个服务的权重比例,weight和访问比率成正比,适用于服务机器性能不同的情况,如下访问8080服务的比率会是8081服务的二倍。
upstream LoadBalance-server {
server localhost:8080 weight=2;
server localhost:8081 weight=1;
}
3 iphash
根据访问的ip进行hash来选择转发到哪一个服务器,同一个ip会一直访问同一个服务器,可以用来解决session不一致的问题,可以和weight配合使用
upstream LoadBalance-server {
ip_hash;
server localhost:8080;
server localhost:8081;
}
4 最少连接
将请求properties分配到连接数最少的服务上。
upstream LoadBalance-server {
least_conn;
server localhost:8080;
server localhost:8081;
}
5 fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream LoadBalance-server {
server localhost:8080;
server localhost:8081;
fair;
}
详细配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
//负载均衡,假设访问多次127.0.0.1,先访问8080端口一次,第二次再访问8081端口,循环访问
8080=>1 8081=>1
upstream lb{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
//假设访问多次127.0.0.1,先访问8082端口一次,第二三四次再访问8083端口,循环访问
//8082=>1 8083=>3
upstream ls{
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 weight=3;
}
server {
listen 80;
server_name localhost;
location / {
//代理端口 localhost:8080=localhost:80
listen 80;
//根目录下的所有请求代理到lb负载均衡上
proxy_pass http://lb;
}
//admin请求走
location /admin {
//admin下的所有请求代理到lb负载均衡上
proxy_pass http://ls;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}