Nginx基础知识

1、nginx正向代理、反向代理

Nginx基础知识

正向代理:

在如今的网络环境下,如果由于技术需要要去访问国外的某些网站,此时会发现位于国外的某网站通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息

正向代理,"它代理的是客户端",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理:

某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用Nginx进行反向代理实现的,并且通过封装Nginx和其他的组件之后起了个高大上的名字:Tengine

Nginx基础知识

反向代理,"它代理的是服务端",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载

负载均衡

公司会建立很多的服务器,这些服务器组成了服务器集群,然后,当用户访问网站的时候,先访问一个中间服务器,再让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入选择的服务器

所以,用户每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况

一句话:nginx会给你分配服务器压力小的去访问

2、Nginx反向代理与负载均衡的实现

用户访问网站的时候首先会访问nginx服务器,然后nginx服务器再从服务器集群中选择压力较小的服务器,将该访问请求引向该服务器。

nginx常用命令

  • 启动nginx

  • nginx

  • 当敲完nginx这5个键的时候,并没有任何反应,此时你只需访问localhost:8080(默认)即可

  • 关闭nginx

  • 只需nginx -s stop,停止nginx服务

  • 重启nginx

  • nginx -s reload

  • 每次修改完.conf文件就需要重启nginx

  • 检查配置

  • 检查修改的nginx.conf配置是否正确

  • nginx -t

  • 如果出现下面ok和successfull就代表正确了,其他的都不对

nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

proxy_pass

nginx反向代理主要通过proxy_pass来配置,将项目的开发机地址填写到proxy_pass后面,正常的格式为proxy_pass URL即可

server {
    listen 80;
    location / {
        proxy_pass http://10.10.10.10:20186;
    }
}

Upstream模块实现负载均衡

  • ip_hash指令

  • server指令

  • upstream指令及相关变量

上面写的三个指令,我们直接通过代码来一一分析

// 修改nginx.conf
worker_processes 1;
events {
    worker_connections 1024;
}
http {
    upstream firstdemo {
        server 39.106.145.33;
        server 47.93.6.93;
    }
    server {
        listen 8080;
        location / {
            proxy_pass http://firstdemo;
        }
    }
}

上面修改的nginx.conf就是上图中花圈的那个文件,nginx配置的主要修改就在这里。化繁为简,把原本nginx.conf里的内容直接替换为上面的不到20行的代码了

既然不到20行,那就把里面对应的内容统统解释一下吧,有个了解就好

  • worker_processes

  • 工作进程数,和CPU核数相同

  • worker_connections

  • 每个进程允许的最大连接数

  • upstream模块

  • 负载均衡就靠它

  • 语法格式:upstream name {}

  • 里面写的两个server分别对应着不同的服务器

  • server模块

  • 实现反向代理

  • listen监督端口号

  • location / {}访问根路径

  • proxy_pass http://firstdemo,代理到firstdemo里两个服务器上

上面修改了nginx.conf之后,别忘了最重要的一步重启nginx

那么再次访问localhost:8080,会看到如下图页面

Nginx基础知识

Nginx基础知识

每次刷新都会访问不同的服务器,这样就做到了负载均衡处理

不过,更应该做到的是当用户第一次访问到其中一台服务器后,下次再访问的时候就直接访问该台服务器就好了,不用总变化了。那么就发挥了ip_hash的威力了

// 省略...
    upstream firstdemo {
        ip_hash;
        server 39.106.145.33;
        server 47.93.6.93;
    }

ip_hash它的作用是如果第一次访问该服务器后就记录,之后再访问都是该服务器了,这样比如第一次访问是33服务器,那之后再访问也会分配为33服务器访问了

工作中的简单使用

在公司开发项目的时候,遇到设计,产品走查环节的时候,不能每次都让他们去配一个host,毕竟这样不友好,走查起来有麻烦。所以更应该给他们直观的感受,既给一个访问地址就可以看到样子

下面给大家看一下,我正常在公司时nginx做的反向代理配置,和咱们上面的如出一辙,只是加了一个server_name,用指定的域名去访问即可

server {
    listen       80;
    server_name  chd.news.so.m.qss.test.so.com ;
    auth_basic off;
    location / {
        proxy_pass    http://10.10.10.10:20186;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 60;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
    }
}

参考:https://www.cnblogs.com/wcwnina/p/8728391.html

上一篇:java POI excel 导出复合样式(一个单元格两个字体)


下一篇:Smali语法编程