nginx简介
nginx是一个高性能、轻量级的服务器,可同时作为web服务器、反向代理服务器。正向代理是代替客户端(用户)访问服务器,反向代理是代替服务器接收、处理请求。
nginx的特点
- 稳定性高
- 系统资源占用少
- 并发能力强
一般用nginx反向代理tomcat(负载均衡)、代理静态资源。
windows下使用nginx
启动、关闭nginx的2种方式
1、双击启动,Ctrl+Shift+Esc任务管理器结束nginx的2个进程来关闭nginx,也可以命令行结束
#查看nginx进程的pid
tasklist | findstr nginx
#结束nginx的2个进程
taskkill /f /pid pid1
taskkill /f /pid pid2
如果修改了nginx的配置,需要重启nginx使之生效
2、命令行cd到nginx主目录
#启动
start nginx
#停止
nginx -s stop
#退出,退出之前会强制停止nginx
nginx -s quit
#重新加载配置
nginx -s reload
如果操作过程中要重新加载配置,第二种方便些。
linux下使用nginx
安装
.tar.gz中是nginx的源码,需要自己编译安装,先放到/usr/local下
#安装依赖
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
yum -y install gcc automake autoconf libtool make
#解压
tar -xzvf nginx-1.16.1.tar.gz
rm nginx-1.16.1.tar.gz
#进入解压目录
cd nginx-1.16.1
#指定安装目录
mkdir /usr/local/nginx
./configure --prefix=/usr/local/nginx
#编译
make
#安装
make install
#删除解压目录
cd ..
rm -r nginx-1.16.1
#开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
fire-wall --reload
常用命令
都是调用sbin下的nginx,先切换到nginx/sbin下
./nginx #启动nginx
./nginx -s stop #停止
./nginx -s quit #停止并退出
./nginx -s reload #重新加载配置
./nginx -v #查看nginx版本
设置开机启动(可选)
vim /etc/rc.d/rc.local
末尾加上 /usr/local/nginx/sbin/nginx
nginx常用配置(反向代理、代理静态资源)
#gzip on;
#指定tomcat集群、要使用的负载均衡算法
upstream servers{
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
server {
listen 80;
server_name localhost;
#字符集使用utf-8
charset utf-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
#反向代理tomcat
proxy_pass http://servers;
}
#代理静态资源
location ~* \.(html|css|js|gif|jpg|png|mp4)$ {
#设置静态资源根目录,相对于nginx主目录,在主目录下新建文件夹static,把静态资源放进去即可
root static;
#设置浏览器缓存的静态资源的有效期,到期后再次访问时会重新从nginx加载。秒s,分m,时h,天d
expires 7d;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
nginx的负载均衡算法
1、轮询(默认)
轮询适合服务器性能差不多的情况,默认使用的就是轮询,不需要设置什么。
将列表中的节点排成一圈,从前往后,找空闲的服务器来处理请求。
2、加权轮询
设置权重,权重大的轮到的机会更大,适合服务器性能有明显差别的情况,性能好的权重设置大些。
upstream servers{
server 192.168.1.1:8080 weight=1;
server 192.168.1.2:8080 weight=3;
server 192.168.1.3:8080 weight=2;
}
3、ip_hash
根据用户ip的hash值来转发请求,同一用户(ip)的请求都会被转发给同一个服务器处理,可解决分布式session问题
upstream servers{
ip_hash;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
4、url_hash(第三方)
根据请求的url来转发,将url相同的请求转发给同一服务器处理。一直处理某个url,该服务器上会有这个url请求的缓存,可减少处理时间
upstream servers{
hash $request_uri;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
5、fair(第三方)
根据服务器响应时间来分发请求,响应时间短的说明负载小、性能充足,分发给它的请求多些,fair 公平。
upstream servers{
fair;
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
ip_hash、url_hash都是使用特定服务器节点来处理特定请求,如果该节点故障,nginx会剔除不可用的节点,将特定请求转发给其它节点处理,url_hash影响不大,但ip_hash会丢失之前的session数据。
url_hash、fair都依赖第三方模块,需要安装相应的模块。
只使用单个nginx容易发生单点故障,一般要用 LVS+keepalive+nginx 实现nginx的高可用。