Nginx
介绍
软件层面一般常用Nginx来做反向代理服务器,它的性能非常好,用来做负载均衡。
官网:http://nginx.org
安装
因为他是C语言的,所以下载下来的源码需要编译才能运行
- gcc编译器是否安装
检查是否安装:yum list installed | grep gcc
执行安装:yum install gcc -y
- openssl库是否安装
检查是否安装:yum list installed | grep openssl
执行安装:yum install openssl openssl-devel -y
- pcre库是否安装
检查是否安装:yum list installed | grep pcre
执行安装:yum install pcre pcre-devel -y
- zlib库是否安装
检查是否安装:yum list installed | grep zlib
执行安装:yum install zlib zlib-devel -y
- 一次性安装,执行如下命令
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
解压下载下来的nginx文件,执行命令:tar -zxvf nginx-1.14.2.tar.gz
切换至解压后的nginx主目录,执行命令:cd nginx-1.14.2
在nginx主目录nginx-1.14.2下执行命令:./configure --prefix=/usr/local/nginx
(其中–prefix是指定nginx安装路径) 注意:等号左右不要有空格
执行命令进行编译:make
执行命令进行安装:make install
安装成功后,可以切换到/usr/local/nginx目录下,查看内容
有 conf html logs sbin 目录
常用命令
切换到nginx安装目录的sbin目录下,执行:
普通启动
./nginx
通过配置文件启动
./nginx -c /usr/local/nginx/conf/nginx.conf
查看进程
nginx 体系结构由 master 进程和其 worker 进程组成
master 进程读取配置文件,并维护 worker 进程,而 worker 进程则对请求进行实际处理
Nginx启动后,安装目录下会出现一些_tmp结尾的文件,这些是临时文件,不用管。
ps -ef | grep nginx
优雅关闭
这种关闭方式会处理完请求后再关闭,所以称之为优雅的关闭,
主pid为master,其他为子进程worker
kill -QUIT 主pid
快速关闭Nginx:
这种关闭方式不管请求是否处理完成,直接关闭,比较暴力,称之为快速的关闭
kill -TERM 主pid
重启
./nginx -s reload
配置检查
./nginx -c /usr/local/nginx/conf/nginx.conf -t
静态网站部署
例子:将静态ace网站部署到Nginx服务器上
把文件上传到/opt/static/
下
修改nginx配置文件(注意层级在http—>server—>location)
注意要以分号结尾
通过ip直接访问
1 | location / { |
重启nginx,输入IP
便能访问
例如:http://192.168.235.128:80
通过ip+路径访问
1 | location /ace { |
重启nginx,输入IP+/ace
便能访问
例如:http://192.168.235.128:80/ace
负载均衡
用户访问nginx,让他自动调度服务(此处是tomcat)
修改配置文件
(注意层级在,http—>upstream)
127.0.0.1:9100和127.0.0.1:9200是两台tomcat
1 | upstream www.myweb.com { |
再在server模块里添加location,并配置proxy_pass
其中 www.myweb.com 字符串要和 upstream 后面的字符串相等
1 | location /myweb { |
ip+myweb便能访问
例如:http://192.168.235.128:80/myweb
常用负载均衡策略
轮询(默认)
注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。如果后端服务器down掉,将自动剔除1
2
3
4upstream backserver {
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}权重
每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况1
2
3
4upstream backserver {
server 192.168.0.14 weight=5;
server 192.168.0.15 weight=2;
}ip_hash
ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题
算法:hash(“124.207.55.82”) % 2 = 0, 11
2
3
4
5upstream backserver {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}最少连接
web请求会被转发到连接数最少的服务器上1
2
3
4
5upstream backserver {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
静态代理
把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。
所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。
方式一
在nginx.conf的location中配置静态资源的后缀
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
1 | location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { |
整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理
放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;
否则会出现403错误 chmod 755
方式二
在nginx.conf的location中配置静态资源所在目录实现
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
1 | location ~ .*/(css|js|img|image) { |
我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源
动静分离
Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。
动态资源,如jsp由tomcat或其他web服务器完成
静态资源,如图片、css、js等由nginx服务器完成
它们各司其职,专注于做自己擅长的事情
动静分离充分利用了它们各自的优势,从而达到更高效合理的架构
虚拟主机
虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。
Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个域名不同的网站。
Nginx下,一个server标签就是一个虚拟主机。nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可;
例如:www.meituan.com 切换城市,可以看到不同的城市地址不一样(二级域名)
比如一个公司有多个二级域名,没有必要为每个二级域名都提供一台Nginx服务器,就可以使用虚拟主机技术,在一台nginx服务器上,模拟多个虚拟服务器。
基于端口的虚拟主机
基于端口的虚拟主机配置,使用端口来区分
浏览器使用 同一个域名+端口 或 同一个ip地址+端口访问;
基于域名的虚拟主机
基于域名的虚拟主机是最常见的一种虚拟主机
域名解析也需要设置,这里不多赘述
说明:
9100、9200、9300端口是tomcat服务
nginx一直监听80端口
如果用户访问http://beijing.pengyirui.spac
时,会转跳到以beijing.myweb.com
为名的tomcat服务
1 | upstream beijing.myweb.com { |
nginx配置中文详解
1 | #配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码 |