Nginx (一) Nginx介绍 & 正向代理 & 反向代理 及配置

在这里插入图片描述

目录

  1. 介绍Nginx
  2. Nginx处理高并发
  3. 正向代理
  4. 正向代理配置
  5. 反向代理
  6. 反向代理配置


介绍Nginx

Nginx是一款自由的、开源的、高性能的HTTP服务器和 反向代理 服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

  1. Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
  2. 高度的模块化和自由软件许可证使得第三方模块层出不穷(开源)
  3. Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上
  4. 稳定性极高


Nginx 解决高并发
nginx高并发原理( 多进程+epoll实现高并发 )
  1. Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。

  2. 每个子进程只有一个线程(协程),采用的 IO多路复用模型epoll,实现高并发。

epoll能实现高并发原理
  1. epoll() 中内核则维护一个链表,epoll_wait 方法可以获取到链表长度,不为0就知道文件描述符准备好了。

  2. 在内核实现中 epoll 是根据每个 sockfd 上面的与设备驱动程序建立起来的回调函数实现的。

  3. 某个 sockfd 上的事件发生时,与它对应的回调函数就会被调用,来把这个 sockfd 加入链表,其他处于“空闲的”状态的则不会。

  4. epoll上面链表中获取文件描述,这里使用内存映射(mmap)技术, 避免了复制大量文件描述符带来的开销

内存映射(mmap):内存映射文件,是由一个文件到一块内存的映射,将不必再对文件执行I/O操作

nginx和apache比较
  • nginx相对于apache的优点
  1. 轻量级,同样起web 服务,比apache 占用更少的内存及资源

  2. 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

  3. 高度模块化的设计,编写模块相对简单,社区活跃,各种高性能模块出品迅速啊

  • apache 相对于nginx 的优点
  1. apache 更为成熟,少 bug ,稳定性好

  2. rewrite ,比nginx 的rewrite 强大

  3. 模块超多,基本想到的都可以找到



代 理
介绍代理:

说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;
此时就涉及到两个角色,一个是被代理角色 (A_),一个是目标角色 (B_)A_ 通过这个代理访问 B_ 完成一些任务的过程称为代理 (C_) 操作过程;比如客人去买双鞋,这个店铺就是 (C_)(A_) 就是厂家,(B_) 就是用户。

代理呢又分为正向代理反向代理

正向代理:

首先我们先举个例子:比如说我们在 YouTob 上查找学习资料,大家会发现很慢;这个时候就会需要到正向代理,最明显的例子(1FQ),FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们

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

总结来说:正向代理,“它代理的是客户端,代客户端发出请求”,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途

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

正向代理配置

现在的网站基本上都是https,要解决既能访问http80端口也能访问https443端口的网站,需要配置两个SERVER节点,一个处理HTTP转发,另一个处理HTTPS转发,而客户端都通过HTTP来访问代理,通过访问代理不同的端口,来区分HTTP和HTTPS请求。
Nginx的安装之前的文章 –> 安装Nginx <–

环境介绍
代理服务器系统环境为:centos
nginx代理服务器为:192.168.10.10
测试客户端为局域网内任意windows电脑或Linux电脑

[root@localhost ~] vim /usr/local/nginx-1.12.1/conf/nginx.conf
server {
    resolver 114.114.114.114;       #指定DNS服务器IP地址 
    listen 80;
    location / {
        proxy_pass http://$host$request_uri;     #设定代理服务器的协议和地址 
                proxy_set_header HOST $host;
                proxy_buffers 256 4k;
                proxy_max_temp_file_size 0k;
                proxy_connect_timeout 30;
                proxy_send_timeout 60;
                proxy_read_timeout 60;
                proxy_next_upstream error timeout invalid_header http_502;
    }
}
server {
    resolver 114.114.114.114;       #指定DNS服务器IP地址 
    listen 443;
    location / {
       proxy_pass https://$host$request_uri;    #设定代理服务器的协议和地址 
             proxy_buffers 256 4k;
             proxy_max_temp_file_size 0k;
       proxy_connect_timeout 30;
       proxy_send_timeout 60;
       proxy_read_timeout 60;
       proxy_next_upstream error timeout invalid_header http_502;
    }
}
[root@localhost ~] /usr/local/nginx-1.12.1/sbin/nginx -s reload

Linux客户端访问测试

[root@localhost ~] curl  -I --proxy 192.168.10.10:80 www.baidu.com
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Mon, 11 Jun 2018 15:37:47 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Thu, 31 May 2018 09:28:16 GMT
Connection: keep-alive
ETag: "5b0fc030-264"
Accept-Ranges: bytes
https的访问测试

