• 常见服务知识点罗列--nginx


    1、高级用法/配置:

    (1)upstream用法:

    #代理的后端服务器
    upstream interface{ 
        server 10.69.105.164:7070 max fails=3 fail timeout=30s;
    	server 10.69.105.165:7070 max fails=3 fail timeout=30s;
    	keepalive 256;
    	}
    
    server{
      listen 80;
      server_name 10.69.105.43;
      
      location /crm-service-Interface {
        proxy_pass http://interface: #关联upstream
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    (2)防盗链

    location /images { 
    	root /data/nginx/html/pc; 
    	index index.html; 
    	valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/ ~\.google\.; 
    	if ($invalid_referer) { 
    		return 403; 
    	}
    }
    	#定义防盗链:
    location ^~ /images { 
    	root /data/nginx; 
    	index index.html; 
    	valid_referers none blocked server_names *.a.com www.a.* api.online.test/v1/hostlist ~\.google\. ~\.baidu\.; #定义有效的referer 
    	if ($invalid_referer) { #假如是使用其他的无效的referer访问: 
    		return 403; #返回状态码403 
    	} 
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    (3)重定向

    location / { 
    	root /data/nginx/html/pc; 
    	index index.html; 
    	if ($scheme = http ){ #未加条件判断,会导致死循环
    	rewrite / https:a.com permanent; #永久重定向
    	#rewrite / https:a.com redirect; #临时重定向
    	} 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    2、负载均衡方式/调度算法:

    参考文章:
    https://www.php.cn/nginx/453114.html
    https://www.jianshu.com/p/72d7c806e95e
    (1)轮询;
    默认模式,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    适用场景:适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
    如何配置:把服务器列表加入到upstream模块中即可。
    (2)ip_hash;
    同一个IP客户端固定访问一个后端服务器,可以解决session问题
    (3)url_hash;
    相同的url固定转发到同一个后端服务器处理
    (4)fair
    响应时间短的后端服务器优先分配。本身不支持,必须加载Nginx的 upstream_fair模块
    (5)weight
    (6)least_conn

    3、状态码排查思路(404/502/504/)

    参考文章:
    https://blog.csdn.net/yts1115084429/article/details/100877372
    200:成功

    301:永久重定向
    302:临时重定向

    400:(错误请求) 服务器不理解请求的语法。
    401:(未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
    402: 该状态码是为了将来可能的需求而预留的。
    403:(禁止) 服务器拒绝请求。
    404:(未找到) 服务器找不到请求的网页。
    405:(方法禁用) 禁用请求中指定的方法。
    406:(不接受) 无法使用请求的内容特性响应请求的网页。
    407:(需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
    408:(请求超时) 服务器等候请求时发生超时。
    409:(冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
    410:(已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
    411:(需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
    412:(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
    413:(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
    414:(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
    415:(不支持的媒体类型) 请求的格式不受请求页面的支持。
    416:(请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
    417:(未满足期望值) 服务器未满足"期望"请求标头字段的要求。

    500:(服务器内部错误) 服务器遇到错误,无法完成请求。
    501:(尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
    502:(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
    503:(服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
    504:(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
    505:(HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

    4、优化
    5、日志中变量
    log_format access_json '{"timestamp":"$time_iso8601",' 
    '"host":"$server_addr",' 
    '"clientip":"$remote_addr",' 
    '"size":$body_bytes_sent,' 
    '"responsetime":$request_time,' 
    '"upstreamtime":"$upstream_response_time",' 
    '"upstreamhost":"$upstream_addr",' 
    '"http_host":"$host",' '"uri":"$uri",' 
    '"domain":"$host",' 
    '"xff":"$http_x_forwarded_for",' 
    '"referer":"$http_referer",' 
    '"tcp_xff":"$proxy_protocol_addr",' 
    '"http_user_agent":"$http_user_agent",' 
    '"status":"$status"}'; 
    access_log /apps/nginx/logs/access_json.log access_json; 
    
    #重启Nginx并访问测试日志格式 
    {"timestamp":"2019-02-22T08:55:32+08:00",
    "host":"192.168.7.102",
    "clientip":"192.168.0.1",
    "size":162,
    "respo nsetime":0.000,
    "upstreamtime":"-",
    "upstreamhost":"-",
    "http_host":"www.a.net",
    "uri":"/favicon.ico",
    "domain":"www.a.net",
    "xff": "-",
    "referer":"-",
    "tcp_xff":"",
    "http_user_agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0",
    "status":"404"}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    6、nginx配置的主要模块

    全局、event、http、stream
    http第三方模块:gzip、ssl、rewrite、referer、proxy、upstream、

  • 相关阅读:
    【SQL性能优化】从磁盘I/O的角度理解SQL查询的成本(优)
    python学习之【包和内置模块】
    Flutter快学快用开篇词 通往大前端的一把关键钥匙 Flutter
    背包算法(Knapsack problem)
    Redis基础学习
    CameraMetadata 知识学习整理
    【组件专题】初识COM组件
    MIPI协议介绍-CPHY
    【Locust】模拟多用户并发与实战
    【kylin】【ubuntu】搭建本地源
  • 原文地址:https://blog.csdn.net/weixin_44515412/article/details/125535334