运维服务端

Nginx学习笔记

2020-07-11  本文已影响0人  dev_winner

docker search nginx
docker pull nginx
docker images nginx
docker run -d --name mynginx -p 80:80 nginx
docker ps
docker exec -it mynginx /bin/bash

全局块:从首行到events块之间的内容,主要设置一些影响 nginx 服务器整体运行的配置指令,包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
events块:主要影响 Nginx 服务器与用户的网络连接。常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
http块:包括http全局块server块。每个http 块可以包括多个server 块,而每个server 块就相当于一个虚拟主机
(3.1)、http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
(3.2)、server块:这块和虚拟主机有密切关系,从用户的角度看,虚拟主机相当于一台独立的硬件主机,该技术的产生是为了节省互联网服务器硬件成本。每个server块分为全局server块和多个location块
(3.2.1)、全局server块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
(3.2.2)、location块:一个server块可以配置多个location块。基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

# ================ 1、全局块开始 ==================
#user  nobody;
# worker_processes 值越大,可以支持的并发处理量也就越多,但会受到硬件、软件等设备的制约
worker_processes  1; 

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

# ================ 1、全局块结束 ==================

# ================ 2、events 块开始 ===============

events {
    # 每个 work process 支持的最大连接数为 1024
    worker_connections 1024;
}

# ================ 2、events 块结束 ===============

# ================ 3、http 块开始 =================

http {
    # ================ 3.1、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;

    # ================ 3.1、http 全局块结束 =================

    # ================ 3.2、server 块开始 ===================

    # 负载均衡服务列表配置,服务名为 myserver,weight 为权重
    upstream myserver {
        server 192.168.211.143:8080;
        server 192.168.211.143:8081;
    }
    
    server {
        # ================ 3.2.1、server 全局块开始 ===================
        listen       80;
        server_name  192.168.211.143;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;

        # ================ 3.2.2、server 全局块结束 ===================

        # ================ 3.2.3、location 块开始 =====================

        location / {
            proxy_pass  http://myserver;
            root   html;
            index  index.html index.htm;
        }

        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;
        #}

        # ================ 3.2.3、location 块结束 =====================
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    # 配置虚拟主机访问映射规则
    server {
        listen       9001;
        server_name  192.168.211.143;

        location ~ /edu/ {
            proxy_pass http://127.0.0.1:8080;
        }
        location ~ /vod/ { 
            proxy_pass http://127.0.0.1:8081;
        }
    }

    # 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;
    #    }
    #}
    # ================ 3.2、server 块结束 ===================
}
# ================ 3、http 块结束 =================
location [ = | ~ | ~* | ^~] uri {

}

1、=:用于不含正则表达式的URI前,要求请求字符串与URI严格匹配,若匹配成功,则停止继续向下搜索并立即处理该请求。
2、~:用于表示URI包含正则表达式,且区分大小写
3、~*:用于表示URI包含正则表达式,且不区分大小写
4、^~:用于不含正则表达式的URI前,要求Nginx服务器找到标识URI和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。

1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,若后端服务器宕机,则会自动剔除。
2、权重weight):代表权重默认为1,权重越高被分配的客户端越多。

# 负载均衡服务列表配置,服务名为 myserver,weight 为权重
upstream myserver {
    server 192.168.211.143:8080 weight=5;
    server 192.168.211.143:8081 weight=10;
}

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

upstream myserver {
    ip_hash;
    server 192.168.211.143:8080;
    server 192.168.211.143:8081;
}

通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体expires定义:给一个资源设定一个过期时间,无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。若是经常更新的文件,则不建议使用expires来缓存。假设设置某个url的expires值为3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,就不会从服务器抓取,返回状态码304;若有修改,则直接从服务器重新下载,返回状态码200。(304状态码:当你发出一个GET请求时服务器会从缓存中调用你要访问的内容,这个时候服务器就可以判断这个页面是不是更新过了,如果未更新过那么它会给你返回一个304状态码。)

# 访问 url:ip/www/index.html
location /www/ {
    root /data/;
    index  index.html index.htm;
}
# 访问 url:ip/image/01.jpg
location /image/ {
    root /data/;
    # 列出当前文件夹下的所有文件及文件夹
    autoindex on;
}
动静分离1 动静分离2.1 动静分离2.2 Nginx高可用配置 keepalived安装成功 keepalived安装成功后生成目录及其配置文件
# 全局定义
global_defs { 
    # 设置报警邮件地址,可以设置多个,每行一个,需要开启 sendmail服务
    notification_email {
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc
    }
    # 设置邮件的发送地址
    notification_email_from Alexandre.Cassen@firewall.loc
    # 设置 SMTP Server 地址
    smtp_ server 192.168.17.129
    # 设置 SMTP Server 超时时间
    smtp_connect_timeout 30
    # 表示运行 keeplived 服务器的一个标识,发邮件时显示大邮件主题中的信息
    # LVS_DEVEL这字段在/etc/hosts文件中设置;通过它访问到主机:127.0.0.1 LVS_DEVEL
    router_id LVS_DEVEL 
}

vrrp_script chk_http_ port {
    script "/usr/local/src/nginx_check.sh"
    interval 2   # 检测脚本执行的间隔:2s
    weight 2  # 权重:若这个脚本检测为真,则服务器权重+2
}

vrrp_instance VI_1 {
    state BACKUP   # 备份服务器上将 MASTER 改为 BACKUP
    interface ens32 # 网卡名称,通过 ifconfig 命令查看
    virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
    priority 100   # 主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1    # 每隔1s发送一次心跳
    authentication {    # 校验方式:类型是密码,密码1111
        auth type PASS
        auth pass 1111
    }
    virtual_ipaddress { # 虛拟ip
        192.168.211.50 # VRRP H虛拟ip地址
    }
}
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];
    then /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];
        then killall keepalived
    fi
fi
访问虚拟ip:192.168.211.50 查看虚拟ip相关信息
查看nginx进程状态 master与worker的关系 worker抢占式工作原理
# 设置worker数量
worker.processes 4 

# work绑定cpu(4work绑定4cpu)
worker_cpu_affinity 0001 0010 0100 1000

# work绑定cpu (4work绑定8cpu中的4个)
worker_cpu_affinity 0000001 00000010 00000100 00001000

a、普通的静态访问最大并发数是: worker_connections * worker_processes /2;
b、若是HTTP 作为反向代理,则最大并发数量为worker_connections * worker_processes/4。

上一篇下一篇

猜你喜欢

热点阅读