Nginx入门到放弃

load balance 负载均衡
high availability 高可用
 
1、nginx简介
俄罗斯一位程序员开发
 
2、使用场景
web服务器
高并发场景
正向代理
反向代理
 
3、源码安装ngxin
 
解压:tar -zxf nginx-1.8.1.tar.gz
安装依赖:yum install gcc pcre-devel zlib-devel openssl-devel -y
配置安装路径:./configure --prefix = /opt/nginx
开始编译安装:make && make install
启动:cd /opt/nginx/sbin
./nginx
ngixn加入到path中,即放到环境变量中。
常用命令:
nginx -s reload | quit

安装目录:
conf #配置文件
html #静态文件
sbin #可执行文件
logs #日志文件

 

4、负载均衡搭建
user nobody
worker_processes 1;
http{
    upstream balance {
        server 127.0.0.1:7877;
        server 127.0.0.1:7878;
        server 127.0.0.1:7879;
    }
    
    server {
        listen       80;   #监听端口
        server_name  127.0.0.1;   #监听地址
        location / {
            proxy_pass http://balance;
        }
    }
}

 

5、负载均衡策略
 
(1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
(2)Weight增加权重
指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
upstream balance { server 127.0.0.1:7877 weight=3; server 127.0.0.1:7878 weight=2; server 127.0.0.1:7879 weight=1; }
(3)least_conn最少连接数
在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的服务器,而是将新的请求分发给不太繁忙的服务器,避免服务器过载。
upstream balance { least_conn; server 127.0.0.1:7877; server 127.0.0.1:7878; server 127.0.0.1:7879; }
(4)ip_hash
确保来自同一客户端的请求始终定向给同一台服务器,除非此服务器不可用。
每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
 
upstream balance { ip_hash; server 127.0.0.1:7877; server 127.0.0.1:7878; server 127.0.0.1:7879; }
 
(5)fair响应时间方式,第三方插件
比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
(6)url_hash依据url分配方式,第三方插件
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
 
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:
  • down:表示当前的server暂时不参与负载均衡;
  • backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;
  • max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
  • fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
 
http协议长连接,复用连接。
 
6、资源静态化
配置静态资源路径
location ^~/static/ { root html }
 
图床,由单个服务器统一处理图片。
 
7、虚拟主机
虚拟主机时指在网络服务器上分出一定的磁盘空间,用户可以租用此部分空间,以供用户放置站点及应用组件,提供必要的数据存放和传输功能。
分类:
(1)基于域名的虚拟主机,通过域名来区分虚拟主机。(域名不一样,端口一样)
http{
    upstream aaa {
        server 192.168.0.1:8080;
        server 192.168.0.2:8080;
        server 192.168.0.3:8080;
    }
     upstream bbb {
        server 192.168.0.1:18080;
        server 192.168.0.2:18080;
       server 192.168.0.3:18080;
    }
    server {
        listen       80;   #监听端口
        server_name  www.aaa.com;   #监听地址
        location / {
            proxy_pass http://aaa;
        }
    }
    server {
        listen       80;   #监听端口
        server_name  www.bbb.com;   #监听地址
        location / {
            proxy_pass http://bbb;
        }
    }
}

  

(2)基于端口的虚拟主机,通过端口来区分虚拟主机。(域名一样,端口不一样)
http{
    upstream aaa {
        server 192.168.0.1:8080;
        server 192.168.0.2:8080;
        server 192.168.0.3:8080;
    }
    server {
        listen       8080;   #监听端口
        server_name  www.aaa.com;   #监听地址
        location / {
            proxy_pass http://aaa;
        }
    }
    server {
        listen       8081;   #监听端口
        server_name  www.aaa.com;   #监听地址
        location / {
            proxy_pass http://192.168.0.4:8080;
        }
    }
}

  

 
 
hosts文件:c:\Windows\System32\drivers\etc\hosts 192.168.0.1 www.aaa.com 192.168.0.1 www.bbb.com 192.168.0.1 www.ccc.com
一台Linux启动多台tomcat
多个项目可以部署在同一个tomcat中,缺点是更新其中一个,需要停止所有服务。建议每个应用部署一个tomcat,方便更新。
 
8、Session一致性
 
9、配置文件详解
配置文件结构:
main(全局设置)块设置的指令将影响其它所有设置。server继承main,location继承server,upstream既不会继承其它设置,也不会被继承。
...              #全局块
events {         #events块
   ...
}
http      #http块
{
    ...   #http全局块
    upstream #负载均衡服务器设置
    server        #server块,主机设置,指定主机和端口
    { 
        ...       #server全局块
        location [PATTERN]   #location块 URL匹配特定位置的设置
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

  

配置文件详解:
#user 指定运行nginx的用户和组(第一个参数为用户,第二个为组,这里只有用户)
#user nobody
#指定工作进程数(一般设置为CPU的核数)
worker_processes 1;

#指定错误日志为logs/ 目录下的error.log文件
#error_log logs/error.log;
#指定错误日志,并指定写入格式为notice
#error_log logs/error.log notice;
#指定错误日志,并指定写入格式为info
#error_log logs/error.log info;
#指定pid文件(存放主进程pid号)
#pid logs/nginx.pid;

#nginx 连接配置模块
events{
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #指定每个工作进程最大连接数为1024,默认为512
}
#http配置模块
http{
     #文件扩展名与文件类型映射表。通过include家在mime.type文件,里面的types{}模块将文件扩展名映射到响应为MIME类型
    include       mime.types;
    default_type  application/octet-stream; #定义响应的默认MIME类型,默认为text/plain
   
    #access_log off; #取消服务日志    
    
    #自定义存入日志的格式
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    #tcp_nopush on;#启用或者禁用使用套接字选项(仅在sendfile使用时使用)
    
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。http协议1.1之后支持长链接。
    
    #gzip on;#启用或者禁用gzip

    upstream mysvr {
        ip_hash;#负载均衡调度算法
        server 127.0.0.1:7878;
        server 192.168.10.121:3333 backup;  #热备
    }
    
    upstream ADMIN-SERVER {
        server nyshop:7878;
    }
    
    error_page 404 https://www.baidu.com; #错误页
    
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址
        
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
        location / {
            root  /app/admin-web/;
            index index.html index.htm;
            try_file $url $url/ /index.html;
        }
        location ~/static/ {
            root  /app/admin-web/;
            index index.html index.htm;
            try_file $url $url/ /index.html;
        }
        #定位前端页面
        location /merchant-web/ {
            alias  /app/merchant-web/;
            index index.html index.htm;
            try_file $url $url/ /merchant-web/index.html;
        }
        #转发后端接口
        location ~/admin-server/ {
            proxy_pass http://ADMIN-SERVER;
            proxy_set_header Referer $http_referer
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
        }  
        location ~/business-server/ {
            proxy_pass http://BUSINESS-SERVER;
            proxy_set_header Referer $http_referer
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;           
        }        
    }
}

  

 
补充扩展:
MIME 类型,多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
官方的 MIME 信息是由 Internet Engineering Task Force (IETF) 在下面的文档中提供的:
    RFC-822 Standard for ARPA Internet text messages
    RFC-2045 MIME Part 1: Format of Internet Message Bodies
    RFC-2046 MIME Part 2: Media Types
    RFC-2047 MIME Part 3: Header Extensions for Non-ASCII Text
    RFC-2048 MIME Part 4: Registration Procedures
    RFC-2049 MIME Part 5: Conformance Criteria and Examples
不同的应用程序支持不同的 MIME 类型。

 

10、路径路由规则
 
root 匹配域名后面的所有
alias 匹配最后
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
 
使用root,实际的路径就是:root值 + location值。 使用alias,实际的路径就是:alias值。 例如, 有一张图片,URL是:www.awaimai.com/static/a.jpg 它在服务器的路径是:/var/www/app/static/a.jpg 那么用root的配置是: location /static/ { root /var/www/app/; } 用alias的配置就是: location /static/ { alias /var/www/app/static/; } 对于alias,location值可以随便取,例如: location /hello/ { alias /var/www/app/static/; } 这样,我们访问图片的地址就是:www.awaimai.com/hello/a.jpg 注意: 很多文章说:alias 后面必须要用 “/” 结束,是错误的,亲测加不加/效果是一样的。 alias在使用正则匹配时,必须捕捉要匹配的内容,并在指定的内容处使用。 alias只能位于location块中,root可以不放在location中。
 

感谢阅读到现在,请在留言区提出宝贵的意见!

更多精彩内容,关注微信公众号:技术严选

posted @ 2021-09-07 10:16  YolandaRay  阅读(91)  评论(0编辑  收藏  举报