[root@localhost ~] curl  -I --proxy 192.168.10.10:443 www.baidu.com
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Mon, 11 Jun 2018 15:38:07 GMT
Content-Type: text/html
Content-Length: 277
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Etag: "575e1f5c-115"
Last-Modified: Mon, 13 Jun 2016 02:50:04 GMT
Pragma: no-cache

设置Linux客户端全局代理

[root@localhost ~] vim /etc/profile
export http_proxy='192.168.10.10:80'
export http_proxy='192.168.10.10:443'
export ftp_proxy='192.168.10.10:80'

[root@localhost ~] source /etc/profile

[root@localhost ~] curl -I www.baidu.com:80
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Mon, 11 Jun 2018 16:10:18 GMT
Content-Type: text/html
Content-Length: 277
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Etag: "575e1f5c-115"
Last-Modified: Mon, 13 Jun 2016 02:50:04 GMT
Pragma: no-cache
[root@localhost ~]# curl -I www.baidu.com:443
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Mon, 11 Jun 2018 16:10:27 GMT
Content-Type: text/html
Content-Length: 277
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Etag: "575e1f59-115"
Last-Modified: Mon, 13 Jun 2016 02:50:01 GMT
Pragma: no-cache

上面结果就说明我们的服务端nginx正向代理和客户端使用nginx做为全局代理设置成功。

–> 正向代理原址 <–


反向代理

举例:我国的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足用户访问量了,此时就出现了分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用Nginx进行反向代理实现的,并且通过封装Nginx和其他的组件之后起了个高大上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官网查看具体的信息http://tengine.taobao.org/。

多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。 此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。 因为客户端不需要任何配置就可以访问。
反向代理,“它代理的是服务端,代服务端接收请求”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:

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

反向代理配置

本文主要配置Nginx的反向代理,及公司有多台服务器都需要公司一台主Nginx代理配置。使用Nginx+Tomcat实现此项目的反向代理,至于Nginx,tomcat如何搭建百度一大把。此案例是在一台服务器上面实现,一台虚拟机安装了两个tomcat。

  1. 虚拟机环境介绍。
    服务器ip:192.168.161.189
    Nginx端口:80
    Tomcat1端口:8070
    Tomcat2端口:8080
    一台服务器安装了两个Tomcat,使用不同端口实现。

  2. 测试搭建的nginx,tomcat是否正常访问。
    先测试一下访问搭建好的nginx有没有问题。
    在这里插入图片描述
    Nginx访问正常。
    测试一下搭建的tomcat,(自己编辑了一个用于测试的简单页面,端口是8070)
    在这里插入图片描述
    tomcat访问正常。

  3. 配置反向代理。

[root@localhost conf] vim Nginx.conf

在server段里面的location加上proxy_pass http://ip:端口;

server{
	listen 80;
	server_name 192.168.161.189;
	
	# charset koi8-r;
	# access_log logs/host.access.log main;
	
	location / {
	
		proxy_pass http://192.168.161.189:8070; `注意这里`
			root html;
			idnex index.html index.htm;
	}
}

Nginx配置完成后重启一下nginx。

# 命令大全
1、查找nginx路径:whereis nginx

2、启动 service nginx start

3、查看Nginx的版本号:nginx -V

4、停止 nginx -s stop

5、退出 nginx -s quit

6、重启加载配置 nginx -s reload  
   /etc/init.d/nginx -s reload 也可以

重启没报错说明配置文件没问题。

使用浏览器进行访问。
在这里插入图片描述
简单的反向代理已经完成。

配置代理多个网站及服务。

[root@localhost conf] vim Nginx.conf

配置多个反向代理实现方式,是通过不同的端口代理访问。这里复制一个server段,将两个server段nginx的端口更改,使用nginx的不同端口访问。

第一个server段配置tomcat1(192.168.161.189:8070)
在这里插入图片描述
第二个server段配置(192.168.161.189:8080)
在这里插入图片描述
配置完成后,重启nginx代理。

[root@localhost conf] /etc/init.d/nginx -s reload

先访问nginx代理的第一个tomcat1。(通过nginx的8081代理的tomcat1。)
在这里插入图片描述
访问nginx代理的第二个tomcat2。(通过nginx的8082代理的tomcat2。)
在这里插入图片描述
以上配置就是通过nginx的不同端口代理多个地址,若还要代理更多通过nginx的不同端口,增加server段即可。访问量大的网站不建议代理太多。

正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见;而反向代理是代理服务器端,为服务器收发请求,使真实服务器对客户端不可见。

–> 反向代理配置原址 <–


  1. 科学上网 ↩︎

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值