• Nginx配置反向代理,负载均衡,动静分离,高可用


    一、Nginx配置文件认识

    1.配置文件位置

    配置文件在 /usr/local/nginx/conf 下有个 nginx.conf 文件

    2.Nginx配置文件组成

    Nginx的配置文件由三部分组成

    • 第一部分 全局块:设置一些影响Nginx服务器,整体运行的配置信息。
    #user  nobody;
    worker_processes  1; #Nginx处理并发的大小,受硬件约束(值越大,处理并发量越大)
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    • 第二部分events块:设置Nginx服务器和用户的网络连接的配置信息。
    events {
        worker_connections  1024; # Nginx 配置服务器最大连接数
    }
    
    • 第三部分 HTTP 块(配置最频繁的地方):配置反向代理,动静分离,负载均衡
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;  # 端口号
            server_name  localhost; # 主机名称
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html; #路径包含 / 跳转
                index  index.html index.htm;
            }
    
            #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;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ .php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    

    二、Nginx配置相关实例

    1.Nginx配置-反向代理

    (1)目标

    打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页

    面中

    (2)准备工作

    1.安装JDK

    2.在linux中安装并配置tomcat服务器,使用默认端口8080

    3.开放8080端口

    firewall-cmd --add-port=8080/tcp --permanent # 开放端口
    firewall-cmd --reload # 重启防火墙
    

    安装tomcat和JDK就不说了。

    (3)配置

    修改配置文件中 server下server_name 为访问的服务器ip地址(浏览器中输入的域名或者ip,也可理解为运行Nginx服务器的ip地址或域名),给server下 location / 下添加 proxy_pass http://127.0.0.1:8080

    然后重启nginx就好了(运行命令必须在/usr/local/nginx/bin内)

    # 1.启动nginx
    	./nginx
    # 2.关闭nginx
    	./nginx -s stop
    

    ① 目标

    使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001

    访问http://localhost:9001/etc/a.html 访问8080端口的服务器

    访问http://localhost:9001/void/a.html 访问8081端口的服务器

    ② 准备工作

    准备两个tomcat一个端口8080一个端口8081

    在tomcat中创建显示的文件(文件内容包含:808x)

    ③ 配置

    在nginx的配置文件中配置,(每条设置后的分号不要忘记 ";" )

    server{
    	listen  9001; #监听端口
    	server_name 127.0.0.1; #本机ip或者域名
    	location ~ /void/ {
    		proxy_pass http:127.0.0.1:8080;
    	}
    	location ~ /etc/ {
    		proxy_pass http:127.0.0.1:8081;
    	}
    }
    

    Nginx配置文件location说明

    location 是有顺序的,会被第一个匹配的location处理。

    1.首先匹配=

    2.其次匹配^~

    3.再其次按照配置文件的顺序进行正则匹配

    4.最后是交给/进行通用匹配

    提示:当有匹配成功时,立刻停止匹配,按照当前匹配规则处理请求

    2.Nginx配置-负载均衡

    (1)实现效果

    1.在浏览器地址输入:http://192.168.12.25/edu/a.html,负载均衡效果,平均到8080和8081端口去

    (2)准备工作

    1.准备两台tomcat服务器,一台端口为8080一台为8081

    2.在两台tomcat里的webapp目录中,创建文件夹edu,在edu文件夹创建页面a.html 用于测试

    (3)配置

    在nginx的配置文件中配置,http 块中配置 ,和server块中配置

    #http块中添加此块
    upstream myserver{
    	server 127.0.0.1:8080;
    	server 127.0.0.1:8081;
    }
    #server块中
    配置端口号和本机ip
    location / {
    	proxy_pass http://myserver; #配置内容
    }
    

    Nginx负载均衡策略

    1.轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    2、指定权重(weight)

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 权重默认为1,权重越高,被分配的客户端就越多(在http块中配置的)

    3、IP绑定 ip_hash

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

    在配置文件加入ip_hash;

    4、fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    在配置文件加入fair;

    5、url_hash(第三方)

    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

    3.Nginx配置-动态分离

    通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

    (1)准备工作

    1.在linux系统中准备一些静态资源,用于一会访问测试。

    /data/www/ 下存放html

    /data/image/ 下 存放图片

    (2)配置

    1.在nginx配置文件中配置

    (3)测试

    4.Nginx配置-高可用

    (1)准备工作

    需要多台服务器

    在这几台服务器上安装nginx

    在这几个服务器上安装keepalived

    # 下载安装 keepalived  安装位置就在/etc/keepalived
    yum install keepalived -y
    # 查看是否安装成功
    rpm -q -a keepalived
    

    (2)开始配置

    (1)配置文件在/etc/keepalived/keepalived.conf

    global_defs {
       notification_email {
         acassen@firewall.loc # 邮箱
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc #邮箱
       smtp_server 192.168.92.128 #服务器ip
       smtp_connect_timeout 30
       router_id LVS_DEVEL  #访问到主机的名字 在/etc/hosts 添加 127.0.0.1 LVS_DEVEL
    }
    
    vrrp_script chk_http_port {
    
        script "/usr/local/src/nginx_check.sh"
        
        interval 2  #(检测脚本执行的间隔)每隔两秒检测一次
        
        weight 2   # 权重
    }
    
    vrrp_instance VI_1 {
        state MASTER    #此服务器是主服务器就是MASTER,从服务器就是BACKUP
        interface ens33 #网卡 ifconfig 可以查看
        virtual_router_id 51 #主、备机的virtual_router_id必须相同
        priority 100  #主、备机取不同的优先级,主机值较大,备份机值较小 (优先级)
        advert_int 1 #每隔多久监测一次服务器是否存活
        authentication {
            auth_type PASS   
            auth_pass 1111
        }
        virtual_ipaddress {
        	# 虚拟ip可以配置多个
            192.168.92.150  //VRRP H虚拟机地址
        }
    }
    

    (2)在 /usr/local/src/ 下添加检测脚本nginx_check.sh

    配置文件中的 /server/nginx/sbin/nginx 是nginx的启动位置

    #!/bin/bash
    A=`ps -C nginx -no-header |wc -1`
    if [ $A -eq 0 ];then
        /server/nginx/sbin/nginx  
        sleep 2
        if [ `ps -C nginx --no-header |wc -1` -eq 0 ];then
            killall keepalived
        fi
    fi
    

    (3)启动服务器和keepalived

    systemctl start keepalived.service
    

    (3)测试

    访问虚拟ip的地址

    nginx配置文件nginx.conf之server及server_name的意义详解

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
  • 相关阅读:
    Zend Studio下调试PHP的一点注意事项
    使用FTP出现中文乱码解决方案
    C++数据类型与C#对应表
    FineUI 开发B/S系统
    c#调用带输出参数的存储过程
    经典FormsAuthenticationTicket 分析
    C# Oracle数据库操作类实例详解
    如何使用C#的Hashtable[哈希表]
    对三层架构的理解
    C# 最简单的三层架构实例 ——转载自网易博客
  • 原文地址:https://www.cnblogs.com/hhddd-1024/p/14515397.html
Copyright © 2020-2023  润新知