• Nginx|基础


    NGINX

    Nginx(发音同“engine X”)是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。

    概念

    正向代理

    客户端主动使用代理服务器连接目标服务器

    反向代理

    客户端无感知,目标服务器使用代理,将请求分发,提高服务的并发性能

    三板斧

    1. 反向代理
    2. 负载均衡
    3. 动静分离

    配置

    配置结构

    1. 全局配置块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等
    2. event配置块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等
    3. http配置块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
    4. server配置块:配置虚拟主机的相关参数,一个http中可以有多个server
    5. location配置块:配置请求的路由,以及各种页面的处理情况
    ...              #全局块
    
    events {         #events块
       ...
    }
    
    http      #http块
    {
        ...   #http全局块
        server        #server块
        {
            ...       #server全局块
            location [PATTERN]   #location块
            {
                ...
            }
            location [PATTERN]
            {
                ...
            }
        }
        server
        {
          ...
        }
        ...     #http全局块
    }
    

    location

    配置语法

    1. location [ = | ~ | ~* | ^~ ] uri { ... }
    2. location @name { ... }

    配置注意

    1. location 是在 server 块中配置。
    2. 可以根据不同的 URI 使用不同的配置(location 中配置),来处理不同的请求。
    3. location 是有顺序的,会被第一个匹配的location 处理。

    配置demo

    1. =:精确匹配

      	location = / {
              #规则
          }
          # 则匹配到 `http://www.example.com/` 这种请求。
      
    2. ~:大小写敏感

      	location ~ /Example/ {
      		   #规则
      	}
      	#请求示例
      	#http://www.example.com/Example/  [成功]
      	#http://www.example.com/example/  [失败]
      
    3. ~*:大小写忽略

      	location ~* /Example/ {
      				#规则
      	}
      	# 则会忽略 uri 部分的大小写
      	#http://www.example.com/Example/  [成功]
      	#http://www.example.com/example/  [成功]
      
    4. ^~:只匹配以 uri 开头

      	location ^~ /img/ {
      			#规则
      	}
      	#以 /img/ 开头的请求,都会匹配上
      	#http://www.example.com/img/a.jpg   [成功]
      	#http://www.example.com/img/b.mp4 [成功]
      
    5. @:nginx内部跳转

      	location /img/ {
      		error_page 404 @img_err;
      	}
      
      	location @img_err {
      		# 规则
      	}
      	#以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。
      

    使用示例

    1. 反向代理

      ## Start www.redis.com.cn ##
      server {
      listen 80;
      server_name  www.redis.com.cn;
      access_log  logs/redis.access.log  main;
      error_log  logs/redis.error.log;
      root   html;
      index  index.html index.htm index.php;
      
      ## send request back to apache ##
      location / {
          proxy_pass  http://apachephp;
      
          #Proxy Settings
          proxy_redirect     off;
          proxy_set_header   Host             $host;
          proxy_set_header   X-Real-IP        $remote_addr;
          proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
          proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
          proxy_max_temp_file_size 0;
          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;
      }
      }
      ## End www.redis.com.cn ##
      
    2. 负载均衡

      # 把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上。
      http {
      	upstream myproject {
      		server 127.0.0.1:8000 weight=3;
      		server 127.0.0.1:8001;
      		server 127.0.0.1:8002;
      		server 127.0.0.1:8003;
      	}
      
      	server {
      		listen 80;
      		server_name www.domain.com;
      		location / {
      			proxy_pass http://myproject;
      		}
      	}
      }
      
    3. 动静分离

      server {
      	listen 80;
      	server_name 192.168.25.35; 
      	# 当接收到http请求时,首先host和这里的server_name进行匹配,如果匹配上,则走这个虚拟主机的location路由
      
      	# 静态资源则路由到这里
      	location /static/~(.*)(.jpg|.png|.gif|.jepg|.css|.js|.css){
      		alias html;
      	}
      	# 其他的url则转发到 http://192.168.25.35:8080
      	location / {
      		proxy_pass http://192.168.25.35:8080;
      	}
      }
      

    参考

    1. Nginx
    2. Nginx配置详解
  • 相关阅读:
    Oracle: 一个很让人纠结的sql问题,给自己长个记性
    TextInfo list of CultureInfo
    一个简单的面试题称粮食
    C++ 中什么是内联函数(zhuan)
    C/C++ 到 shellcode 过程
    常量指针与指针常量的区别(转帖)
    分清函数指针和指针函数
    如何编写自己的缓冲区溢出利用程序? (zz)
    动态获取API函数地址对抗win7 aslr安全机制(转)
    暴力搜索内存空间获得 Api 的线性地址
  • 原文地址:https://www.cnblogs.com/weiweng/p/12497306.html
Copyright © 2020-2023  润新知