Nginx主要应用
静态web服务器
负载均衡
静态代理
虚拟主机
静态web服务器:
-
Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端;
server { listen 80; #端口号 location /ace { root /opt/www/; #静态文件路径 } }
负载均衡概述:
- 在网站创立初期,我们一般都使用单台机器对外提供集中式服务;
- 但是随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务;但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com;
- 那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情;
- 负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀;
负载均衡实现方式
硬件负载均衡
- 比如 F5、深信服、Array 等;优点是有厂商专业的技术服务团队提供支持,性能稳定;缺点是费用昂贵,对于规模较小的网络应用成本太高;
软件负载均衡
- 比如 Nginx、LVS、HAProxy 等;优点是免费开源,成本低廉;
Nginx负载均衡
-
Nginx如何实现负载均衡:(通过在Nginx的nginx.conf文件进行配置即可实现)
-
配置如下:(配置2步即可)
-
1、在http模块加上:(举例)
upstream www.myweb.com { server 127.0.0.1:9100 weight=3; server 127.0.0.1:9200 weight=1; }
其中weight=1表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多;
upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器;
2、在server模块里添加:(举例)
location /myweb {
proxy_pass http://www.myweb.com;
}
-其中 www.myweb.com 字符串要和 upstream 后面的字符串相等;
Nginx常用负载均衡策略:
1、轮询(默认)
每个请求轮流分配到不同的后端服务器,如果后端服务器down掉,将自动剔除;
upstream backserver {
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
2、权重
-
每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况;
upstream backserver { server 192.168.0.14 weight=5; server 192.168.0.15 weight=2; }
3、ip_hash
-
ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题;
upstream backserver { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:9090; }
4、最少连接
web请求会被转发到连接数最少的服务器上;
upstream backserver {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
负载均衡其他几个配置
upstream backserver {
server 127.0.0.1:9100;
server 127.0.0.1:9200 backup; (其它所有的非backup机器down的时候,才请求backup机器)
}
-------------------------------------------------------------------------------------
upstream backserver {
server 127.0.0.1:9100;
server 127.0.0.1:9200 down; (down表示当前的server是down状态,不参与负载均衡)
}
静态代理
-
把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高;
-
所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理;
Nginx静态代理如何实现?(通过在Nginx的nginx.conf文件进行配置即可实现)
方式一:通过在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; }
放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;
- 其中:
- 表示正则匹配,也就是说后面的内容可以是正则表达式匹配;
第一个点 . 表示任意字符;第一个点 . 表示任意字符;- 表示一个或多个字符;
- . 是转移字符,是后面这个点的转移字符;
- | 表示或者
- $ 表示结尾
- 整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理;
方式二:
通过在nginx.conf配置文件中配置静态资源所在目录实现,比如:
location ~ .*/(css|js|img|images|image) {
root /opt/static;
}
我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源;
动静分离:
-
Nginx的负载均衡 和 静态代理 结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景;
-
动态资源,如jsp由tomcat或其他web服务器完成; 静态资源,如图片、css、js等由nginx服务器完成;
-
它们各司其职,专注于做自己擅长的事情; 动静分离充分利用了它们各自的优势,从而达到更高效合理的架构;
动静分离示例
负载均衡Nginx配置:
upstream www.p2p.com {
server 127.0.0.1:9100 weight=5;
server 127.0.0.1:9200 weight=2;
}
upstream static.p2p.com {
server 127.0.0.1:81 weight=1;
server 127.0.0.1:82 weight=1;
}
location /p2p {
proxy_pass http://www.p2p.com;
}
location ~ .*/(css|js|img|images) {
proxy_pass http://static.p2p.com;
}
静态代理Nginx配置:
location ~ .*/(css|js|img|images) {
root /opt/static;
}
虚拟主机
-
虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站;
-
Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个网站;
-
Nginx下,一个server标签就是一个虚拟主机;
-
nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可;
配置虚拟主机通过有下面两种方式:
基于域名的虚拟主机 : 基于域名的虚拟主机是最常见的一种虚拟主机。
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 /p2p {
proxy_pass http://www.p2p.com;
}
}
需要修改一下本地的hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts
在hosts文件配置:192.168.208.128 www.myweb.com
在hosts文件配置:192.168.208.128 www.p2p.com
前面是Linux的IP,后面是你自定义的域名
基于端口的虚拟主机
-
基于端口的虚拟主机配置,使用端口来区分;
-
浏览器使用 同一个域名+端口 或 同一个ip地址+端口访问
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.p2p.com;
}
}
虚拟主机示例
城市站点网站(举例说明,我们配置三个城市站点)
1、配置3个Tomcat,每个tomcat一个站点,项目部署在tomcat的ROOT目录下;
2、配置3个Nginx虚拟主机:
方式一:在nginx.conf文件添加三个server节点,用于配置三个虚拟主机
server {
listen 80;
server_name beijing.myweb.com;
location / {
proxy_pass http://beijing.myweb.com;
}
}
server {
listen 80;
server_name nanjing.myweb.com;
location / {
proxy_pass http://nanjing.myweb.com;
}
}
server {
listen 80;
server_name tianjin.myweb.com;
location / {
proxy_pass http://tianjin.myweb.com;
}
}
方式二:
- 通过include的方式引入虚拟主机配置
- include /usr/local/nginx/vhost/vhost.conf;
- 将虚拟目录的配置文件加入到”http {}”部分的末尾,与其他server并列;
3、配置每个虚拟主机请求转发所对应的后端服务器
upstream beijing.myweb.com {
server 127.0.0.1:9910;
}
upstream beijing.myweb.com {
server 127.0.0.1:9910;
}
upstream tianjin.myweb.com {
server 127.0.0.1:9930;
}
4、修改hosts文件,让Linux的ip指向到一个三个站点的域名
192.168.230.128 beijing.myweb.com
192.168.230.128 nanjing.myweb.com
192.168.230.128 tianjin.myweb.com