nginx集群搭建

Posted LY-留言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx集群搭建相关的知识,希望对你有一定的参考价值。

一、nginx搭建集群入门

https://www.cnblogs.com/XJJD/p/10308840.html

二、Nginx服务器之负载均衡策略(6种)

https://www.cnblogs.com/1214804270hacker/p/9325150.html

三、Nginx与Tomcat实现请求动态数据与请求静态资源的分离

https://www.cnblogs.com/1214804270hacker/p/9299462.html

四、示例

1、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 {
    #accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    #multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024; #nginx默认连接数
}


http {
    include       mime.types; #文件扩展名与文件类型映射表
    default_type  application/octet-stream;#默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    

    #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;
    #access_log log/access.log myFormat;  #combined为日志格式的默认值
    #sendfile        on;#允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    #sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    #keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;#连接超时时间,默认为75s,可以在http,server,location块。
    
    

    #gzip  on;
    #动态服务器组
    #1、轮询
    #fail_timeout    与max_fails结合使用。
    #max_fails    设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,
    #fail_time    服务器会被认为停机的时间长度,默认为10s。
    #backup    标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
    #down    标记服务器永久停机了。
    upstream liuyan{
        server 127.0.0.1:8001; 
        server 127.0.0.1:8002;
        server 127.0.0.1:8003 backup;#backup热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....     
        ip_hash;
        #可以配置无限多个服务器.....
        
    }
    
    #2、weight
    #upstream liuyan{
        #ip_hash;  #然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
        #server 127.0.0.1:8081 weight=1;#weight权重,数字越大被使用的几率越高。
        #server 127.0.0.1:8082 weight=1;
        #可以配置无限多个服务器.....
        
    #}
     #静态资源服务器
    upstream static{
       server 127.0.0.1:8056;
       #可以配置无限多个静态资源服务器.....
    }
    server {
        listen       8000;#监听端口
        server_name  localhost; #监听地址
        
        #添加头部信息
        #index vv.txt;  #设置默认页
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            proxy_pass http://liuyan/; #请求转向liuyan 定义的服务器列表
            #添加头部信息
            #proxy_set_header X-Forwarded-Host $host;
            #proxy_set_header X-Forwarded-Server $host;
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #deny 127.0.0.1;  #拒绝的ip
            #allow 172.18.5.54; #允许的ip  
        }
        #拦截静态资源
       location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$ {
           proxy_pass http://static;
       }

       location ~ .*\\.(js|css)?$ {
          proxy_pass http://static;
       }

       location ~ .*\\.(eot|svg|ttf|woff|woff2)$ {
           proxy_pass http://static;
       }
       
        #添加拦截路径和代理地址
        #location /api/ {              
              # proxy_pass http://localhost:8001/;  #注意:使用代理地址时末尾记得加上斜杠"/"。      
        #}

       


        #error_page  404              /404.html;
        #error_page 404 https://www.baidu.com; #如果未找到此服务器会跳转到错误页,如百度页面
        # 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;
    #    }
    #}

}

2、部署服务器静态资源tomcat容器

容器中放入要使用静态资源,这里就不演示了。

3、部署服务器动态数据tomcat容器

demo结构目录

 

 

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>jar</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>jar</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

页面:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>tomcat</title>
</head>
<body>
<a th:href="@{/msg}">点击</a>
<h1 th:text="${msg}"></h1>
<h1>静态资源8001</h1>
<img src="/m.jpg"/>
</body>
</html>
Controller:
package com.example.jar.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class DemoController {

    @GetMapping("/index")
    public String index(){
        System.out.println("==========》请求路径成功!");
        return "indexPng";
    }
    @GetMapping("/msg")
    public String msg(Model model){
        model.addAttribute("msg","欢迎访问8001服务器");
        return "indexPng";
    }

}

application.properties:

server.port=8002

4、演示demo负载均衡(轮询策略)

 

 

 

 

 

 5、demo静态分离

 

 

 

链接:https://pan.baidu.com/s/1cneWTovv99pPZoAssaphcg
提取码:3cip

 

以上是关于nginx集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

haproxy+nginx搭建web集群

nginx集群搭建

Nginx 在 Linux 下安装与搭建集群

Nginx + Tomcat搭建集群

Influxdb-v0.11 集群搭建(docker+nginx+influxdb)

Redhat/CentOS7-环境虚拟机简单搭建Nginx+Tomcat负载均衡集群