nginx从理论到实践超详细笔记总结(下)

简介: nginx从理论到实践超详细笔记总结(下)

代理访问机制


nginx还提供了一个非常灵活的代理访问机制,供我们通过代理的方式来进行访问location


通过nginx配置完全匹配代理进行页面跳转:


server {
    listen     80;
    server_name  www.idea.com  *.idea.com  idea.*;
    root /usr/local/www;  
    location /static {
      alias /usr/local/static/;
    }
    location ~* \.(gif|png|jpg|css|js) {
      alias /usr/local/static/;
    }
    location  =/idea-serach {
      proxy_pass  http://www.baidu.com
    }
    location / {
      root  /usr/local/www/;
      index idea.html;
    }
  }
复制代码


通过proxy_pass配置来提供代理的请求转发,当我们访问http://www.idea.com/idea-serach的时候,就会匹配到访问百度的页面了。


小结


nginx对于访问的常见配置支持以下几种:


1.通过全路径访问location

2.通过关键字static匹配来访问location

3.通过正则表达式来访问location

4.通过反向代理进行访问location

\

防盗链匹配


设置某些链接只允许在固定的网站站点进行访问,防止某些特殊的域名进行ip访问之后盗取本网站的资源文件,因此可以设置这个防盗链的功能。具体配置如下:


server {
    listen     80;
    server_name  www.idea.com  *.idea.com  idea.*;
    root /usr/local/www/; 
    location /static {
      alias /usr/local/static/;
    }
    # 防盗链配置
    location ~* \.(gif|png|jpg|css|js) {
      valid_referers none blocked *.idea.com;
      if ($invalid_referer) {
        return 403;
      }
      root /usr/local/static/;
    }
    location =/idea-serach {
      proxy_pass http://www.baidu.com;
    }
    location / {
      root  /usr/local/www/;
}
}
复制代码


\

网站黑名单


黑名单的配置比较简单,只需要先创建好黑名单文件,然后在http块里面引入就好了


# 创建黑名单文件
echo 'deny 192.168.0.132;' >> balck.ip
#http 配置块中引入 黑名单文件
include       black.ip;
复制代码


记得配置成功之后要让nginx reload一下,同时请求的时候查看是否是203,如果是的话说明是缓存请求。

\

nginx的日志配置


当我们需要对于客户端发送的数据进行一些详细信息的查看时候,需要对nginx进行日志的记录,相应的可选参数有以下几点:


log_format格式变量:
    $remote_addr  #记录访问网站的客户端地址
    $remote_user  #远程客户端用户名
    $time_local  #记录访问时间与时区
    $request  #用户的http请求起始行信息
    $status  #http状态码,记录请求返回的状态码,例如:200、301、404等
    $body_bytes_sent  #服务器发送给客户端的响应body字节数
    $http_referer  #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。
    $http_user_agent  #记录客户端访问信息,例如:浏览器、手机客户端等
    $http_x_forwarded_for  #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置
将日志配置放在http块里面即可。
复制代码


通常我们会将日志的配置放置于http模块当中,例如下边的这组案例:


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;
    keepalive_timeout  65;
    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;
        } 
    }
    }
复制代码


\

ngixn里面的代理配置


\

正向代理


网络异常,图片无法展示
|


客户机和服务器之间加入一层proxy代理机器,当发生请求的时候,由代理服务器去请求server端。最常见的正向代理案例有:vpn,局域网里面的上网客户端工具等。


举个栗子来讲:


当我们需要通过路径匹配到 $host: $port /baidu.html的时候,被代理请求百度页面,可以进行以下的配置:


location =/baidu.html {
           proxy_pass http://www.baidu.com;
  }
复制代码


反向代理


当客户端请求服务端的时候,实际上在服务端的接入层有一个代理机器进行请求的转发,而这一层请求的转发相对于客户端而言是透明的。


网络异常,图片无法展示
|


反向代理请求内部的服务器,虽然配置相似,但是功能不同,配置案例如下:


location =/baidu.html {
           proxy_pass http:/127.0.0.1:8088;
  }
复制代码


代理相关参数


proxy_pass           # 代理服务
proxy_redirect off;   # 是否允许重定向
proxy_set_header Host $host; # 传 header 参数至后端服务
proxy_set_header X-Forwarded-For $remote_addr; # 设置request header 即客户端IP 地址
proxy_connect_timeout 90; # 连接代理服务超时时间
proxy_send_timeout 90; # 请求发送最大时间
proxy_read_timeout 90;  # 读取最大时间
proxy_buffer_size 4k; 
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; 
proxy_temp_file_write_size 64k;
复制代码


\

ngixn里面的负载均衡


\

nginx里面有个叫做upstream的模块,专门用于配置负载均衡的内容,upstream里面提供有以下的相关参数:


service 反向服务地址 加端口

weight 权重

