Nginx

头像
JayX
    阅读 7 分钟

    一.Nginx下载与运行

    Nginx下载地址:
    http://nginx.org/en/download....

    下载相应系统版本:
    image.png

    下载完后解压可以直接使用:
    选择 nginx.exe 右键“以管理员身份运行”,Nginx使用的端口是 “80” 端口号,如果有其他进程在使用 “80” 端口号,需先将其关闭。

    访问地址:http://localhost:80
    image.png

    如有上图提示,表示Nginx正常运行

    在任务管理器中可以查看Nginx的两个进程
    1.Nginx主程序进程(占内存大的是主程序)
    2.Nginx守护进程
    image.png

    二.Nginx常用命令:

    说明:nginx命令要在nginx.exe所在的目录中执行cmd
    image.png

    命令说明
    start nginx启动
    nginx -s reload重启
    nginx -s stop关闭
    nginx -t检查配置文件是否有误

    image.png

    三.Nginx集群规则:

    1.轮询策略(默认):

    说明:根据配置文件中的顺序,依次访问tomcat服务器

    #配置域名代理
        server {
            listen 80;
            server_name  manage.jt.com;
    
            location / {
                #代理 服务器访问地址
                #proxy_pass http://localhost:8091;
                proxy_pass  http://jtWindows;
            }
        }
    
        #构建tomcat服务器集群
        #1.轮询策略(默认):按配置顺序依次访问服务器 
        upstream jtWindows {
        
            server localhost:8081;
            server localhost:8082;
            server localhost:8083;
        }

    2.权重策略:

    说明:由于公司内部物理服务器的处理能力可能有高有低,所以需要让高性能的服务器处理更多的请求,采用权重策略。
    可以使用 weight 设置访问比例,进行访问服务器

    #配置域名代理
        server {
            listen 80;
            server_name  manage.jt.com;
    
            location / {
                #代理 服务器访问地址
                #proxy_pass http://localhost:8091;
                proxy_pass  http://jtWindows;
            }
        }
    
        #构建tomcat服务器集群
        #2.权重策略:是按设置的比例(使用 weight 设置)进行访问服务器
        upstream jtWindows {
        
            server localhost:8081 weight=6;
            server localhost:8082 weight=3;
            server localhost:8083 weight=1;
        }

    3.IPHash策略:(优先级最高)

    说明:使用tomcat集群搭建服务器后,例如用户在写文章,当电脑出现问题(宕机)时,重启了电脑后,代理服务器会重新分配服务器端口,用户重启前的操作将不能再获取,需重新操作?应该如何优化?
    解决方案:
    1) 可以让用户与服务器进行绑定
    2) 将用户的操作信息保存到第三方,之后无论从哪台服务器获取都是相同的结果

    IPHash算法:
    使用 hash 算法把(ip与端口号)得出的哈希码值,进行求余(如配置三台服务器就是 %3)后,与服务进行匹配访问

    #配置域名代理
        server {
            listen 80;
            server_name  manage.jt.com;
    
            location / {
                #代理 服务器访问地址
                #proxy_pass http://localhost:8091;
                proxy_pass  http://jtWindows;
            }
        }
    
        #3.IPHash(优先级最高):使用 hash算法把(ip与端口号)得出的哈希码值后,进行求余(如配置三台服务器就是 %3)与服务进行匹配访问
        # max_fails=1 :设定最大的失败次数
        # fail_timeout=60s :设定失败的超时时间(周期时间)
        # 如果 Nginx请求达到了最大的失败次数的服务器,则在规定的时间内,不会再把请求发给该 tomcat服务器,直到下一个周期
        upstream jtWindows {
        
            server localhost:8081 weight=6;
            server localhost:8082 weight=3;
            server localhost:8083 weight=1;
        }

    4.Nginx属性:

    server:定义代理的服务器
    listen:配置监听端口号
    server_name:配置监听域名名称
    location:开始反向代理
    / :表示拦截所有
    root:配置代理的是目录
    index:默认访问的页面
    proxy_pass:代理服务器访问地址
    upstream:定义代理服务器集群
    down:该属性表示当前服务器不参与负载(可能是宕机)
    backup:该属性用来标识备用服务器,正常情况下,用户不会再次访问备用服务,除非当前服务器繁忙/当前服务器宕机,才有可能访问备用服务器
    max_fails=1:设定最大的失败次数
    fail_timeout=60s:设定失败的超时时间(周期时间)

    如果 Nginx请求达到了最大的失败次数的服务器,则在规定的时间内,不会再把请求发给该 tomcat服务器,直到下一个周期

    5.Nginx配置文件 nginx.conf

    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    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
        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;
        #    }
        #}
    
        #配置图片服务器
        server {
            #配置监听端口,一般条件下都是80端口
            listen    80; 
            #配置访问域名
            server_name image.jt.com;
    
            location / {
                # root代表映射文件目录
                root E:/jt-image;
            }
        }
    
        #配置域名代理
        server {
            listen 80;
            server_name  manage.jt.com;
    
            location / {
                #代理 服务器访问地址
                #proxy_pass http://localhost:8091;
                proxy_pass http://jtWindows;
            }
        }
    
        #构建tomcat服务器集群
        # upstream 关键字,定义集群
        #规则: 
        #1.轮询策略(默认):按配置顺序依次访问服务器  
        #2.权重策略:是按设置的比例(使用 weight 设置)进行访问服务器
        #3.IPHash(优先级最高):使用 hash算法把(ip与端口号)得出的哈希码值后,进行求余(如配置三台服务器就是 %3)与服务进行匹配访问
        # down:该属性表示当前服务器不参与负载(可能是宕机)
        # backup:该属性用来标识备用服务器,正常情况下,用户不会再次访问备用服务,除非当前服务器繁忙/当前服务器宕机,才有可能访问备用服务器
        # max_fails=1 :设定最大的失败次数
        # fail_timeout=60s :设定失败的超时时间(周期时间)
        # 如果 Nginx请求达到了最大的失败次数的服务器,则在规定的时间内,不会再把请求发给该 tomcat服务器,直到下一个周期
        upstream jtWindows {
            ip_hash;
            #server localhost:8081 weight=6 down;
            #server localhost:8083 weight=1 backup;
            server localhost:8081 max_fails=1 fail_timeout=60s;
            server localhost:8082 max_fails=1 fail_timeout=60s;
            server localhost:8083 max_fails=1 fail_timeout=60s;
        }
    
        #编辑nginx配置文件必须在协议内部完成
    }
    

    四.tomcat集群搭建流程图

    image.png

    五.动态获取tomcat端口号

    package com.jt.controller;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    public class PortController {
        //动态获取当前端口号信息
     @Value("${server.port}")
        private Integer port;
     @RequestMapping("/port")
        public String getPort(){
            return "当前端口号:"+port;
     }
    }
    

    六.Nginx实现tomcat服务器高可用

    高可用HA (High Availability):当服务器发生故障时,无需人为的干预,可以自动化的实现故障的迁移。
    说明:当服务器宕机,如果由人工来完成,效率较低,可以通过程序自动切换来完成。

    #配置域名代理
        server {
            listen 80;
            server_name  manage.jt.com;
    
            location / {
                #代理 服务器访问地址
                #proxy_pass http://localhost:8091;
                proxy_pass  http://jtWindows;
            }
        }
    
        # max_fails=1 :设定最大的失败次数
        # fail_timeout=60s :设定失败的超时时间(周期时间)
        # 如果 Nginx请求达到了最大的失败次数的服务器,则在规定的时间内,不会再把请求发给该 tomcat服务器,直到下一个周期
        upstream jtWindows {
        
            server localhost:8081 max_fails=1 fail_timeout=60s;
            server localhost:8082 max_fails=1 fail_timeout=60s;
            server localhost:8083 max_fails=1 fail_timeout=60s;
        }

    JayX
    4 声望0 粉丝

    « 上一篇
    Bug集合
    下一篇 »
    Linux基础命令