浅谈nginx(On nginx)

nginx的配置文件学习

主要的几个代码块

http{ } #里面定义了多个代码,是nginx的核心功能配置点

server{ } #虚拟主机代码块,定义了网站的目录地址,以及首页文件名字,监听的端口,等等功能

location { } #域名匹配代码块

#user  nobody;
#  定义nginx的工作进程数,以cpu核数 为准
worker_processes  5;
# 想用哪个用能,直接打开注释,或者写进来即可
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
# pid文件的作用是,pid是用于启停进程的号码
# ps -ef去获取nginx的进程id
# 把pid写入到 此 nginx.pid文件中,
pid        logs/nginx.pid;


events {
    worker_connections  1024;
}
# 这个http区域,是nginx的核心功能区域
http {
    include       mime.types;
    default_type  application/octet-stream;
    #打开此nginx的访问日志功能,即可查看日志
    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;
    #nginx开启静态资源压缩,比如nginx返回磁盘的html文件特别大,里面包含了诸多的js css,图片引用
    #  一个html文件 达到4m大小
    #  传输图片 等等都是高兴的 1080p图片
    #  打开此功能,能够极大的提升网站访问,以及静态资源压缩
    gzip  on;

    # 提供静态资源缓存功能,第一次访问过网页之后,nginx能够让图片js等静态资源,缓存到浏览器上
    # 浏览器下次访问网站,速度就几乎是秒开了
    # 想要用这些功能,只需要在nginx里打开某些配置即可,作者都已经写好了该功能
    #
    #这里的server区域配置,就是虚拟主机的核心配置
    # nginx支持编写多个server{} 区域块,以达到多虚拟主机,多个站点的功能
    #   server{} 区域块,可以存在多个,且默认是自上而下去加载,去匹配的
    #   目前这里是第一个server {} 区域块,端口是85
    server {
        # 定义该网站的端口
        listen       85;
        #填写域名,没有就默认即可
        server_name  localhost;
        #更改nginx的编码支持
        charset utf-8;
        # 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件
        error_page  404  /40x.html;
        #access_log  logs/host.access.log  main;
        
        
       #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
        # nginx的域名匹配,所有的请求,都会进入到这里
        # 例如  192.168.178.140:85/lubenwei.jpg
        #    192.168.178.140:85/menggededianhua.txt
        location / {
            #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改
            #  当用户访问  192.168.178.140:85的时候,就返回该目录的资料
            root   /s25python/;
           # index参数,用于定义nginx的首页文件名字  ,只要在/s25nginx目录下存在index.html文件即可
            index  index.html index.htm;
        }

    }

#这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{}
# 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号
# 这里是第二个虚拟主机的配置了
server  {
listen 89;
server_name  _;
#nginx的域名匹配
# 当用户访问 192.168.178.140:89的时候,返回该目录的内容
location  / {
        root   /s25linux/;
        index  index.html;

}

}
}

nginx 反向代理

    #   第一个虚拟主机的配置,作用是反向代理了
    #
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        error_page  404  /40x.html;
        # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
        # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
        location / {
        #当请求发送给  192.168.178.140:80的时候
        #直接通过如下的参数,转发给90端口
        proxy_pass  http://192.168.178.140:90;
        }

    }
#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server  {
listen 90;
server_name  _;
#当请求来到   192.168.178.140:90的时候,就返回/s25proxy目录下的index.html
location  / {
        root   /s25proxy/;
        index  index.html;
}

}

通过proxy_pass反向代理给某个端口

nginx负载均衡

# 用upstream关键词定义负载均衡池,写入资源服务器的地址# 负载均衡的算法,默认是轮询机制,一台服务器处理一次

1.默认是轮询机制,每台服务器处理一次2.加权轮询,修改nginx.conf如下,给与机器不同的权重

upstream s25real_server {
server 192.168.178.140:90 weight=4;
server 192.168.178.140:95 weight=1;
}


server {
listen 80;
server_name localhost;
charset utf-8;
error_page 404 /40x.html;
# 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
# 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
location / {
#当请求发送给 192.168.178.140:80的时候
#直接通过如下的参数,s25real_server里面两个端口
proxy_pass http://s25real_server;
}

}



#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server {
listen 90;
server_name _;
#当请求来到 192.168.178.140:90的时候,就返回/s25proxy目录下的index.html
location / {
root /s25lol/;
index index.html;
}

}

 

 

#第三个server{}虚拟主机,作用是 提供资源服务器的内容的
server {
listen 95;
server_name _;
location / {
root /s25dnf/;
index index.html;

}
}

nginx 负载均衡算法

  • 1:轮询(默认)每个请求按照时间顺序逐一分配到下游的服务节点,如果其中某一节点故障,nginx 会自动剔除故障系统使用户使用不受影响。
  • 2.权重(weight)在配置文件中对下游的服务节点指定权重值 weight, weight 值越大则被分配的评率越高,一般这种负载均衡,用于节点的配置情况不一样,有的可能配置高,有的配置低。
  • 3.ip_hash对每个请求,针对 ip 进行 hash, 然后分配到后台节点,这样一来,同一 ip 会被固定分配到下游固定服务上。它能够暂时的解决集群环境中容器之间 session 共享的问题,但是不是解决的根本之道,只是权宜之策,我们试想,如果访问的好好的,家里的路由器被重启了,或者运营商分配给你的 ip 地址改变了,那么你再次访问的时候,新的 ip 就可能被分配到新的服务上,之前的 session 也就失效了。
  • 4.least_conn (最少连接调度算法)最少连接调度算法,对下游服务中连接情况,优先选择连接数最少的服务分配。
  • 5.least_time (最小响应时间)最小响应时间, 计算节点平均响应时间,然后取响应最快的那个,分配更高权重。