max_fails 失败多少次 认为主机已挂掉则,踢出

fail_timeout 移除server之后重新请求的时间 当服务挂了之后,这段时间内重新连接

backup 备用服务 (当服务全部都挂了,那么就会请求这里的服务)

max_conns 允许最大连接数

slow_start 当节点恢复,不立即加入,而是等待 slow_start 后加入服务对列。


相应参数的具体配置如下:


upstream backend {
       server 192.168.43.191:8080 weight=5 fail_timeout=10s;
       server 192.168.43.191:8089 weight=5 fail_timeout=10s;
    }
复制代码


ngixn里面默认支持的负载均衡策略是轮询加权重的方式,除此之外,nginx自身还支持额外的多种负载均衡策略:


ll+weight:轮询加权重 (默认)


容易出现失重的情况,例如说某一台机器的访问过慢,容易导致请求堆积。


ip_hash : 基于Hash 计算 ,常用于保持session 一至性


基于hash计算的时候,可以根据ip进行hash计算请求到指定的服务器。

(通常session一致性在分布式中最好的处理手段是将session存储在第三方的存储中心)

首先对ip进行hash计算之后,将该值和服务器个数进行取模运算。


url_hash: 静态资源缓存,节约存储,加快速度


可以根据图片的url请求到指定的服务器,比较好理解。


least_conn : 最小链接数


每次请求都只会请求到最少客户端连接数的那台服务器去。


least_time :最小的响应时间


计算节点平均响应时间,然后取响应最快的那个,分配权重更高


配置案例


通过使用ip进行哈希计算的方式来请求后端服务器


upstream backend {
       ip_hash;
       server 192.168.43.191:8080 weight=1;
       server 192.168.43.191:8089 weight=8 fail_timeout=10s;
}
  location / {
            #root   html;
            index  index.html index.htm;
          proxy_pass http://backend;
   }
复制代码


当然nginx除了这些常用功能以外,还提供有非常丰富的其他功能配置,具体配置可以参考nginx的官方文档配置信息http://nginx.org/en/docs/

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
缓存 负载均衡 应用服务中间件
高性能网络编程技术 Nginx 的概念与实践
Nginx 是一款高性能、轻量级的Web服务器和反向代理服务器,它在网络编程技术领域中被广泛应用。本文将详细介绍Nginx的概念和实践,包括其核心原理、功能特点、优势和应用场景等方面。同时,还将深入探讨如何使用Nginx进行高性能网络编程,结合实际案例进行分析。
|
存储 缓存 负载均衡
Nginx入门笔记
Nginx入门笔记
690 0
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
Java 应用服务中间件 PHP
[笔记]Nginx使用之作为图片服务器
[笔记]Nginx使用之作为图片服务器
851 0
|
JavaScript Java 应用服务中间件
|
网络协议 应用服务中间件 nginx
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
这篇文章讨论了在使用nginx-rtmp-module进行RTMP推流时遇到的“Server error: Already publishing”错误,分析了错误原因,并提供了详细的解决办法,包括修改nginx配置文件和终止异常的TCP连接。
853 0
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
|
负载均衡 应用服务中间件 API
深入理解 Nginx 与 Kong 的配置与实践
在微服务架构中,Nginx 用于配置负载均衡,如示例所示,定义上游`pay-service`包含不同权重的服务节点。Kong API 网关则通过service和route进行服务管理和路由,与Nginx的upstream和location类似。通过Kong的命令行接口,可以创建upstream、target、service和route,实现对后端服务的负载均衡和请求管理。Nginx和Kong协同工作,提供高效、灵活的API管理和流量控制。
943 1
深入理解 Nginx 与 Kong 的配置与实践
|
负载均衡 网络协议 Unix
Nginx负载均衡与故障转移实践
Nginx通过ngx_http_upstream_module模块实现负载均衡与故障转移,适用于多服务器环境。利用`upstream`与`server`指令定义后端服务器组,通过`proxy_pass`将请求代理至这些服务器,实现请求分发。Nginx还提供了多种负载均衡策略,如轮询、权重分配、IP哈希等,并支持自定义故障转移逻辑,确保系统稳定性和高可用性。示例配置展示了如何定义负载均衡设备及状态,并应用到具体server配置中。
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
385 2
|
应用服务中间件 Linux nginx
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
《FFmpeg开发实战》书中介绍了如何使用FFmpeg向网络推流,简单流媒体服务器MediaMTX不适用于复杂业务。nginx-rtmp是Nginx的RTMP模块,提供基本流媒体服务。要在Linux上集成rtmp,需从官方下载nginx和nginx-rtmp-module源码,解压后在nginx目录配置并添加rtmp模块,编译安装。配置nginx.conf启用RTMP服务,监听1935端口。使用ffmpeg推流测试,如能通过VLC播放,表明nginx-rtmp运行正常。更多详情见书本。
992 0
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流