一、Nginx是什么
nginx是用来反向代理的,具体的百度。正向代理:代理用户去访问一些本来访问不到的网站,比如说vpn。反向代理:代理网站,用户直接访问它就可以了,它帮你去访问你想要访问的网站。
二、 Nginx安装以及常见操作
2.1 安装前环境准备,安装相关需要用到的库
命令:
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
2.2安装nginx
- 解压下载的安装包:tar -zxvf nginx-1.14.2.tar.gz
- 切换至解压后的nginx主目录:cd nginx-1.14.2
- 指定安装后的路径:./configure --prefix=/usr/local/nginx
- 开始编译:make
- 开始安装:make install
2.3nignx的启动
- 普通启动:./nginx
- 使用配置文件启动:./nginx -c /usr/local/nginx/conf/nginx.conf(ps:配置文件路径必须使用绝对路径)
- 测试启动,用来测试配置文件是否正确:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
- 查看是否启动成功:ps -ef | grep nginx
- 优雅的关闭nginx:kill -QUIT 主pid
- 快速关闭nginx:kill -TERM 主pid或者 kill -9 主id
- 重启nginx: ./nginx -s reload
三、Nginx作用
3.1nign静态网站部署
- 修改nginx.conf文件,添加location匹配字段。如下代码示例
server { listen 80; #端口号 location /ace { root /opt/static; #静态文件路径 } }
- location匹配顺序(精确匹配)> (最长字符串匹配,但完全匹配) >(非正则匹配)>(正则匹配)>(最长字符串匹配,不完全匹配)>(location通配)
3.2负载均衡
- 在http模块加上upstream配置
upstream www.myweb.com { server 127.0.0.1:9100 weight=3; server 127.0.0.1:9200 weight=1; }
- 在server模块里添加location,并配置proxy_pass,其中 www.myweb.com 字符串要和 upstream 后面的字符串相等
location /myweb { proxy_pass http://www.myweb.com; }
3.3负载均衡策略
- 轮询(默认)
注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。如果后端服务器down掉,将自动剔除
- 权重
每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况
upstream 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, 1
upstream backserver {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
- 最少连接
web请求会被转发到连接数最少的服务器上
upstream backserver {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
3.4负载均衡其他几个配置
配置1:
upstream backserver {
server 127.0.0.1:9100;
#其它所有的非backup机器down的时候,才请求backup机器
server 127.0.0.1:9200 backup;
}
配置2:
upstream backserver {
server 127.0.0.1:9100;
#down表示当前的server是down状态,不参与负载均衡
server 127.0.0.1:9200 down;
}
四、静态代理
把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。
- 在nginx.conf的location中配置静态资源的后缀
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid
|doc|ppt|pdf|xls|mp3|wma)$ {
root /opt/static;
}
~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配
第一个点 . 表示任意字符
*表示一个或多个字符
\. 是转移字符,是后面这个点的转移字符
| 表示或者
$ 表示结尾
Ps: 整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限; 否则会出现403错误 chmod 755
- 在nginx.conf的location中配置静态资源所在目录实现
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
location ~ .*/(css|js|img|images) {
root /opt/static;
}
xxx/css
xxx/js
xxx/img
xxx/images
我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源
Ps:
我们拦截的目录为/images,
请求的图片目录是/image,这样拦截不到;
但是反过来
我们拦截的目录为/imag
请求的图片目录为/image,这样可以拦截到
所有我们需要将location的/images修改为/image。所以一般我们用方式一,匹配静态资源后缀的方式更好一下,防止js拦截jsp目录。
- 动静分离
Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。
动态资源,如jsp由tomcat或其他web服务器完成
静态资源,如图片、css、js等由nginx服务器完成
它们各司其职,专注于做自己擅长的事情
动静分离充分利用了它们各自的优势,从而达到更高效合理的架构 - 虚拟主机
虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。
Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个域名不同的网站。
Nginx下,一个server标签就是一个虚拟主机。nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可;- 基于端口的虚拟主机
server { listen 8080; server_name www.myweb.com; location /myweb { proxy_pass http://www.myweb.com; } } server { listen 9090; server_name www.myweb.com; location /p2p { proxy_pass http://www.myweb.com; } }
- 基于域名的虚拟主机
server { listen 80; server_name www.myweb.com; location /myweb { proxy_pass http://www. myweb.com; } } server { listen 80; server_name www.p2p.com; location /myweb { proxy_pass http://www.p2p.com; } }
- 基于端口的虚拟主机