• nginx笔记(千峰)


    一: 正向代理和反向代理:

          正向代理: 客户端想要访问谷歌是访问不了的, 通过正向代理, 可以访问谷歌. 

                 客户端了解代理服务器和目标服务器是谁.

                 目的就是突破访问权限, 对目标服务器隐藏客户端ip地址;

              

          反向代理: 配置在服务器端的, 与客户端完全没有关系的.

                客户端不知道访问的是哪台服务器, 

                使用反向代理可以达到负载均衡, 并且可以隐藏真正的ip地址

                   

    一.   当有服务超过150的并发访问量时候, 需要配置多台tomcat服务器, 才能抗住压力.

           但多台服务器时候, 客户端会向哪一台服务器发送请求怎么确定? 并且动静资源怎么处理? 然后请求通过数据库获取数据返回, 将数据返回给客户端

    此时, 可以将nginx放到服务器前, 让服务器来通过自己的负载均衡策略,

      • 决定将客户端的请求发送到哪台服务器.
      • 并且将静态资源放到Nginx, 不需要去服务器请求静态资源
      • nginx承受的并发访问量轻松到5w

    二. niginx安装

      2.1.准备yml文件

    version: '3.1'
    services: 
      nginx:
        image: daocloud.io/library/nginx:1.13.2
        container_name: nginx
        restart: always
        environment:
          - TZ=Asia/Shanghai
        ports: 
          - 80:80
    volumes:
    - /opt/docker_nginx/conf.d/:/etc/nginx/conf.d

      2.2, 创建docker_nginx目录, docker-compose.yml文件, 并用docker-compose up -d 命令来启动.

        之后, 访问80端口, 就可以查看到nginx的欢迎页面

     2.3. 配置nginx

    先进入nginx内部,然后cat nginx.conf的内容:


     
    user  nginx;
    worker_processes  1;# 值越大, 并发能力越强
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024; # 值越大, 并发能力越强
    }
    
    
    http {
        include       /etc/nginx/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  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf; # 引入的配置文件
    }

    引入的conf.d下的default.conf文件内容(需要修改的是server块的这三个内容)

    server {
        listen       80; # nginx的端口
        server_name  localhost;    # nginx的域名
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {   # 路径映射
            root   /usr/share/nginx/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   /usr/share/nginx/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;
        #}
    }

     根据数据卷, 在/opt/docker_nginx/conf.d目录下, vi   conf.d, 添加自己的配置:

    server {
        listen       80; # nginx的端口
        server_name  localhost;    # nginx的域名
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {   # 路径映射
            root   /usr/share/nginx/html;  # 路径
            index  index.html index.htm;
        }
    }

    三. 基于nginx实现反向代理

    3.1 准备:

    • 启动一个tomcat服务器;保证能够通过服务器直接访问到tomcat
    • 修改nginx的配置: 根据数据卷中的配置, vi default.conf , 通过nginx来访问tomcat
    • 设置proxy_pass  值是tomcat的地址

    server {
      listen 80;
      server_name localhost;
      # 配置反向代理
      location / {
        proxy_pass http://192.168.43.173:8080/;
      }
    #  location / {
     #   root /usr/share/nginx/html;
      #  index index.html index.htm;
       # }
    }

    3.2 location块:配置请求的路由配置,

          可以写多个location块, 对应不同的路径

           配置规则:

      •  = 精准配置 location = / {  精准配置url, 后面不能带任何路径}
      • ^~  精准前缀匹配   location ~^ /img/{ 配置所有有以img开头的路径} 
      • ~ 正则匹配  location ~ /xxx{ 匹配所有以xxx开头的路径}
      • ~* .(gif|jpg|png)${匹配以gif jpg png结尾的}
      • /  通用配置 location /xxx {  后面能带xxx开头的路径}

    location /admin/ { proxy_pass http://127.0.0.1:8090 }

     

    example.com/admin -> http://127.0.0.1:8090
    example.com/admin/test -> http://127.0.0.1:8090/test
    example.com/admin/one -> http://127.0.0.1:8090/one

    四. nginx负载均衡(轮询. 权重和ip哈希三种方式)

        4.1.轮询: ababab这种大致情况,轮流访问nginx配置的proxy_pass下的路径

           default.conf的配置(注意:自己声明的变量中不能用下划线)

    #配置一个upstream
    upstream my-server{ server 192.168.43.173:8080; server 192.168.43.173:8083; } server { listen 80; server_name localhost; #轮询的配置 location / { proxy_pass http://my-server/; } # 配置反向代理 # location / { # proxy_pass http://192.168.43.173:8080/; # } # location / { # root /usr/share/nginx/html; # index index.html index.htm; # } }

         4.2. 权重: 按照 服务器的处理速度 来决定访问比例;下面的2:10的比例, 本人亲测, 比较准;

        配置: 在轮询基础上加上权重即可

    #不加权重是轮询,加权值是按权重划分访问比例次数
    
    upstream my-server-weight{
      server 192.168.43.173:8080 weight=2;
      server 192.168.43.173:8083 weight=10;
    }
    
    #upstream my-server{
    #  server 192.168.43.173:8080;
    #  server 192.168.43.173:8083;
    #}
    server {
      listen 80;
      server_name localhost;
    #轮询的配置
      location / {
        proxy_pass http://my-server-weight/;
      }
      # 配置反向代理
    #  location / {
     #   proxy_pass http://192.168.43.173:8080/;
     # }
    #  location / {
     #   root /usr/share/nginx/html;
      #  index index.html index.htm;
       # }
    }
    

         4.3 ip哈希: nginx拿到ip地址后, 通过哈希运算得到结果, 来决定打到哪台服务器;

                         即如果ip地址不变, 则一直访问同一台服务器.

    # ip哈希
    upstream my-server-iphash{
      ip_hash;
      server 192.168.43.173:8080;
      server 192.168.43.173:8083;
    }
    
    
    #不加权重是轮询,加权值是按权重划分访问比例次数
    
    #upstream my-server-weight{
    #  server 192.168.43.173:8080 weight=2;
    #  server 192.168.43.173:8083 weight=10;
    #}
    
    #upstream my-server{
    #  server 192.168.43.173:8080;
    #  server 192.168.43.173:8083;
    #}
    server {
      listen 80;
      server_name localhost;
    #轮询的配置
      location / {
        proxy_pass http://my-server-iphash/;
      }
      # 配置反向代理
    #  location / {
     #   proxy_pass http://192.168.43.173:8080/;
     # }
    #  location / {
     #   root /usr/share/nginx/html;

    四. nginx 动静分离

        4.1 为什么动静分离: 通过动静分离提高并发能力

             nginx的并发能力公式: 

               动态资源: worker_processes * worker_connections / 4 (为什么是4, 因为nginx要访问服务器和数据库,)

               静态资源: worker_processes * worker_connections / 2 (因为nginx直接给就可以, 不需要访问数据库)

             

          4.2 配置

          动态资源代理: 

     location / {
        proxy_pass  路径;
      }

         静态资源代理: 访问的是nginx所在的服务器的静态资源, 通过docker添加配置, 把nginx所在的服务器映射到数据卷中,达到修改数据卷就修改静态资源

     location / {
       root 静态资源路径;
       index 默认访问的路径资源;
       autoindex on: #代表展示全部静态资源, 以列表形式展开
      }

    1.修改docker-compose.yml

    2 , 操作步骤

     然后访问http://192.168.43.173/img/1.jpg或者http://192.168.43.173/html就会直接冲nginx服务器拿到了.

  • 相关阅读:
    dotnet logging serilog support
    普通索引和唯一索引,应该怎么选择?
    怎么减少行锁对性能的影响?
    全局锁和表锁 :给表加个字段怎么有这么多阻碍?
    Python调用函数模板
    Shell语言开发基础模板
    Python语言开发小工具库
    笔记day02
    笔记day06
    第2周需求
  • 原文地址:https://www.cnblogs.com/dangdanghepingping/p/14330627.html
Copyright © 2020-2023  润新知