————————

Nginx configuration file learning

Main code blocks

Http {} # defines multiple codes, which are the core function configuration points of nginx

Server {} # virtual host code block, which defines the directory address of the website, the name of the home page file, the listening port, and other functions

Location {} # domain name matching code block

#user  nobody;
#  定义nginx的工作进程数,以cpu核数 为准
worker_processes  5;
# 想用哪个用能,直接打开注释,或者写进来即可
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
# pid文件的作用是,pid是用于启停进程的号码
# ps -ef去获取nginx的进程id
# 把pid写入到 此 nginx.pid文件中,
pid        logs/nginx.pid;


events {
    worker_connections  1024;
}
# 这个http区域,是nginx的核心功能区域
http {
    include       mime.types;
    default_type  application/octet-stream;
    #打开此nginx的访问日志功能,即可查看日志
    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;
    #nginx开启静态资源压缩,比如nginx返回磁盘的html文件特别大,里面包含了诸多的js css,图片引用
    #  一个html文件 达到4m大小
    #  传输图片 等等都是高兴的 1080p图片
    #  打开此功能,能够极大的提升网站访问,以及静态资源压缩
    gzip  on;

    # 提供静态资源缓存功能,第一次访问过网页之后,nginx能够让图片js等静态资源,缓存到浏览器上
    # 浏览器下次访问网站,速度就几乎是秒开了
    # 想要用这些功能,只需要在nginx里打开某些配置即可,作者都已经写好了该功能
    #
    #这里的server区域配置,就是虚拟主机的核心配置
    # nginx支持编写多个server{} 区域块,以达到多虚拟主机,多个站点的功能
    #   server{} 区域块,可以存在多个,且默认是自上而下去加载,去匹配的
    #   目前这里是第一个server {} 区域块,端口是85
    server {
        # 定义该网站的端口
        listen       85;
        #填写域名,没有就默认即可
        server_name  localhost;
        #更改nginx的编码支持
        charset utf-8;
        # 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件
        error_page  404  /40x.html;
        #access_log  logs/host.access.log  main;
        
        
       #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
        # nginx的域名匹配,所有的请求,都会进入到这里
        # 例如  192.168.178.140:85/lubenwei.jpg
        #    192.168.178.140:85/menggededianhua.txt
        location / {
            #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改
            #  当用户访问  192.168.178.140:85的时候,就返回该目录的资料
            root   /s25python/;
           # index参数,用于定义nginx的首页文件名字  ,只要在/s25nginx目录下存在index.html文件即可
            index  index.html index.htm;
        }

    }

#这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{}
# 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号
# 这里是第二个虚拟主机的配置了
server  {
listen 89;
server_name  _;
#nginx的域名匹配
# 当用户访问 192.168.178.140:89的时候,返回该目录的内容
location  / {
        root   /s25linux/;
        index  index.html;

}

}
}

nginx 反向代理

    #   第一个虚拟主机的配置,作用是反向代理了
    #
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        error_page  404  /40x.html;
        # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
        # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
        location / {
        #当请求发送给  192.168.178.140:80的时候
        #直接通过如下的参数,转发给90端口
        proxy_pass  http://192.168.178.140:90;
        }

    }
#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server  {
listen 90;
server_name  _;
#当请求来到   192.168.178.140:90的时候,就返回/s25proxy目录下的index.html
location  / {
        root   /s25proxy/;
        index  index.html;
}

}

Through proxy_ Pass reverse proxy to a port

nginx负载均衡

#Define the load balancing pool with the upstream keyword and write the address # load balancing algorithm of the resource server. The default is the polling mechanism, and one server processes it once

1. The default is polling mechanism, which is processed once by each server. 2 Weighted polling, modify nginx Conf is as follows, giving different weights to the machine

upstream s25real_server {
server 192.168.178.140:90 weight=4;
server 192.168.178.140:95 weight=1;
}


server {
listen 80;
server_name localhost;
charset utf-8;
error_page 404 /40x.html;
# 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
# 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
location / {
#当请求发送给 192.168.178.140:80的时候
#直接通过如下的参数,s25real_server里面两个端口
proxy_pass http://s25real_server;
}

}



#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server {
listen 90;
server_name _;
#当请求来到 192.168.178.140:90的时候,就返回/s25proxy目录下的index.html
location / {
root /s25lol/;
index index.html;
}

}

 

 

#第三个server{}虚拟主机,作用是 提供资源服务器的内容的
server {
listen 95;
server_name _;
location / {
root /s25dnf/;
index index.html;

}
}

Nginx load balancing algorithm

  • 1: Polling (default) each request is allocated to the downstream service nodes one by one in chronological order. If one of the nodes fails, nginx will automatically eliminate the failure, and the system will not affect the user’s use.
  • 2. Weight specifies the weight value of the downstream service node in the configuration file. The larger the weight value is, the higher the evaluation rate is allocated. Generally, this kind of load balancing is used for node configuration. Some may have high configuration and some may have low configuration.
  • 3.ip_ Hash for each request, hash the IP, and then assign it to the background node. In this way, the same IP will be assigned to the downstream fixed service. It can temporarily solve the problem of session sharing between containers in the cluster environment, but it is not the fundamental solution, but an expedient measure. Let’s imagine that if the access is good, the router at home is restarted, or the IP address assigned to you by the operator is changed, when you visit again, the new IP may be assigned to the new service, and the previous session will fail.
  • 4.least_ Conn (least Connection Scheduling Algorithm) least connection scheduling algorithm. For the connection of downstream services, the service allocation with the least number of connections is preferred.
  • 5.least_ Time (minimum response time) minimum response time, calculate the average response time of the node, and then take the one with the fastest response and assign a higher weight.